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:12345678@192.168.2.21: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