参考了网上各个直播平台所使用的云直播技术,当然这里也有知乎上对这方面的阐述------>[七牛,百度,保利威视,腾讯,阿里这几家哪家的直播云技术比较靠谱?](https://www.zhihu.com/question/48248433?sort=created),所以暂且就以腾讯云直播技术为主,本文章是以[腾讯云产品 - 腾讯视频云之直播LVB](http://www.jikexueyuan.com/course/3138_1.html?ss=2)和[腾讯云产品 - 腾讯视频云之互动直播](http://www.jikexueyuan.com/course/3139.html)为主导。当然也可以参考官方文档[直播](https://cloud.tencent.com/document/product/267)、[点播](https://cloud.tencent.com/document/product/266)、[移动直播](https://cloud.tencent.com/document/product/454)、[互动直播](https://cloud.tencent.com/document/product/268)
直播依赖的是推流的地址,看直播依赖的是播放的地址。、
### 课程概要(官方的Android [推流sdk文档介绍](https://cloud.tencent.com/document/product/267/4735))
* 推流播放sdk是什么?
* 集成前的效果体验
* 如何获取URL地址
* 嵌入自己的APP中
* 对接推流服务
* 对接直播服务
* 体验流程的补全
### 推流播放sdk是什么?
- 如下过程
![](https://box.kancloud.cn/899f876cea45afa50d246ea2ade50467_706x138.jpg)
- 上面的过程中sdk扮演的内容是什么?如下图
![](https://box.kancloud.cn/2a026b406330bb411bd601443ca91464_880x406.jpg)
### 集成前的效果体验
- 推流
如果你是主播,推流的作用如下图所示
![](https://box.kancloud.cn/9b7cf39468e6368a60fd85bb84535c30_747x433.jpg)
- 播放
观看直播
![](https://box.kancloud.cn/b8fb74fc5d4e0a30a5bbecd5145ad7af_732x454.jpg)
现在在腾讯云平台,选择直播服务,创建一个[频道](https://console.cloud.tencent.com/live/livedetail/10905947996193350804),可以参考[官方的帮助文档](https://cloud.tencent.com/document/product/267)。
- 直播源设置
![](https://box.kancloud.cn/2ec0b0642a3da7e8a9fe8b8e8b781e0d_1639x86.jpg)
上图中推流地址,以rtmp协议开头,在目前的视频直播领域,最流行的推流协议解决方案还是rtmp,图中的推流地址就是
rtmp://15550.livepush.myqcloud.com/live/15550_7d5fc0e5c64411e792905cb9018cf0d4?bizid=15550
- 接收方的设置
- HLS:苹果主推,延迟会比较高,追求实时场景的话,不推荐
- 如:http://15550.liveplay.myqcloud.com/live/15550_7d5fc0e5c64411e792905cb9018cf0d4.m3u8
- RTMP
- 如:rtmp://15550.liveplay.myqcloud.com/live/15550_7d5fc0e5c64411e792905cb9018cf0d4
- FLV
- 如:http://15550.liveplay.myqcloud.com/live/15550_7d5fc0e5c64411e792905cb9018cf0d4.flv
- RTMP和FLV并没有特别大的差异,实时性上延迟都会缩小到2-3秒以内,但是目前还是推荐FLV作为APP端的直播地址,RTMP由于它本身协议的性质,在某些方面表现的不是很理想
- 如下图所示
- ![](https://box.kancloud.cn/37fe586a452708471e87f4adccf837d5_860x241.jpg)
- 地址中带有**livepush**字段是一个推流地址,带有**liveplay**的是一个播放地址。
### 嵌入自己的APP中
- SDK压缩包中的内容
- ![](https://box.kancloud.cn/5912083f58a7d08756c944d3112ebdda_770x252.jpg)
### 对接推流服务
- 原理
- 查看大图,可以参考这里
![](http://qzonestyle.gtimg.cn/qzone/vas/opensns/res/img/tencent_cloud_rtmp_sdk_pusher_status_14.jpg)
- 代码
- 腾讯视频云RTMP SDK的使用特别简单,您只需要在您的App里添加如下几行代码就可以完成对接工作了。目前SDK内部的默认参数设置参考直播场景精心校调过的。
- step 1: 添加界面元素
为了能够展示推流预览的界面,您需要在您的布局xml文件里加入如下一段代码:
~~~
<com.tencent.rtmp.ui.TXCloudVideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:visibility="gone"/>
~~~
- step 2: 创建Pusher对象
先创建一个Pusher对象,它是所有SDK调用接口的承载者。
~~~
TXLivePusher mLivePusher = new TXLivePusher(getActivity());
~~~
- step 3: 启动推流
用下面这段代码就可以完成推流了:
~~~
String rtmpUrl = "rtmp://2157.livepush.myqcloud.com/live/xxxxxx";
mLivePusher.startPusher(rtmpUrl);
TXCloudVideoView mCaptureView = (TXCloudVideoView) view.findViewById(R.id.video_view);
mLivePusher.startCameraPreview(mCaptureView);
~~~
其中 startPusher 使用来告诉SDK视频流要推到哪个服务器地址去,而 startCameraPreview 则是将界面元素和Pusher对象关联起来,从而能够将手机摄像头采集到的画面渲染到屏幕上。
>[info] 【**小细节**】
> 传进来的self.view将会作为画面渲染view的父view,建议此父view专门作为渲染使用,如果您想要在摄像头画面之上加弹幕、献花之类的UI控件,请另行创建一个与self.view平级的view,并将该view叠加在self.view之上。