1. Ubuntu主机:FFmpeg + WebSocket 推流
(1) 安装依赖
sudo apt update
sudo apt install -y ffmpeg websocat
(2) 推流命令
将 /dev/video0
的摄像头数据通过 H.264 编码,封装为 MPEG-TS 流,再通过 WebSocket 发送到阿里云服务器:
ffmpeg -f v4l2 -input_format yuyv422 -video_size 640x480 -framerate 30 -i /dev/video0 \
-c:v libx264 -preset ultrafast -tune zerolatency -f mpegts - \
| websocat -b ws://阿里云服务器IP:8000/ws/video/
参数说明:
-f v4l2
: 从摄像头采集-c:v libx264
: H.264 编码-f mpegts
: 输出为 MPEG-TS 格式(适合网络传输)websocat
: 将数据通过 WebSocket 发送
2. 阿里云服务器:Django + WebSocket 接收
(1) 安装依赖
sudo apt update
sudo apt install -y python3-pip
pip3 install django channels channels_redis
(2) 创建 Django 项目
django-admin startproject video_streamer
cd video_streamer
python3 manage.py startapp stream
(3) 配置 WebSocket 接收
stream/consumers.py
import os
from channels.generic.websocket import AsyncWebsocketConsumer
import asyncio
class VideoConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
async def disconnect(self, close_code):
pass
async def receive(self, text_data=None, bytes_data=None):
if bytes_data:
# 将数据转发给前端(通过WebSocket或存储为文件)
await self.send(bytes_data=bytes_data)
stream/routing.py