Nginx 正向HLS流-需要解决方案

Nginx 正向HLS流-需要解决方案,nginx,ffmpeg,wowza,http-live-streaming,ffserver,Nginx,Ffmpeg,Wowza,Http Live Streaming,Ffserver,我正在接收带有FFmpeg的HLS/AppleHTTP流。源流看起来像: Input #0, hls,applehttp, from 'http://example.com/hls/index.m3u8': Duration: 00:00:00.09, start: 42870.540944, bitrate: 91 kb/s Program 0 Metadata: variant_bitrate : 0 Stream #0:0: Video: h264 (H

我正在接收带有FFmpeg的HLS/AppleHTTP流。源流看起来像:

Input #0, hls,applehttp, from 'http://example.com/hls/index.m3u8':
   Duration: 00:00:00.09, start: 42870.540944, bitrate: 91 kb/s
   Program 0
   Metadata:
      variant_bitrate : 0
   Stream #0:0: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1024x576 [SAR 1:1 DAR 16:9], 12.50 fps, 25 tbr, 90k tbn, 50 tbc
   Stream #0:1: Audio: aac ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 114 kb/s
   Stream #0:2: Unknown: none ([21][0][0][0] / 0x0015)

我需要用FFmpeg将这种流转发到流服务器。我的问题是,如何在没有编码的情况下使用FFmpeg,并且CPU使用率很高(我认为是视频拷贝-音频拷贝)。其次,哪种流媒体服务器软件是接收流并将其作为HLS流发送给用户的最佳(低cpu使用率)?

HLS代表HTTP直播流媒体。您不需要特殊的服务器将其发送到客户端,只需要一个常规的web服务器,如Nginx(您的标记之一)

你可以做:

ffmpeg-ihttp://example.com/hls/index.m3u8 -c copy/path/to/web/dir/index.m3u8

该命令将创建播放列表,并将片段复制到位于web服务器文档根目录中的
/path/to/web/dir
。客户端只需要新的URL


如果输入的播放列表是包含多个变体流的主播放列表,事情会变得更加复杂。在这种情况下,您需要将所有单独的流捕获到不同的目录,并在您的一侧写入一个新的主播放列表,以重新组合不同的流。

HLS代表HTTP直播流。您不需要特殊的服务器将其发送到客户端,只需要一个常规的web服务器,如Nginx(您的标记之一)

你可以做:

ffmpeg-ihttp://example.com/hls/index.m3u8 -c copy/path/to/web/dir/index.m3u8

该命令将创建播放列表,并将片段复制到位于web服务器文档根目录中的
/path/to/web/dir
。客户端只需要新的URL


如果输入的播放列表是包含多个变体流的主播放列表,事情会变得更加复杂。在这种情况下,您需要将所有单独的流捕获到不同的目录中,并在您的一侧写入一个新的主播放列表,以重新组合不同的流。

与我合作更好,将hls_wrap更改为等于hls_list_大小,hsl_时间也等于segment_时间

./ffmpeg -i http://example.com/index.m3u8 -c copy -segment_list_flags +live -hls_time 4 -hls_list_size 6 -hls_wrap 6 -segment_list_type m3u8 -map 0:0 -map 0:1 -segment_time 4 /var/www/hls/index.m3u8

更好地与我合作,将hls_wrap更改为等于hls_列表_大小,hsl_时间也等于段_时间

./ffmpeg -i http://example.com/index.m3u8 -c copy -segment_list_flags +live -hls_time 4 -hls_list_size 6 -hls_wrap 6 -segment_list_type m3u8 -map 0:0 -map 0:1 -segment_time 4 /var/www/hls/index.m3u8

非常感谢您提供了这个伟大的解决方案!我不知道ffmpeg会继续“下载”片段并创建index.m3u8文件。这真的很酷。再次感谢。我刚刚测试了你的解决方案,这个主意很好,但是。。。当我用VLC播放时,片段每2秒改变一次。。。我已经添加了选项-段时间30,但它没有改变。。。这里是我的整个ffmepg命令:./ffmpeg-i h**p://example.com/hls/index_2500.m3u8-c copy-hls_wrap 18-hls_list_size 9-segment_list_flags+live-segment_time 30/var/www/hls/index.m3u8…每次文件更改时,流就像冻结一样。。。你知道怎么解决吗?顺便说一句,我用的是lighty而不是nginx。。这个问题能解决吗。添加了-hls_time
/ffmpeg-ihttp://example.com/index.m3u8 -c复制-段列表标志+现场-hls\U时间10-hls\U列表大小6-hls\U包裹10-段列表类型m3u8-映射0:0-映射0:1-段列表时间10/var/www/hls/index.m3u8
感谢您的支持。是的,如果您不指定任何内容,则默认为2s。
-c copy
为我抛出一个错误:
必须至少指定一个输出文件my.m3u8命令找不到
非常感谢您提供了这个伟大的解决方案!我不知道ffmpeg会继续“下载”片段并创建index.m3u8文件。这真的很酷。再次感谢。我刚刚测试了你的解决方案,这个主意很好,但是。。。当我用VLC播放时,片段每2秒改变一次。。。我已经添加了选项-段时间30,但它没有改变。。。这里是我的整个ffmepg命令:./ffmpeg-i h**p://example.com/hls/index_2500.m3u8-c copy-hls_wrap 18-hls_list_size 9-segment_list_flags+live-segment_time 30/var/www/hls/index.m3u8…每次文件更改时,流就像冻结一样。。。你知道怎么解决吗?顺便说一句,我用的是lighty而不是nginx。。这个问题能解决吗。添加了-hls_time
/ffmpeg-ihttp://example.com/index.m3u8 -c复制-段列表标志+现场-hls\U时间10-hls\U列表大小6-hls\U包裹10-段列表类型m3u8-映射0:0-映射0:1-段列表时间10/var/www/hls/index.m3u8
感谢您的支持。是的,如果不指定任何内容,则默认为2s。
-c copy
会为我抛出一个错误:
必须至少指定一个输出文件my.m3u8 command not found