ffmpeg推流之后画面出问题

博客主要围绕FFmpeg推流丢包问题展开。原因是FFmpeg默认接收线程数据队列大小为8,合流不够快时队列溢出,导致RTP接收数据丢包。解决办法是参考相关文章,使用thread_queue_size选项配置更大的接收线程数据队列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

推流命令

ffmpeg  -i rtsp:///h264/ch1/main/av_stream -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv rtmp://localhost/videotest/liveone

画面图片如下:

原因

FFmpeg默认接收线程数据队列大小thread_queue_size为8,当合流不够快时,接收数据队列溢出,导致RTP接收数据丢包。

解决

参考:FFmpeg的那些坑-RTP missed xxx packets
使用thread_queue_size选项配置大一点的接收线程数据队列,如:

ffmpeg  -thread_queue_size 512 -i rtsp:///h264/ch1/main/av_stream -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv rtmp://localhost/videotest/liveone
### 使用FFmpeg与OpenCV实现视频 #### 基本原理 通过OpenCV采集视频数据并将其传递给FFmpeg进行处理和送至RTMP服务器是一个常见的应用场景。此过程通常分为以下几个阶段:视频捕获、图像预处理、编码以及最终的。 1. **视频捕获** OpenCV支持多种输入源,包括USB摄像头和网络摄像机(如RTSP)。对于本地设备,可以直接利用系统的驱动程序;而对于远程资源,则可以通过调用FFmpeg接口来获取YUV格式的数据[^1]。 2. **图像预处理** 获取原始帧之后可能需要做一些调整比如改变分辨率大小或者转换颜色空间以便于后续操作更加高效或是满足特定编解码器的要求。这里可以借助FFmpeg强大的滤镜功能来进行必要的缩放及像素格式变换。 3. **视频编码** 编码环节至关重要因为它直接影响到传输效率和质量平衡点的选择。现代直播平台大多偏好H.264标准作为其压缩算法之一,在实际应用当中我们也会采用该方法完成这一任务。 4. **实时媒体协议(RTMP)** 当所有前期准备工作都完成后就可以启动最后一步即把封装好的比特传送给指定地址上的接收端了。这同样依赖于FFmpeg所提供的灵活API接口去构建完整的URL连接字符串从而达成目标。 以下是具体代码示例: ```python import cv2 import subprocess as sp def push_stream(video_url, rtmpUrl): cap = cv2.VideoCapture(video_url) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps = cap.get(cv2.CAP_PROP_FPS) command = ['ffmpeg', '-y', '-f', 'rawvideo', '-vcodec','rawvideo', '-pix_fmt', 'bgr24', '-s', "{}x{}".format(width, height), '-r', str(fps), '-i', '-', '-c:v', 'h264', '-preset', 'ultrafast', '-tune', 'zerolatency', '-f', 'flv', rtmpUrl] p = sp.Popen(command, stdin=sp.PIPE) while(cap.isOpened()): ret,frame = cap.read() if not ret: break # write to pipe p.stdin.write(frame.tobytes()) cap.release() p.terminate() if __name__ == "__main__": video_path = "your_video_source_here" rtmp_server_address = "rtmp://your_rtmp_server_address" push_stream(video_path, rtmp_server_address) ``` 上述脚本展示了怎样组合使用Python绑定库`cv2`(来自OpenCV项目)读取视频文件或者是相机画面,并且运用命令行工具FFmpeg执行进一步的操作直至成功上传至远端服务节点上。 另外值得注意的是当涉及到音轨同步等问题时还需要额外关注音频轨道的相关参数设定情况例如采样率等方面的内容[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值