从网上看到一篇文章《Python 流媒体播放器(基于VLC)》,其中提到windows下开发VLC需要首先安装VLC,否则就需要设置环境变量PYTHON_VLC_MODULE_PATH。但是我尝试了一下,没有成功。 但是,这篇文章给了我一个思路:分析vlc.py文件。 我看了一下vlc.py代码,发现应该是3中方式加载VLC(按照代码顺序):
从自定义环境变量PYTHON_VLC_LIB_PATH指定的目录加载;从系统环境变量PATH指定的目录加载;从注册表加载;
测试了一下,写个记录怕自己忘了。
从PATH加载
在pycharm中安装python-vlc,并记录版本。我这里是3.0.7 从http://download.videolan.org/pub/videolan/vlc/下载对应版本的VLC Portable文件,文件名是*.7z或*.zip。 把下载的压缩包中的libvlc.dll、libvlccore.dll及plugins目录都加压到环境变量path指定的某个目录中,我直接解压到c:\windows\system32中了。 随后运行Python 流媒体播放器(基于VLC)中提供的代码。
import os
, time
import vlc
class Player:
'''
args:设置 options
'''
def __init__(self
, *args
):
if args
:
instance
= vlc
.Instance
(*args
)
self
.media
= instance
.media_player_new
()
else:
self
.media
= vlc
.MediaPlayer
()
def set_uri(self
, uri
):
self
.media
.set_mrl
(uri
)
def play(self
, path
=None):
if path
:
self
.set_uri
(path
)
return self
.media
.play
()
else:
return self
.media
.play
()
def pause(self
):
self
.media
.pause
()
def resume(self
):
self
.media
.set_pause
(0)
def stop(self
):
self
.media
.stop
()
def release(self
):
return self
.media
.release
()
def is_playing(self
):
return self
.media
.is_playing
()
def get_time(self
):
return self
.media
.get_time
()
def set_time(self
, ms
):
return self
.media
.get_time
()
def get_length(self
):
return self
.media
.get_length
()
def get_volume(self
):
return self
.media
.audio_get_volume
()
def set_volume(self
, volume
):
return self
.media
.audio_set_volume
(volume
)
def get_state(self
):
state
= self
.media
.get_state
()
if state
== vlc
.State
.Playing
:
return 1
elif state
== vlc
.State
.Paused
:
return 0
else:
return -1
def get_position(self
):
return self
.media
.get_position
()
def set_position(self
, float_val
):
return self
.media
.set_position
(float_val
)
def get_rate(self
):
return self
.media
.get_rate
()
def set_rate(self
, rate
):
return self
.media
.set_rate
(rate
)
def set_ratio(self
, ratio
):
self
.media
.video_set_scale
(0)
self
.media
.video_set_aspect_ratio
(ratio
)
def add_callback(self
, event_type
, callback
):
self
.media
.event_manager
().event_attach
(event_type
, callback
)
def remove_callback(self
, event_type
, callback
):
self
.media
.event_manager
().event_detach
(event_type
, callback
)
def my_call_back(event
):
print("call:", player
.get_time
())
if "__main__" == __name__
:
player
= Player
()
player
.add_callback
(vlc
.EventType
.MediaPlayerTimeChanged
, my_call_back
)
player
.play
("http://hd.yinyuetai.com/uploads/videos/common/"
"22970150925A6BB75E20D95798D129EE.flv?sc\u003d17d6a907580e9892"
"\u0026br\u003d1103\u0026vid\u003d2400382\u0026aid\u003d32"
"\u0026area\u003dML\u0026vst\u003d0")
while True:
pass
成功播放