做移动视频直播应用的思路
学习自前辈@卢_俊 微博 http://weibo.com/lujunblog
# 思路步骤参考
- 调用 Camera API 实现取前置/后置摄像头的画面并提供预览和控制功能;
- 调用 MediaCodec API 对 Camera 预览的 YUV 图像进行硬编码,将编码后的文件存到本地(自己定义一些帧头格式,后面自己来解析,也可以考虑存为 MP4 或者其他格式);
- 读取上面录下来的文件,一帧一帧解析,调用 MediaCodec API 进行解码并显示出来;
以上是是视频录制和解码播放。 - 搭建一个简单的后端 Socket 服务器,自己定义一些通信协议;
- 在 Android 端实现 Socket 客户端,做到能把录下来的视频文件发送到服务器保存起来,也能从服务器请求指定的视频文件,接收并解码播放;
这一步,是最重要的一步,为了提供更流畅的视频直播效果,需要在服务器的实现、流媒体协议的设计与应用、CDN、云存储等等许多方面进行考虑和优化。到这一步你基本上实现了类似微信短视频功能,但不是实时。 - 做实时传输,不存文件,直接将编码后的视频数据传输到服务器,服务器将码流转发给参与直播的客户端。
# 名词解释
码流(Data Rate)是指视频文件在单位时间内使用的数据流量,也就码率,是视频编码中画面质量控制中最重要的部分。同样分辨率下,视频文件的码流越大,压缩比就越小,画面质量就越好。多码流技术是通过在编码过程中同时产生多种不同码流及分辨率的流媒体数据,根据用户实际网络带宽条件为之自动分配相对最佳解码画质的解决方案。
# 参考
Android MediaCodec小结
Android 用 MediaCodec 实现视频硬解码
MediaCodec - Android SDK | Android Developers
图文详解YUV420数据格式
Android Yuv图像转jpg方法