obs+srs+nginx实现直播推流拉流

相关的源码及工具已经开源至: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秒

初步结论
  1. 音视频通话采用webrtc、直播采用rtmp;
  2. 流媒体服务器采用开源srs;
  3. 网页播放采用webrtc延时最小;
  4. 推流端obs性能强于ffmpeg;
参与贡献
  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request
特技
  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. Gitee 官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解 Gitee 上的优秀开源项目
  4. GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
  5. Gitee 官方提供的使用手册 https://gitee.com/help
  6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/
  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值