2017-10-21 147 views
1

我使用ffmpeg转码HDHomerun Prime的实时流。一切都很美好。但是,如果可能的话,我希望能够改变HDHomerun上的频道,而不必停止并重新启动ffmpeg转码过程。Ffmpeg在转换HDHomerun Prime转换频道时挂起

我启动ffmpeg进程开始从HDHomerun读取UDP源。它使用m3u8播放列表将流写入一系列* .ts文件。

我使用hdhomerun_config改变装置上的信道的第二个,FFMPEG立即报告以下和挂起:

[mpegts @ 0000018b4e05be60] New video stream 0:3 at pos:295211888 and DTS:40884.7s=108 drop=0 speed=1.02x [mpegts @ 0000018b4e05be60] New audio stream 0:5 at pos:295279568 and DTS:40884.4s frame= 4488 fps= 29 q=23.0 q=27.0 q=23.0 size=N/A time=00:02:28.94 bitrate=N/A dup=108 drop=0 speed=0.959x

我使用推出的ffmpeg的命令是:

ffmpeg.exe -t 03:00:00 -i "udp://192.168.1.150:5000?fifo_size=1000000&overrun_nonfatal=1" -vf yadif=0:-1:1 -y -threads 4 -c:v libx264 -s 1280x720 -r 30 -b:v 4500k -force_key_frames expr:gte(t,n_forced*2) -profile:v high -preset fast -x264opts level=41 -c:a libfdk_aac -b:a 96k -ac 2 -hls_time 10 -hls_list_size 6 -hls_wrap 6 -hls_base_url /stream/ -hls_flags temp_file -hls_playlist_type event "C:\temp\streams\4500-stream.m3u8"

是否有一个特定的命令,我可以通过允许ffmpeg从此“恢复”?或者,有没有一种arg可以防止这种挂起?我正在使用Ubuntu的ffmpeg交叉编译的最新版v3.4。从ffmpeg.org使用ffmpeg for Windows的稳定版本v3.4也出现了这个问题。

编辑:

一个新发现的问题,但仍然没有解决: 如果我改变回原来的通道的通道,ffmpeg的是能够继续写入流。

示例:我从频道X开始.Ffmpeg正在记录到文件中。我更改为频道Y.Ffmpeg输出类似于上面发布的消息并“挂起”的消息。我改回到X频道,ffmpeg从它离开的地方回来,没问题。

+0

您可能需要脚本获取新的流。我怀疑FFmpeg是挂着的,它只是你最初从一个流开始,现在有一个新的不相关的流并排运行,没有来自原始流的更多数据。 – Brad

+0

你的意思是启动一个新的ffmpeg进程? – devo1929

回答

0

没有回答您的问题,太新的评论,但我一直在努力,在https://github.com/bkirkman/hdhrtv

基本上是基于另一个软件包,可同时做什么这个实施正在做的是为每个打开新的流渠道。我怀疑你需要做同样的事情,这也解释了为什么当你“返回”时,频道会自行恢复。不幸的是,除非您制作播放列表并缓冲每个频道,否则您可能无法获得解决方案,因为输入流发生变化。

我很想看看并测试你是否愿意分享你的代码。