输出视频:https://youtu.be/VxfoBQjoY6E
解释:
我想:处理Opencv中的相机流,并将其推到RTMP服务器上。我已经设置了NGINX (RTMP模块),我已经用RTMP (Flash )和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 它最后提到了速度。我认为应该接近1倍。我不知道如何做到这一点。
而且我和服务器在同一个网络上,如果需要的话我可以发布我的python代码。需要一些专家给我一些建议。
编辑
我的输入fps实际上是3。使用'-use_wallclock_as_timestamps', '1',我可以在日志中看到速度接近1倍。但是HLS并不是流媒体直播克里斯的建议部分奏效了。我不知道问题到底在哪里,我开始相信它与nginx模块有关。
这是最后的输出,左边是闪光灯,右边是hls。我在最后给大家展示了各种选择。https://youtu.be/jsm6XNFOUE4
发布于 2016-04-17 05:10:36
我以前也遇到过类似的问题,不管是原始视频(像你一样)还是MJPEG源。有两个输入选项可以尝试使用ffmpeg使其保持1倍的速度:
备选案文1
ffmpeg -re -i <rest of input options>-re告诉ffmpeg以本机输入速率读取。
选项2
ffmpeg -use_wallclock_as_timestamps 1 -i <rest of input options>-use_wallclock_as_timestamps告诉ffmepg,当它进来时,只取每一帧,占用系统时间,并将其作为时间戳。当速度减慢时,我发现这个选项最有效。
不顾一切
确保您是在一个恒定的帧编码。当框架变化时,ffmpeg可能会变得有些挑剔,因此在输出选项上,使用-r 25 (替换所需输出框架的25 )来强制ffmpeg使用静态框架输出。
发布于 2019-08-12 03:27:58
我遇到了同样的问题,发现ffmpeg无法自动填补空白,所以当您给ffmpeg提供3 fps时,客户端仍将以25 fps的速度播放,因此客户端需要在播放前缓存大量帧,然后以快速的速度播放,然后再停下来缓存帧。
因此,当您向ffmpeg提供这样的代码时,很容易就可以填补空白。
timeStart = get_time_seconds()
count = 0
some loop:
frame = getimage()
targetCount = (get_time_seconds()-timeStart)*25
repeatCount = targetCount - count
loop for repeatCount times:
proc.stdin.write(frame.tostring())
count = targetCount https://stackoverflow.com/questions/36422211
复制相似问题