SRS-3.0拉流rtmp转hls 的过程

SRS是比较优秀的流媒体服务器。主要功能是接受媒体发布端的rtmp push,并发布。

但是在目前的3.0版本中有ingest功能,即拉流转发。SRS作为客户端拉流后,进行媒体的分发。这在某些情况下非常有用。

 

一、编译SRS

具体编译按官方文档,非常容易。我的操作系统是ubuntu 18.04,即使centos差别应该也不大。

 

二、编译ffmpeg

拉流转发的内部是使用ffmpeg实现的,没有ffmpeg会导致拉流失败

具体可以参考https://github.com/ossrs/srs/issues/1528

wget http://www.ffmpeg.org/releases/ffmpeg-4.2.tar.gz
tar -zxvf ffmpeg-4.2.tar.gz
cd ffmpeg-4.2
./configure
make
make install

这应该是比较单纯的ffmpeg,如果需要更多功能的ffmpeg,可以参考

https://github.com/markus-perl/ffmpeg-build-script

这个里面的编译脚本非常全,x265等插件都有。但是个别链接需要科学上网才能访问。

比如:https://aomedia.googlesource.com/aom/+archive/69a986c7d4c354dfbccec570ccbc44688612c083.tar.gz

可以将无法下载的模块屏蔽掉。

总之编译完成ffmpeg后,将ffmpeg复制到 obj/ffmpeg/bin/ffmpeg即可,这个路径是SRS的默认ffmpeg路径,可以在下面的配置文件中进行配置。

 

三、配置拉流

下面是ingest.rtsp.conf的默认配置,拉rtsp,向外推的是rtmp。

listen              1935;
max_connections     1000;
vhost __defaultVhost__ {
    ingest {
        enabled      on;
        input {
            type    stream;
            url     rtsp://admin:[email protected]:554/Streaming/Channels/501?transportmode=unicast;
        }
        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
        engine {
            enabled          on;
            perfile {
                rtsp_transport tcp;
            }
            vcodec copy;
            acodec copy;
            output          rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
        }
    }
}

修改配置文件

一是加入hls的支持

二是修改配置拉多个流,需要在ingest后面标名字进行区别,默认配置中没有名字,加多个会出错

# use ffmpeg to ingest file/stream/device to SRS
# @see https://github.com/ossrs/srs/wiki/v1_CN_SampleIngest
# @see full.conf for detail config.

listen              1935;
max_connections     1000;

daemon              on;
http_server {
    enabled         on;
    listen          8080;
    dir             ./objs/nginx/html;
}


vhost __defaultVhost__ {
    ingest tv{
        enabled      on;
        input {
            type    stream;
            url     rtmp://media.yunyuntx.com/live/tv;
        }
        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
        engine {
            enabled          on;
            vcodec copy;
            acodec copy;
            output  rtmp://127.0.0.1:[port]/live/tv; 
        }
    }
	
	ingest my{
        enabled      on;
        input {
            type    stream;
            url     rtmp://media.yunyuntx.com/live/my;
        }
        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
        engine {
            enabled          on;
            vcodec copy;
            acodec copy;
            output  rtmp://127.0.0.1:[port]/live/my; 
        }
    }
	
	 hls {
        enabled         on;
        hls_fragment    10;
        hls_window      60;
        hls_path        ./objs/nginx/html;
        hls_m3u8_file   [app]/[stream].m3u8;
        hls_ts_file     [app]/[stream]-[seq].ts;
    }
}

 

最后运行测试即可

./obs/srs  -c   ./conf/ingest.rtmp.conf

 

ps -aux|grep

可以看到后台有2个ffmepg进程在运行

root@host:/data/srs/srs/trunk$ ps aux|grep ffmpeg
root1     6365  0.5  0.0  83124 17416 pts/2    S    10:48   0:04 ./objs/ffmpeg/bin/ffmpeg -loglevel info -f flv -i rtmp://yunyuntx.com/live/tv -vcodec copy -acodec copy -f flv -y rtmp://127.0.0.1:1935/live/tv
root1     6366  0.5  0.0  83932 18224 pts/2    S    10:48   0:04 ./objs/ffmpeg/bin/ffmpeg -loglevel info -f flv -i rtmp://yunyuntx.com/live/my -vcodec copy -acodec copy -f flv -y rtmp://127.0.0.1:1935/live/my
root1     6611  0.0  0.0  16180  1108 pts/2    S+   11:02   0:00 grep --color=auto ffmpeg

 

你可能感兴趣的:(c++,linux,srs,rtmp,hls,ffmpeg)