living直播流媒体服务器汇总

搭建所需基础原理介绍

主播端捕捉音频和视频后,进行H.264的视频编码和AAC的音频编码,再将编码后的数据整合成一个音视频包,然后通过rmtp推到流服务器,直播端用hls或者flv协议方式拉流。

hls延迟较为明显,要十几秒以上,主要是以下延迟

  • 服务器端的编码器和流分割器生成TS文件的时间
  • 客户端下载TS文件的时间,而通常要求下载完两个TS媒体文件
  • 客户端解码并播放

流服务选择测试

github开源 LiveGo

稳定性不好,直播延时大概17s,关键问题是服务经常挂掉,直接编译安装以及使用docker运行,都定期出现服务死掉的情况,报错如下:
在这里插入图片描述

nginx作为流媒体

使用nginx的nginx-rtmp-module的hls流媒体服务,老牌服务,稳定性好
插件安装

	 ./configure --with-http_stub_status_module --with-http_ssl_module --add-module=/usr/local/nginx-rtmp-module-1.2.1
	 make && make install

对应nginx配置

		worker_processes  1;
		#error_log  logs/error.log;
		pid        logs/nginx.pid;	
		events {
		    worker_connections  1024;
		}	
		rtmp {	
		    server {		
		        listen 1935;  #监听的端口	
		        chunk_size 4096;	
		        application rtmplive {
		            live on;
		        }	
		        application hls {
		            live on;
		            hls on;
		            hls_path /tmp/hls; #视频流存放地址
		            hls_fragment 3s;   #本地切片长度
		            hls_playlist_length 9s;  #HLS播放列表长度
		            hls_continuous on; #连续模式。
		            hls_cleanup on;    #对多余的切片进行删除。
		            hls_nested on;     #嵌套模式。
		        }
		    }
		}
		
		http {
		    include       mime.types;
		    default_type  application/octet-stream;		
		    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
		    #                  '$status $body_bytes_sent "$http_referer" '
		    #                  '"$http_user_agent" "$http_x_forwarded_for"';	
		    #access_log  logs/access.log  main;		
		    sendfile        on;
		    #tcp_nopush     on;	
		    keepalive_timeout  65;		
		    #gzip  on;
		    server {	
		        listen      8080;		
		        location /hls {
		            # Serve HLS fragments
		            types {
		                application/vnd.apple.mpegurl m3u8;
		                video/mp2t ts;
		            }
		            root /tmp;
		            add_header Cache-Control no-cache;
		            add_header Access-Control-Allow-Origin *;  #解决跨域问题
		            add_header Access-Control-Allow-Methods 'GET,POST';
		            add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
		        }
		    }
		}

遇到问题如下
a. hls_fragment 1s; hls_playlist_length 3s; 设置太小,延迟会降低,之前配置成5/15s延迟超过20s,改为1/3s后延迟15s,但是切片和播放长度设置太小导致新的问题,播放时频繁出现如下报错,卡了很久才进入房间,最终将时间设置成3/9s后解决问题,如上面配置所示。
b. 跨域问题 add_header Access-Control-Allow-Origin *;解决Google浏览器访问跨域的问题,BTW,跨域问题在Windows系统浏览器有问题,MAC的Safari浏览器能正常访问
在这里插入图片描述

阿里云流媒体服务

如下图所示,打开工作台,添加对应播流和推流域名,按照官方文档提示配置CNAME解析后方可使用
在这里插入图片描述
需要注意的是,如果推拉流的域名加上鉴权,默认key有效市时长是30分钟,过时拉流域名就失效,可以无限改大,这样不会失效,如下所示:
在这里插入图片描述

不间断推流实现点播

rzrobert/st-load-master工具可以不通过主播端,直接通过命令,不间断推流,创建测试直播间,已经检测并发性能,安装步骤参考GitHub说明,推流如下:

	./objs/sb_rtmp_publish -i doc/demo.flv -c 1 -r rtmp://172.31.12.26:1935/hls/99999
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值