转发HLS流 - 需要解决方案

时间:2015-08-12 22:19:44

标签: nginx ffmpeg wowza hls 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 (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的流转发到Stream Server。我的问题是,如何在没有编码的情况下使用FFmpeg并且CPU使用率很高(我认为是-video copy -audio copy)。第二,哪种流媒体服务器软件是最好的(低CPU使用率)来接收流并将其作为HLS流发送给用户?

2 个答案:

答案 0 :(得分:3)

HLS 代表 HTTP直播。您不需要特殊的服务器将其发送到客户端,只需要像Nginx(您的一个标签)这样的常规Web服务器。

你可以这样做:

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

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

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

答案 1 :(得分:0)

更好地与我合作,将hls_wrap更改为等于hls_list_size,同时hsl_time等于segment_time

./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