player.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import os
  2. import vlc
  3. from app import log
  4. class Player:
  5. '''
  6. args:设置 options
  7. '''
  8. def __init__(self, *args):
  9. self.instance = vlc.Instance(*args)
  10. self.media = self.instance.media_player_new()
  11. # 设置待播放的url地址或本地文件路径,每次调用都会重新加载资源
  12. def set_uri(self, uri):
  13. self.media.set_mrl(uri)
  14. # 播放 成功返回0,失败返回-1
  15. def play(self, path=None):
  16. if path:
  17. self.set_uri(path)
  18. return self.media.play()
  19. else:
  20. return self.media.play()
  21. # 暂停
  22. def pause(self):
  23. self.media.pause()
  24. # 恢复
  25. def resume(self):
  26. self.media.set_pause(0)
  27. # 停止
  28. def stop(self):
  29. self.media.stop()
  30. # 释放资源
  31. def release(self):
  32. return self.media.release()
  33. # 是否正在播放
  34. def is_playing(self):
  35. return self.media.is_playing()
  36. # 已播放时间,返回毫秒值
  37. def get_time(self):
  38. return self.media.get_time()
  39. # 拖动指定的毫秒值处播放。成功返回0,失败返回-1 (需要注意,只有当前多媒体格式或流媒体协议支持才会生效)
  40. def set_time(self, ms):
  41. return self.media.get_time()
  42. # 音视频总长度,返回毫秒值
  43. def get_length(self):
  44. return self.media.get_length()
  45. # 获取当前音量(0~100)
  46. def get_volume(self):
  47. return self.media.audio_get_volume()
  48. # 设置音量(0~100)
  49. def set_volume(self, volume):
  50. return self.media.audio_set_volume(volume)
  51. # 返回当前状态:正在播放;暂停中;其他
  52. def get_state(self):
  53. state = self.media.get_state()
  54. if state == vlc.State.Playing:
  55. return 1
  56. elif state == vlc.State.Paused:
  57. return 0
  58. else:
  59. return -1
  60. # 当前播放进度情况。返回0.0~1.0之间的浮点数
  61. def get_position(self):
  62. return self.media.get_position()
  63. # 拖动当前进度,传入0.0~1.0之间的浮点数(需要注意,只有当前多媒体格式或流媒体协议支持才会生效)
  64. def set_position(self, float_val):
  65. return self.media.set_position(float_val)
  66. # 获取当前文件播放速率
  67. def get_rate(self):
  68. return self.media.get_rate()
  69. # 设置播放速率(如:1.2,表示加速1.2倍播放)
  70. def set_rate(self, rate):
  71. return self.media.set_rate(rate)
  72. # 设置宽高比率(如"16:9","4:3")
  73. def set_ratio(self, ratio):
  74. self.media.video_set_scale(0) # 必须设置为0,否则无法修改屏幕宽高
  75. self.media.video_set_aspect_ratio(ratio)