技术层面:
技术相对都比较成熟,设备也都支持硬编码。IOS还提供现成的 Video ToolBox框架,可以对摄像头和流媒体数据结构进行处理,但Video ToolBox框架只兼容8.0以上版本,8.0以下就需要用x264的库软编了。Andriod 可以考虑用 ffmpeg 软编。
github上有现成的开源实现,推流、美颜、水印、弹幕、点赞动画、滤镜、播放都有,技术其实不是很难,而且现在很多云厂商都提供SDK,招几个懂行经验丰富的就可以,并不必须是流媒体人才。
链接:
如何搭建一个完整的视频直播系统? - 网络主播映客、Periscope、花椒等直播APP点赞动画:
GitHub - singer1026/DMHeartFlyAnimation: 直播点赞动画Android开源弹幕:
GitHub - Bilibili/DanmakuFlameMaster: Android开源弹幕引擎·烈焰弹幕使 ~ JNI source:Bilibili/NativeBitmapFactoryIOS开源弹幕:
GitHub - panghaijiao/HJDanmakuDemo: A high performance danmaku engine for iOS金山云移动端开源SDK:
https:// github.com/ksvc七牛云移动端推流开源SDK:
GitHub - pili-engineering/PLCameraStreamingKit: Pili RTMP Streaming SDK for iOS, H.264 and AAC hardware encoding supported. Camera and Microphone as input source.基于Android手机推流:
GitHub - begeekmyfriend/yasea: RTMP streaming client in pure Java for Android for those who hate JNI.基于IOS的图像处理:
GitHub - BradLarson/GPUImage: An open source iOS framework for GPU-based image and video processing完整的基于IOS手机直播:
GitHub - songsmith/LiveVideoCoreSDKIOS-推流端的 RTMP库:
GitHub - songsmith/ios-librtmp: For PushSDKOBS-PC端主播推流工具,斗鱼等游戏直播都在用
GitHub - jp9000/obs-studio: OBSRTMP直播可以用nginx-rtmp
GitHub - arut/nginx-rtmp-module: NGINX-based Media Streaming Server开源播放器也很多,ffplay、jwplayer、ijkplayer等等,我就不一一给你发了,哈哈
https:// github.com/Bilibili/ijk player其实最难的难点是提高首播时间、服务质量即Qos,如何在丢包率20%的情况下还能保障稳定、流畅的直播体验,需要考虑以下方案:
1. 为加快首播时间,收流服务器主动推送 GOP 至边缘节点,边缘节点缓存 GOP,播放端则可以快速加载,减少回源延迟
2. gop丢帧,为解决延时,为什么会有延时,网络抖动、网络拥塞导致的数据发送不出去,丢完之后所有的时间戳都要修改,切记,要不客户端就会卡一个 gop的时间,是由于 dts 和 pts 的原因,或者播放器修正 dts 和 pts 也行(推流端丢gop更复杂,丢 p 帧之前的 p 帧会花屏)
3. 纯音频丢帧,要解决音视频不同步的问题,要让视频的 delta增量到你丢掉音频的delta之后,再发音频,要不就会音视频不同步
4. 源站主备切换和断线重连
5. 根据TCP拥塞窗口做智能调度,当拥塞窗口过小说明丢包率过高,需要切换节点和故障排查
6. 增加上行、下行带宽探测接口,当带宽不满足时降低视频质量,即降低码率
7. 定时获取最优的推流、拉流链路IP,尽可能保证提供最好的服务
8. 监控必须要,监控各个节点的Qos状态,来做整个平台的资源配置优化和调度
9. 如果你家产品从推流端、CDN、播放器都是自家的,保障 Qos 优势非常大
10. 当直播量非常大时,要加入集群管理和调度,保障 Qos
11. 播放端通过增加延时来减少网络抖动,通过快播来减少延时
12. 引入TCP/IP 优化,针对直播业务做下行TCP/IP优化,在某一个节点丢包率50%情况下,800kb码率可流畅播放
2016-05-27 补充:
我先后调研了七牛云、金山云、乐视云、腾讯云、百度云、斗鱼直播伴侣 推流端,功能几乎都是一样的,没啥亮点,不同的是整个直播平台服务差异和接入的简易性。后端现在 RTMP/HTTP-FLV 清一色,APP挂个源站直接接入云厂商或CDN就OK。直播要做好真心不易,楼主也做的不是很好,只是在不断的摸索、改进和优化,关于如何选择接入的云厂商或CDN,哪个稳定选哪个!
带宽成本:
粗略计算,斗鱼 TV 的在线人数超过 1000 万 +,战旗 TV 在在线人数约 500 万 +,龙珠在线人数约 400 万 +,虎牙在线人数约 100 万 +(统计于 2016 年 2 月 18 日,以各大节目在线人数人工相加得出,并未统计全部节目)。
直播平台的带宽成本费用通常取带宽峰值月结,当月 100 万最高同时在线人数,对应消耗带宽 1.5T,月结费用 3000 万人民币,20块钱1M的样子,根据直播方需求不同,价格也不一样,质量越好的就越贵。
PS:此计算方式来源于网络
可以算出各家在带宽方面每年需要付出的成本,斗鱼 TV 为 3 亿人民币,战旗 TV 为 1.5 亿人民币,龙珠为 1.2 亿人民币,虎牙为 3000 万 + 人民币。
运营层面:
正是因为现在做这个的太多了,所以你要运营和推广,这个就比较烧钱了,反正我现在知道的一些做移动直播、游戏直播、秀场直播的A轮至少得上千万。
用户体验:
离不开CDN和云厂商,他们会帮你解决大部分的技术问题,不流畅、卡顿、花屏、带宽不够、攻击、用户体验不好等一系列问题,还给你提供免费技术支持,上面提到的那些技术方案就是云厂商和CDN来帮你解决的。