2014-10-17 3 views
2

Я работаю над программой python, которая получает разбитые куски видеофайлов через TCP-сокет. Во время приема, я тяну мои данные в переменную, как:Python: Воспроизвести видеофайл из буфера

film = sock.recv(100000) 

Что я сейчас делаю, пишу это в файл «received.mp4», а затем играть.

Есть ли способ, которым я мог бы напрямую воспроизводить это видео из буфера film?

ответ

3

Конечно, вы можете это сделать.

Я хотел бы использовать внешний проигрыватель и просто кормить куски, чтобы это 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 к вашему любимому видеопроигрывателю.

+0

Это похоже на достойный способ сделать это, но я не могу заставить его работать на видео mp4. Может ли кто-нибудь помочь с настройками терминала VLC? – Ali

+0

Я просто получил его на работу. Установка 'cmdline = ['vlc', '-']' позволяет VLC выяснить кодек и прочее самостоятельно. И мое видео начинает играть, со звуком тоже! – Ali