相关的源码及工具已经开源至:https://gitee.com/easy_way/stream-obs-srs
obs+srs+nginx实现直播推流拉流
介绍
- 推流端一般为OBS、FFmpeg等推流软件或者摄像机等设备通过推流协议将编码后的音视频流推送到流媒体服务器。目前主流的流媒体服务器为Nginx-rtmp、SRS、EasyDarwin和Red5等。流媒体服务器将视频流进行解码封装之后,拉流端通过流媒体协议从流媒体服务器获取数据流。拉流端一般为PC端或者移动设备。不同的拉流设备对流媒体协议的兼容性不同。
- 本仓库将测试使用的一些工具或软件集成进来了,大家可以下载后结合教程进行自测。
软件架构
一、软件架构说明
推流端一般为OBS、FFmpeg等推流软件或者摄像机等设备通过推流协议将编码后的音视频流推送到流媒体服务器。目前主流的流媒体服务器为Nginx-rtmp、SRS、EasyDarwin和Red5等。流媒体服务器将视频流进行解码封装之后,拉流端通过流媒体协议从流媒体服务器获取数据流。拉流端一般为PC端或者移动设备。不同的拉流设备对流媒体协议的兼容性不同。
目前用于推流和拉流的主要流媒体协议为RTMP、HTTP-FLV和HLS,表1为三种流媒体协议在传输协议、数据格式、延迟和兼容性方面的对比。
通过对比分析,RTMP由于TCP的可靠性以及延迟低的特性,更适用于推流。从防火墙通过性和前端播放兼容性考虑,HTTP-FLV和HLS更适合拉流。HTTP-FLV适合PC端和移动App,HLS适合原生iOS。对时延有要求的场景也可以使用RTMP作为拉流协议,但是播放器需要集成Flash。
环境搭建
- 1、下载安装nginx
yum install git gcc gcc-c++ openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
useradd -r -s /sbin/nologin nginx
unzip nginx-rtmp-module-master.zip
tar -xvf nginx-1.8.1.tar.gz
cd nginx-1.8.1/
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--add-module=/home/nginx-rtmp-module-master
make install
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
nginx -v
- 2、修改nginx配置
cd /usr/local/nginx/conf
vim nginx.conf
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935; #端口号
chunk_size 4000;
application hls {
live on;
hls on;
hls_path /usr/local/nginx/html/hls; #切片存放位置
hls_fragment 5s;
hls_playlist_length 15s;
hls_continuous on;
hls_cleanup on;
hls_nested on;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8099;
server_name localhost;
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
}
alias /usr/local/nginx/html/hls;
expires -1;
add_header Cache-Control no-cache;
}
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /usr/local/extend_module/nginx-rtmp-module/;
}
}
}
- 3、启动nginx
启动nginx: nginx
重新加载:nginx -s reload
- 4、下载安装srs
git clone -b 4.0release https://gitee.com/ossrs/srs.git
cd srs/trunk
./configure
make
- 5、修改srs配置文件srs.conf
listen 1935;
max_connections 1000;
#srs_log_tank file;
#srs_log_file ./objs/srs.log;
daemon on;
http_api {
enabled on;
listen 1985;
}
http_server {
enabled on;
listen 8099;
dir ./objs/nginx/html;
}
rtc_server {
enabled on;
listen 8077; # UDP port
# @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate
candidate $CANDIDATE;
}
vhost __defaultVhost__ {
hls {
enabled on;
}
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
}
rtc {
enabled on;
# @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc
rtmp_to_rtc on;
# @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp
rtc_to_rtmp off;
}
tcp_nodelay on;
min_latency on;
play {
gop_cache off;
queue_length 10;
mw_latency 100;
}
publish {
mr off;
}
}
- 7、启动srs
./objs/srs -c conf/srs.conf
测试方案
- 1、ffmpeg作为推流端,Nginx-rtmp作为流媒体端,vlc作为拉流端
ffmpeg -f dshow -i video=“Integrated Camera” -framerate 25 -bufsize 1000000k -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec libfaac -f flv rtmp://172.21.0.105/hls/111
vlc播放rtmp://172.21.0.105/hls/111延时6~8秒
- 2、obs作为推流端,srs作为流媒体端,vlc作为拉流端
obs推流: rtmp://192.168.90.219/live/ 名称111
vlc播放rtmp://192.168.90.219/live/111 延时 3~5秒
- 3、obs作为推流端,srs作为流媒体端,网页webrtc作为拉流端
obs推流: rtmp://192.168.90.219/live/ 名称111
webrtc播放webrtc://192.168.90.219/live/111 1~3秒
- 4、手机作为推流端,srs作为流媒体端,vlc和网页webrtc作为拉流端
手机端推流设置:rtmp://192.168.90.219/live/111
vlc播放rtmp://192.168.90.219/live/111 延时 3~5秒
webrtc播放webrtc://192.168.90.219/live/111 1~3秒
初步结论
- 音视频通话采用webrtc、直播采用rtmp;
- 流媒体服务器采用开源srs;
- 网页播放采用webrtc延时最小;
- 推流端obs性能强于ffmpeg;
参与贡献
- Fork 本仓库
- 新建 Feat_xxx 分支
- 提交代码
- 新建 Pull Request
特技
- 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
- Gitee 官方博客 blog.gitee.com
- 你可以 https://gitee.com/explore 这个地址来了解 Gitee 上的优秀开源项目
- GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
- Gitee 官方提供的使用手册 https://gitee.com/help
- Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/