Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encoding MPEG-TS段HTTP实时流媒体_Encoding_Ffmpeg_Http Live Streaming_Playlist_Mpeg - Fatal编程技术网

Encoding MPEG-TS段HTTP实时流媒体

Encoding MPEG-TS段HTTP实时流媒体,encoding,ffmpeg,http-live-streaming,playlist,mpeg,Encoding,Ffmpeg,Http Live Streaming,Playlist,Mpeg,我试图交错MPEG-TS段,但失败了。一组片段实际上是使用笔记本电脑中的内置摄像头拍摄的,然后使用FFMPEG和以下命令进行编码: ffmpeg -er 4 -y -f video4linux2 -s 640x480 -r 30 -i %s -isync -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 640x480 -vcodec libx264 -fflags +genpts -b 386k -coder 0 -me_range 16 -k

我试图交错MPEG-TS段,但失败了。一组片段实际上是使用笔记本电脑中的内置摄像头拍摄的,然后使用FFMPEG和以下命令进行编码:

ffmpeg -er 4 -y -f video4linux2 -s 640x480 -r 30 -i %s -isync -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 640x480 -vcodec libx264 -fflags +genpts -b 386k -coder 0 -me_range 16 -keyint_min 25 -i_qfactor 0.71 -bt 386k -maxrate 386k -bufsize 386k -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -aspect 640:480
fmpeg -er 4 -y -f avi -s 640x480 -r 30 -i ./DSCF2021.AVI -vbsf dump_extra -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 640x480 -vcodec libx264 -fflags +genpts -b 386k -coder 0 -me_range 16 -keyint_min 25 -i_qfactor 0.71 -bt 386k -maxrate 386k -bufsize 386k -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -aspect 640:480
另一个是使用以下命令编码的avi文件:

ffmpeg -er 4 -y -f video4linux2 -s 640x480 -r 30 -i %s -isync -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 640x480 -vcodec libx264 -fflags +genpts -b 386k -coder 0 -me_range 16 -keyint_min 25 -i_qfactor 0.71 -bt 386k -maxrate 386k -bufsize 386k -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -aspect 640:480
fmpeg -er 4 -y -f avi -s 640x480 -r 30 -i ./DSCF2021.AVI -vbsf dump_extra -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 640x480 -vcodec libx264 -fflags +genpts -b 386k -coder 0 -me_range 16 -keyint_min 25 -i_qfactor 0.71 -bt 386k -maxrate 386k -bufsize 386k -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -aspect 640:480
然后使用开源分段器将输出分段为ts段

如果两者都来自同一个来源(都来自相机),它们工作正常。但是,在这种情况下,第二组段将冻结。时间流逝,但视频不会移动。。 所以我认为这是一个编码问题。所以我的问题是,我应该如何更改ffmpeg命令以使其工作

通过交错,我的意思是,有一个包含第一组段的播放列表,另一个包含另一组段的播放列表,并让客户端依次调用一个(HTTP直播)

第一组段之一的ffprobe输出:

Input #0, mpegts, from 'live1.ts':
  Duration: 00:00:09.76, start: 1.400000, bitrate: 281 kb/s
  Program 1 Service01
    Metadata:
      name            : Service01
      provider_name   : FFmpeg
    Stream #0.0[0x100]: Video: h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 29.92 fps, 29.92 tbr, 90k tbn, 59.83 tbc
    Stream #0.1[0x101]: Audio: aac, 48000 Hz, stereo, s16, 111 kb/s
第二组段之一的ffprobe输出:

Input #0, mpegts, from 'ad1.ts':
  Duration: 00:00:09.64, start: 1.400000, bitrate: 578 kb/s
  Program 1 Service01
    Metadata:
      name            : Service01
      provider_name   : FFmpeg
    Stream #0.0[0x100]: Video: h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0.1[0x101]: Audio: aac, 48000 Hz, stereo, s16, 22 kb/s

谢谢你,

我在这个主题中看到了很多问题-请参阅:

  • 我不确定确切的问题是什么,但我想大多数人都会抱怨,当你把两个来源的内容混合在一起时,就会出现冻结

    我认为如果PTS和/或PCR是不连续的,而球员没有意识到或没有意识到这一点,可能会出现这种情况。也许,您可以确定时间戳的序列,并查看修复后是否解决了问题

    另见3.3.11。of:EXT-X-不连续性

    EXT-X-不连续性标签表示编码不连续性
    在它后面的媒体段和前面的媒体段之间
    信息技术可能发生变化的一组特征是:

    o文件格式
    o轨道的数量和类型
    o编码参数
    o编码序列
    时间戳序列


    因此,如果出现上述任何问题,播放列表文件中的中断标志可能会有所帮助。请尝试一些,并把更多的细节。我想,这也会帮助很多其他人。

    嗯,看起来应该没问题。您能显示每个流的ffprobe输出吗?另一种可能的解决方案是在编码和分段之前将捕获的视频和avi文件合并成一个视频。@vipw谢谢您的回复。我无法合并它们,因为捕获的流是活动的。。至于FFR探头。我再加上now@user1069624你能告诉我你使用哪种软件进行分割的细节吗?什么是指使用开源分段器的分段?@DipanMehta是的,我使用的是Carson Mcdonald的Live分段器。非常感谢您的努力,不幸的是不连续标签对我不起作用。。唯一有效的方法就是改变帧速率。。但是我以前遇到过这个顺序问题,如果我播放的片段顺序错误,屏幕会冻结。我通过为每一个新流创建一个单独的播放列表来解决这个问题。因此,如果我想播放流x中的片段1,2,3,然后播放流y中的片段21,22,我创建了一个单独的播放列表,其中只有21和22。再次感谢!