Clone
26
v1_CN_SampleTranscode2HLS
winlin edited this page 2022-01-06 11:57:15 +08:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

HOME > CN > HLS

转码后分发HLS部署实例

HLS需要h.264+aac若符合这个要求可以按照Usage: HLS部署,若不符合这个要求则需要转码。

如何知道流是否是h264+aac编码

  • Usage: HLS中的Q&A说明的问题。
  • 看编码器的参数FMLE可以选视频编码为vp6或者h264音频一般为mp3/NellyMoser。所以FMLE肯定推流是不符合要求的。
  • 看SRS的日志若显示hls only support video h.264/avc codec. ret=601,就明显说明是编码问题。

备注在虚拟机上测试一路流转码为aac需要3%CPU在物理机上可能稍好点。转码的开销比分发要大实际应用需要考虑这个因素。

分发纯音频流参考:HLS audio only

假设服务器的IP是192.168.1.170

第一步获取SRS。详细参考GIT获取代码

git clone https://github.com/ossrs/srs
cd srs/trunk

或者使用git更新已有代码

git pull

第二步编译SRS。详细参考Build

./configure --disable-all \
    --with-ssl --with-hls --with-nginx \
    --with-ffmpeg --with-transcode && make

第三步启动分发hlsm3u8/ts的nginx。详细参考HLS分发

sudo ./objs/nginx/sbin/nginx

备注为了突出HLS的配置我们在HLS的实例中没有使用SRS内置的HTTP Server可以配置几行就可以不用nginx。参考Usage: HTTP

备注请确定nginx已经启动可以访问nginx,若能看到nginx is ok则没有问题。

第四步编写SRS配置文件。详细参考HLS分发

将以下内容保存为文件,譬如conf/transcode2hls.audio.only.conf,服务器启动时指定该配置文件(srs的conf文件夹有该文件)。

# conf/transcode2hls.audio.only.conf
listen              1935;
max_connections     1000;
vhost __defaultVhost__ {
    hls {
        enabled         on;
        hls_path        ./objs/nginx/html;
        hls_fragment    10;
        hls_window      60;
    }
    transcode {
        enabled     on;
        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
        engine ff {
            enabled         on;
            vcodec          copy;
            acodec          libaacplus;
            abitrate        45;
            asample_rate    44100;
            achannels       2;
            aparams {
            }
            output          rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
        }
    }
}

备注这个配置使用只转码音频因为视频是h.264符合要求,若需要全转码,参考[HLS+Transcode][HLS-And-Transcode]

第五步启动SRS。详细参考HLS分发

./objs/srs -c conf/transcode2hls.audio.only.conf

第六步,启动推流编码器。详细参考HLS分发

使用FFMPEG命令推流

    for((;;)); do \
        ./objs/ffmpeg/bin/ffmpeg -re -i ./doc/source.200kbps.768x320.flv \
        -vcodec copy -acodec copy \
        -f flv -y rtmp://192.168.1.170/live/livestream; \
        sleep 1; \
    done

或使用FMLE推流

FMS URL: rtmp://192.168.1.170/live
Stream: livestream

生成的流地址为:

  • RTMP流地址为FMLE推流无HLS地址rtmp://192.168.1.170/live/livestream
  • 转码后的RTMP流地址为rtmp://192.168.1.170/live/livestream_ff
  • 转码后的HLS流地址为 http://192.168.1.170/live/livestream_ff.m3u8

备注因为FMLE推上来的音频有问题不是aac所以srs会报错当然啦不然就不用转码了。这个错误可以忽略srs是说rtmp流没有问题但是无法切片为hls因为音频编码不对。没有关系ffmpeg会转码后重新推一路流给srs。

备注如何只对符合要求的流切hls可以用vhost。默认的vhost不切hls将转码后的流推送到另外一个vhost这个vhost切hls。

第七步观看RTMP流。详细参考HLS分发

RTMP流地址为rtmp://192.168.1.170/live/livestream_ff

可以使用VLC观看。

或者使用在线SRS播放器播放srs-player-ff

备注请将所有实例的IP地址192.168.1.170都换成部署的服务器IP地址。

第八步观看HLS流。详细参考HLS分发

HLS流地址为 http://192.168.1.170/live/livestream_ff.m3u8

可以使用VLC观看。

或者使用在线SRS播放器播放jwplayer-ff

备注请将所有实例的IP地址192.168.1.170都换成部署的服务器IP地址。

Winlin 2014.3