我想在浏览器上显示 ffmpeg 流式传输的视频。
这是我制作的 python 脚本,但找不到方法,因为我不太喜欢 javascript。有人可以帮我吗?
import socketio
import subprocess
import uvicorn
sio = socketio.AsyncServer(async_mode='asgi', cors_allowed_origins='*')
app = socketio.ASGIApp(sio)
@sio.event
async def connect(sid, environ):
await sio.enter_room(sid, 'Streaming')
@sio.event
async def stream(cid):
video_path = r'temp_server\result.avi'
audio_path = r'temp_server\temp.wav'
ffmpeg_command = [
'ffmpeg',
'-re',
'-i', video_path,
'-i', audio_path,
'-c:v', 'copy',
'-c:a', 'aac',
'-f', 'mpegts',
'pipe:1'
]
try:
# Open a subprocess with pipes for stdout
process = subprocess.Popen(ffmpeg_command, stdout=subprocess.PIPE)
while True:
data = process.stdout.read(1024)
if not data:
break
await sio.emit('video', data, to=cid)
finally:
process.stdout.close()
print("Stream ended.")
if __name__ == '__main__':
try:
uvicorn.run(app, host='0.0.0.0', port=8000)
except KeyboardInterrupt:
exit()
不要使用Socket.IO。
您可以只使用常规 HTTP,而不是使用 Socket.IO 及其传输的所有额外机制。 而且,如果您这样做,您甚至不需要在客户端进行任何特殊的操作。 常规的视频元素就足够了。
<video src="https://your-python-server.example.com/stream" preload="none"></video>