WearSport
GPS打点数据爆表
打点采样优化
动画卡顿
PhoneSport
View绘制
WatchMusicPlayer
三方框架实现
第三方音乐适配
表盘控制
Unity3D
NGUI
NetworkView
快鸟
启动页优化
跳出率是指在只访问了入口页面(例如网站首页)就离开的访问量与所产生总访问量的百分比
启动页优化策略
引导页优化
MIUI项目组
Token刷新
流量查询
CDN加速
偷跑流量
加速效果不理想
秀吧
音视频上行预研
Android终端设备视频直播上行发布
方案1:视频采集 + RTMP
视频采集方法可二选一, Android版本的RTMP协议有多种开源实现,常用的有下面三种:
RED5:比较主流开源实现,网上有对应的开源project实现 android-recorder,这个版本的实现要求客户端与服务器端的RTMP版本兼容,否则客户端在连接成功后在开始创建流的时候,服务端把连接断开了,这个已在我们自己的服务器上验证,是匹配的;
国内开源project中采用的 android-rtmp-client,它是上面red5的精简版,编码上没有前者这么麻烦,存在的问题同上;
国外收费的rtmpclient,申请注册码或者进行破解,这个已有牛人提供了破解教程,并且提供下载,可以直接使用,这个有待验证。
方案2:视频采集 + ffmpeg + RTMP(待测)
FFMPEG在linux、windows平台上运行良好,能进行视频采集,编解码、播放以及流化能力,但在Android平台,使用最多的还它的播放、编解码能力。而视频采集一般使用已介绍的二种方式,目前要探究的课题是在Android平台,如何通过ffmpeg来发布视频。
FFMPEG是支持RTMP协议的,所以在linux/windows平台能通过以下方式来发布视频,实现直播。
目前Android上的ffmpeg移植也有很多参考材料,但甚少提及其发布功能,这部分需要深入阅读ffmpeg的源码,才能看到其流化接口,然后再发布。
视频采集
前后摄像头可以正常切换,目前是通过前置摄像头来采集数据
Camera + PreviewCallback(Interface)
所采集的视频数据一般在PreviewCallback 的实现函数中获取。
public void onPreviewFrame(byte[] data, Camera camera)
该data数据为YUV格式的原始视频帧数据,一般为YUV420SP,这里要完成 yuv->rgb->视频流的转化过程(这块儿的具体过程还并不非常清晰)
并且音视频数据是没有经过编码处理的,此处可以使用第三方编码库来处理,如果ffmpeg、或者x264、AAC编码后再发布
Camera + MediaRecorder
通过MediaRecorder获取的视频数据是已经编码过后的数据,在获取视频数据之前可以指定音视频编码格式,输出格式
支持 本地存储 + 远程输出
视频播放
由于目前的Android秀吧终端是能进行视频下行直播的,用的是ffmpeg,关于播放,此处不考虑
视频发布RTMP
方法1:开源red5
demo1视频采集使用mediarecorder, 目前按照 RTMP协议,以下流程能正常走通
1>Client→Server :发送一个与流媒体服务器建立连接的请求.
2>Server→Client : 服务器确认建立连接
3>Client→Server : 发送一个创建流的请求
4>Server→Client :服务器确认流请求,并返回一个表示流的索引号.
5>Client→Server :提交一个发布数据的请求
6>Server→Client :服务器确认数据发布请求
7>Client→Server :发送视音频数据包(这些包在同一个频道(channel)并用流的索引号来唯一标识).
问题:demo在完成视频录制以后,再将视频发到服务器,在上面的第7步中,视频发布以后,服务器的解包有问题,定位应该是RTMP视频打包有问题,目前想把这一整套流程走通。
后面再实时发包看看视频效果
方法2:开源red5精简版 android-rtmp-client
面临的问题同上
方法3:rtmpclient破解版
demo2视频采集使用 PreviewCallback, rtmp使用破解版的rtmpclient
1> RTMP
2> FFMPEG
Android机顶盒