【发布时间】:2014-10-18 00:57:47
【问题描述】:
我正在开发一个 python 程序,该程序通过 TCP 套接字接收损坏的视频文件块。 在接收时,我将数据提取到一个变量中,例如:
film = sock.recv(100000)
我目前正在做的是将其写入文件“received.mp4”然后播放。
有没有办法可以直接从film 缓冲区播放此视频?
【问题讨论】:
我正在开发一个 python 程序,该程序通过 TCP 套接字接收损坏的视频文件块。 在接收时,我将数据提取到一个变量中,例如:
film = sock.recv(100000)
我目前正在做的是将其写入文件“received.mp4”然后播放。
有没有办法可以直接从film 缓冲区播放此视频?
【问题讨论】:
当然可以。
我会使用一个外部播放器,然后将块提供给它的 stdin,如下所示:
# cmdline = ['vlc', '--demux', 'h264', '-'] #pick a media player
# cmdline = ['mplayer', '-fps', '25', '-cache', '1024', '-']
player = subprocess.Popen(cmdline, stdin=subprocess.PIPE)
while True:
data = sock.recv(1024)
if not data:
break
player.stdin.write(data)
(取自http://picamera.readthedocs.org/en/latest/recipes1.html#recording-to-a-network-stream)
您还可以使用命名管道并对其进行写入,或者使用一些 python 绑定到您最喜欢的视频播放器。
【讨论】:
cmdline = ['vlc', '-'] 让VLC 自己找出编解码器和东西我猜。我的视频开始播放了,还有声音!