使用socketio从python到浏览器的FFMPEG流

问题描述 投票:0回答:1

我想在浏览器上显示 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()
ffmpeg socket.io video-streaming python-socketio ffmpeg-python
1个回答
0
投票

不要使用Socket.IO。

您可以只使用常规 HTTP,而不是使用 Socket.IO 及其传输的所有额外机制。 而且,如果您这样做,您甚至不需要在客户端进行任何特殊的操作。 常规的视频元素就足够了。

<video src="https://your-python-server.example.com/stream" preload="none"></video>
© www.soinside.com 2019 - 2024. All rights reserved.