010-64928252 400-6446-365

视频直播平台网站搭建思路

2019-04-10

快速搭建直播服务大体架构

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缓存服务器的厂商,性能非常有保障。当然,大多数直播平台都会同时接入多个视频云服务提供商,这样可以做拉流线路互备,对推流后视频集群再进行优化也可提高直播的流畅性和稳定性。


免费直播编码推流软件

现代生活已经离不开互联网,离不开软件了。 这说法毫不夸张。 比如手机上各种APP眼花缭乱 ,各种行业, 各种功能, 各种Logo, 各种的各种。 没有良好的整理力,是真的不好意思让别人看到啊。 这些功能各异的APP程序大多数是免费APP。今天我们来谈谈关于直播编码和推流的免费软件。推荐四款笔者用过的直播编码推流软件,这些免费软件各有功能侧重点。不过最终这四款能脱颖而出,主要是满足了以下两个基本功能:

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。



TAG标签耗时:0.012042045593262 秒
010-64928252/400-6446-365 我现在就想找顾问聊聊
让决策变的简单
好的开始是成功的一半
您需要一位互联网
顾问提供专业咨询
AI人工智能 · VR · AR · 智慧博物馆 · 智慧公园 · 景区 · 文创 · 动画
高端网站建设 · 小程序 · APP · 微信 · H5 · 游戏 · 电商 · 年度运营