本文是对知乎的问答进行感兴趣知识提取,内容太多,以下是不完全提取,阅读原文 传送门
直播Android主播端解决方案
他推流用的是 JavaCV 库 ,JavaCV 是一款开源的视觉处理库,基于GPLv2协议,对各种常用计算机视觉库封装后的一组jar包,其中就有ffmpeg,可以直接拿来作为推流用。
小白龙
Jackie L
视频采集:直播视频采集是比较难解决的技术,主流的是IOS和安卓,IOS比较好适配些,是人都知道,国外有款免费的Live:Air Solo 的APP,建议直接拿来使用好些,安卓是非常麻烦的平台,由于安卓本身碎片化的原因,最让程序员头疼的就是解决安卓适配的问题,如果要做安卓端的,建议要好好下功夫;其次是PC端,PC端可以分为网页上发起直播和客户端 上发起直播,网页上发起直播比较方便些,开发的技术也不难,但是其稳定性不好,不是很建议使用。客户端的话开发难度就相对更大些, 国内很多厂商的客户端都是基于一款叫做OBS(OpenBroadcaster Software)的直播客户端来做的,建议直接拿来使用,这样可以控制成本。
何李石
- 采集
采集是播放环节中的第一环,iOS 系统因为软硬件种类不多,硬件适配性较好,所以比较简单。Android 则不同,市面上硬件机型非常多,难以做到一个库适配所有硬件。PC 端的采集也跟各种摄像头驱动有关,推荐使用目前市面上最好用的 PC 端开源免费软件 OBS: https://obsproject.com/
参考教程:斗鱼游戏直播教程-OBS直播软件篇推荐
v3_CN_Home- 解码和渲染
解码和渲染,也即音视频的播放,目前 iOS 端的播放兼容性较好,在延迟可接受的情况下使用 HLS 协议是最好的选择。Android 的硬件解码和编码一样也存在兼容性问题,目前比较好的开源播放器是基于 ffplay 的 ijkplayer:https://link.zhihu.com/?target=https%3A//github.com/Bilibili/ijkplayer
目前,我们七牛在客户端采集、编码解码以及推流拉流加速方面做了很多工作,以上干货也是基于这个过程中踩过的坑整理出来的:https://link.zhihu.com/?target=https%3A//github.com/pili-engineering
黄家浩 –专注云计算,专注视频技术
现在很多的直播toc平台类似映客、花椒、六间房、他们都有主播,伴随这主播的肯定有美颜和特技的一些功能,tob类平台也比较多,展视互动,保利威视,微赞,微吼,腾讯要是自己搭建一套直播系统的话,我建议考虑以下几个因素
1.采集
采集是播放环节中的第一环,iOS 系统比较简单,软硬件适配性较好。Android系统市面上的开源系统非常多,所以很难可以找一个库可以匹配所有的系统。PC 端的采集也跟各种摄像头驱动有关,推荐使用目前市面上最好用的 PC 端开源免费软件 OBS。
2.编码
编码主要难点有两个:1. 处理硬件兼容性问题。2. 在高 fps、低 bitrate 和音质画质之间找到平衡,fps一般建议选择15fps,600K码率。iOS 端硬件兼容性较好。而 Android 的的支持系统比较多,推荐使用软编。
3.推流和传输(CDN)
传输涉及到很多端:从主播端到服务端,从推流服务端到边缘节点,以及再从边缘节点到观众端。推流端和分发端理论上需要支持的并发用户数应该都是千万级的,不过毕竟产生内容的推流端在少数,和消费内容端播放端不是一个量级,但是他们对推流稳定性和速度的要求比播放端高很多,这涉及到所有播放端能否看到直播,以及直播端质量如何。感觉现在的独家CDN太不靠谱,要多家冗余,互相弥补才行。
4.转码
为了让主播推上来的流适配各个平台端各种不同协议,需要在服务端做一些流处理工作,比如转码成不同格式支持不同协议如 RTMP、HLS 和 FLV,一路转多路流来适配各种不同的网络状况和不同分辨率的终端设备。
5.解码(播放)
解码,也即音视频的播放,目前 iOS 端的播放兼容性较好,在延迟可接受的情况下使用 HLS 协议。Android 的硬件解码和编码一样也存在兼容性问题,目前比较好的开源播放器是基于 ffplay 的 ijkplayer,同样也是使用HLS协议。PC端目前国内最好的还是flash,播放的是FLV,h5的直播播放器还在研究当中吧。
直播涉及到音视频,从推流到拉流,需要解决各种兼容性问题,如果技术没有强大的技术团队的话,对于这块硬骨头确实是比较难啃,建议您可以看看现在目前比较好的直播平台,各家也可以对比一下,以稳定,流畅,延时的几个角度出发。
编辑于 2017-08-21