快速搭建直播服务大体架构
srs+ffmpeg+第三方(阿里云,腾讯云等),因为不是专门做直播平台,所以借助第三方平台(服务器,带宽,cdn可以省不少心)。当然如果你想自建一个视频直播平台也是可以的~~
srs用来接收从手机客户端推来的rtmp流,ffmpeg用来对视频进行处理,比如增加logo或滤镜等,在各种技术尝试中,走过不少弯路,接收流方面还使用过netty,nginx-rtmp,流处理方面使用过javacv,但效果有些不理想.,java太吃内存,cpu。
下面我们来看一下大致的流程吧
srs的文档简单全面,附上git地址
https://github.com/ossrs/srs/wiki/v2_cn_home
第一步,获取srs。
git clone https://github.com/ossrs/srs
cd srs/trunk
或者使用git更新已有代码:
git pull
第二步,编译srs。
./configure && make
第三步,编写srs配置文件。
将以下内容保存为文件,譬如conf/rtmp.conf,服务器启动时指定该配置文件(srs的conf文件夹有该文件)。
# conf/rtmp.conf
listen 1935;
max_connections 1000;
vhost __defaultvhost__ {
}
第四步,启动srs。
./objs/srs -c conf/rtmp.conf
以上是基本配置,
安装成功后文件路径如下
下面是完整配置
listen 1935;
max_connections 1000;
daemon off;
#srs_log_tank console;
srs_log_tank file;
srs_log_file ./objs/srs.log;
http_api {
enabled on;
listen 8085;
crossdomain on;
}
vhost test.xx.com {
dvr {
enabled on;
#dvr_path ./objs/nginx/html/[app]/[stream].[timestamp].flv;
dvr_path ./objs/nginx/html/[stream]/[timestamp].flv;
dvr_plan session;
dvr_duration 30;
dvr_wait_keyframe on;
}
http_hooks {
enabled on;
on_connect http://127.0.0.1:8383/lss/liveitem/liveitemaction!streamstatus.do ;
on_close http://127.0.0.1:8383/lss/liveitem/liveitemaction!streamstatus.do ;
on_publish http://127.0.0.1:8383/lss/liveitem/liveitemaction!streamstatus.do ;
on_unpublish http://127.0.0.1:8383/lss/liveitem/liveitemaction!streamstatus.do ;
on_dvr http://127.0.0.1:8085/api/v1/dvrs;
#on_play http://127.0.0.1:8085/api/v1/sessions ;
#on_stop http://127.0.0.1:8085/api/v1/sessions ;
}
}
vhost后面要写对应的推流地址或者ip.
http_api 与vhost中的http_hooks为一组配置,当srs接收,停止到推流时会调用配置文件中所填地址,并且将各种参数包括streamid,appid传到后台中。
hvhost中的dvr功能是本地录制,dvr_plan有多种录制计划
session:按照session来关闭flv文件,即编码器停止推流时关闭flv,整个session录制为一个flv。
segment:按照时间分段录制,flv文件时长配置为dvr_duration和dvr_wait_keyframe。注意:若不按关键帧切flv(即dvr_wait_keyframe配置为off),所以会导致后面的flv启动时会花屏。
至此srs服务器的搭建结束。
手机直播平台的搭建;
1,采集,ios是比较简单的,android则要做些机型适配工作,pc最麻烦各种奇葩摄像头驱动,出了问题特别不好处理,建议放弃pc只支持手机主播,目前几个新进的直播平台都是这样的。
2,前处理,现在直播美颜已经是标配了,80%的主播没有美颜根本没法看。美颜算法需要用到gpu编程,需要懂图像处理算法的人,没有好的开源实现,要自己参考论文去研究。难点不在于美颜效果,而在于gpu占用和美颜效果之间找平衡。gpu虽然性能好,但是也是有功耗的,gpu占用太高会导致手机发烫,而手机发烫会导致摄像头采集掉帧,iphone6尤其明显,因为iphone6的cpu和前置摄像头很近。
3,编码,肯定要采用硬编码,软编码720p完全没希望,勉强能编码也会导致cpu过热烫到摄像头。硬编码兼容性又是一个大坑,android上要有人去填。编码要在分辨率,帧率,码率,gop等参数设计上找到好平衡点。
4,传输,自己做不现实,交给cdn服务商吧,也就是贵了点,相信有志于做直播平台改变世界的你不差钱。假设2w pcu大约每月带宽费用100万左右,因为清晰流畅的720p要1.5mbps左右。cdn只提供了带宽和服务器间传输,发送和接收端的网络连接抖动缓冲还是要自己写的。不想要卡顿,必然要加大缓冲,会导致延迟高,延迟高影响互动性,要做权衡。
要想用于推流还必须把音视频数据使用传输协议进行封装,变成流数据。常用的流传输协议有rtsp、rtmp、hls等,使用rtmp传输的延时通常在1–3秒,对于移动直播这种实时性要求非常高的场景,rtmp也成为移动直播中最常用的流传输协议。最后通过一定的qos算法将音视频流数据推送到网络断,通过cdn进行分发。在直播场景中,网络不稳定是非常常见的,这时就需要qos来保证网络不稳情况下的用户观看直播的体验,通常是通过主播端和播放端设置缓存,让码率均匀。另外,针对实时变化的网络状况,动态码率和帧率也是最常用的策略。
当然,在网络传输方面全部自己来做基本不现实,找提供推流服务的cdn服务商提供解决方案是最好的选择。据了解,阿里云是国内唯一能自研cdn缓存服务器的厂商,性能非常有保障。当然,大多数直播平台都会同时接入多个视频云服务提供商,这样可以做拉流线路互备,对推流后视频集群再进行优化也可提高直播的流畅性和稳定性。
免费直播编码推流软件
1) 支持h264编码方式,支持mp3或者aac编码。h.264是视频编码方式,而mp3
与aac是音频编码方式。
h264:又称avc(高级视频编码),是当前选的编码标准。
mp3:是音频编码标准,大家都熟悉,不多说。
aac:即高级音频编码,比mp3音质还好,是做直播的选,它有aac-lc与he-aac两个
档次,aac-lc是地复杂度的aac,兼容性好,he-aac是高效能aac,压缩度高,音质与
aac-lc相当。
2) 支持rtmp推流。
rtmp:是实时消息协议的简称,是由adobe公司开发,虽然没有变成国际标准,但它是实
际上的工业标准,无论哪个公司,只要做直播,就得用它,当今的手机直播app推流所用
的协议都是rtmp协议。
四款免费推流软件分别为:
1. adobe flash media encoder
2. open broadcaster software
3. 800li education podcast
4. iavcast
1)flash media live encoder 3.2
由著名的adobe公司出品,值得信赖,adobe好长时间已经停止更新了,时代比较久远了,但仍旧不失为一个好用的编码器软件。
2)open broadcaster software
开源并且免费的直播软件,是当前非常流行的直播软件,很多游戏直播就采用它,例如斗鱼直播。
3)800li education podcast
免费的抓桌面直播和录屏软件。不可多得的免费的直播编码软件。有画中画功能及画笔标注功能,对于目前在线教育直播不失为一个好的选择。 小巧、好用。免费但不开源。
4)iavcast(串流直播)
国内串流直播团队开发的免费直播软件,免费但不开源。
做直播除了需要直播编码推流软件之外,流媒体服务器系统必不可少。 笔者简单列一下可以使用的直播系统,选择开源的实时直播软件可以考虑red 5, 选择国外大品牌的可以考虑adobe media server, 选择有flash p2p功能的可以选择800li media server。
新加坡服务器一天多少钱?你关心的是网站建设价格,还是它的价值如何从SEO优化的角度去布局网站设计网站优化之关键词优化:为什么研究关键词如何评估公众号价值以及提升价值的4种方法石家庄网站建设要将seo优化融入其中微信小程序设计时需要了解的六个坑,你了解了吗?企业建设响应式网站的必要性