【发布时间】:2016-07-25 03:34:44
【问题描述】:
输出视频: https://youtu.be/VxfoBQjoY6E
说明:
我想:在 Opencv 中处理摄像头流并将其推送到 RTMP 服务器。我已经设置了 NGINX(RTMP 模块),并且已经使用 RTMP(Flash Player)和 HLS 测试了流式视频。
我正在循环读取帧并在 python 中使用“子进程”来执行 ffmpeg 命令。这是我正在使用的命令:
command = [ffmpeg,
'-y',
'-f', 'rawvideo',
'-vcodec','rawvideo',
'-pix_fmt', 'bgr24',
'-s', dimension,
'-i', '-',
'-c:v', 'libx264',
'-pix_fmt', 'yuv420p',
'-preset', 'ultrafast',
'-f', 'flv',
'rtmp://10.10.10.80/live/mystream']
import subprocess as sp
...
proc = sp.Popen(command, stdin=sp.PIPE,shell=False)
...
proc.stdin.write(frame.tostring()) #frame is read using opencv
问题:
我可以看到流很好,但它经常冻结和恢复。这是FFMPEG终端日志的输出:
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
frame= 117 fps= 16 q=22.0 size= 344kB time=00:00:04.04 bitrate= 697.8kbits/s speed=0.543x
最后提到了速度。我相信它应该接近1x。我不确定如何实现。
我和服务器在同一个网络上,如果需要,我可以发布我的 python 代码。需要一些 ffmpeg 大师给我一些建议。
编辑
我的输入 fps 实际上是 ~3。
使用'-use_wallclock_as_timestamps', '1',我可以在日志中看到速度接近 1 倍。
但是 HLS 没有直播,有大约 2 分钟的延迟,它会停止并且 .克里斯的建议部分奏效。我不确定问题到底出在哪里,我开始相信它与 nginx-rtmp 模块有关。
这是最终输出,左边是 flash,右边是 hls。我在最后展示了 ffmpeg 选项。 https://youtu.be/jsm6XNFOUE4
【问题讨论】:
-
您好,先生!我也有同样的问题,想将 mat 发送到 nginx 服务器,但是如何将 mat/images 写入输出流?
标签: opencv nginx ffmpeg rtmp http-live-streaming