今天参加了vitamio开发者大会,收获颇多。这主要是介绍移动端(android和ios)多媒体开发的会议,以前自己也一直在做这方面的开发,但是没有做过系统的总结和归纳。会上已经有不少人在这方面创业做了一些产品。会议从早上9:00到下午5:00,中间安排了将近10人做介绍,时间安排上比较紧,听到后面都感觉快跟不上节奏了。
主要的介绍议题有下面这些:
主要介绍了从系统mediarecoder截获MP4数据,从中解析出音视频裸码流打包成flv发送到服务器,再由服务器转封装为mp4或者ts发送到移动客户端,pc客户端可用flash直接播放flv文件。其中flv文件不用切割成多个文件,直接用一个文件,支持流式传输和解析。
目前流媒体协议主要有mms、rtsp、rtmp和http flv、hls。
Mp4、mov、3gp格式相近。其中mdat 为音视频数据,moov为音视频信息描述、索引。Mp4由于索引区的关系,适合做点播,不适合做直播。Android mediarecord旧版是先写mdat,最后写moov,这样导致需要整个文件下载完才能播放。新版的android做了改进,文件开始空余出一部分做free,最后再把moov信息填充到free中。
在mp4中解析h264数据:先找mdat,再根据size字段和65、61等nal头来判断
解析音频数据:mp3和amr都是固定大小。Aac用ffmpeg 中的AACParser函数测试是否音频。音频帧一般间隔0x17ms。
用ffmpeg做解析(demux),将解析出的视频数据调用libstagefright硬解码。
主要的差异是(1)android版本不同需要引用不同头文件和链接库;(2)不同芯片硬解码出来的格式有差异(如YV12、NV12等),需要根据芯片类型做适配。
硬解码能兼容目前大部分手机。
介绍了vplayer的开发流程,用ffmpeg解析,硬件或软件解码,opengl显示。
比较炫的是全景播放器,拍摄视频帧包含了立体六面,播放时能用鼠标拖拽显示任意一个角度的画面。全景相关技术有:equirectangular, cubic
主要介绍了秒拍的开发,包含视频剪切、变换大小;添加音乐、动画、字幕。视频分辨率为480x480。这块我们开发的视频编辑引擎比秒拍功能要多。
比较吸引的是3个应用:
(1) 用ffmpeg demux内存数据
(2) 边下边播
从网络下载数据存为临时文件,用ffmpeg解码临时文件播放。临时文件会预先缓存一段,分割存为多个长度不等的文件。
(3) 无缝播放多个文件
用第(1)中方法播放内存数据
介绍了vplayer、oplayer。Oplayer为开源播放器(java部分)。后面继续调研oplayer对rtsp的兼容性,考虑用vitamio实现rtsp直播、点播播放器。
用ndk编译x86与arm类似,只需要修改APP_ABI := armeabi为APP_ABI := x86
Intel提供NativeMediaCodec,可以在解码后播放前做一些自定义处理,比较方便。
这部分受益匪浅,因为以前自己主要做技术开发,对推广方面知道的很少。这部分用手机录了音。
主要推广手段:制作rom、电子市场、搜索、官方网站、评测软文、微博
App图标要容易让人找,app在手机菜单中要排在前面(靠命名)
主要介绍了七牛云存储,支持云端直播、点播。终端主动往云服务器发送实时流或文件。这块对实现大规模直播和点播比较有用。但是还没有实现按需拉数据,没有用户看视频时,终端也一直在往服务器发送数据,浪费了很多带宽,只适合直播会议、活动等。对于类似家长看幼儿园这类应用还是不适用。
用opencv实现内容搜索,这块技术不是太懂。
比较有用的是根据直方图不同来判断场景变换,在显示视频缩略图比较有用。