手机流媒体开发的总结

发布时间:20090410  作者:MaxBlog   转载出处:MaxBlog的BLOG 推荐人:念雪
 

 

  前一阶段的手机在线流媒体项目终于告一段落,以下在开发方面做些总结和沉淀:

  1、手机上开发在线流媒体播放,存在不少限制,包括:

  1)手机网速有限,GPRS一般是5K/s左右;EDGE一般是10K/S左右;

  2)手机的CPU频率普遍不高,导致解码效率很低;

  3)手机的平台众多(Symbian/PPC/Java/MTK);

  2、由于手机网速有限,因此,针对不同的网速,应该制作不同的版本,以便让用户根据自己的手机和网络环境选择合适的版本观看;当然,不同的码流视频,分辨率也应该不同,比如176*144, 176*208, Q屏等;

  3、一般基于开源ffmpeg库进行手机平台的移植,可以有效提高开发进度;

  4、由于手机网速低的限制,因此,需要尽可能的降低视频的码流。但同时,我们又希望获取清晰和流畅的视频播放效果,这其实是一个矛盾体。目前来看,采用H264编解码是一个不错的结果,因为H264的压缩率远高于H263,而且也是专为手机上应用的编解码算法;

  5、由于手机CPU频率不高的原因,且手机在下载视频数据的同时,还要实时进行解码和视频画面放大缩小,因此低端的手机基本上很难获得良好的播放体验。所以建议只在比较高端的手机平台上开发,比如Symbian/PPC(windows mobie),Java平台估计得忽略了;

  6、虽然是在线视频播放,但也应该包含本地播放器应有的功能,包括全屏、非全屏、静音、快进快退、声音调节、暂停、重放等功能;

  7、播放的视频源的分辨率本身是固定的,比如176*208,在不同分辨率的手机上播放,则可能需要进行相应的放大或缩小,一般采用线性插值或二次线性插值算法进行放大或缩小,需要注意这些放大或缩小算法的运算所占的资源,如果过高,需要调整算法,或采用轻量级的算法,保证画面的清晰与流畅播放;

  8、非常重要的一个问题:采用多线程或异步的方式,保证流媒体数据传输的连续性。具体说明如下:

  客户端 <----> 网关 <----> 流媒体服务器

  请求 ------------------------->

  响应 <-------------------------

  如上所示,每次客户端向流媒体服务器发送获取视频数据,到接收到视频数据,是有一个时间周期的,设为T1。在T1时间内,客户端除了在播放视频外,没有其它处理,网络也可能是空闲的。因此需要充分利用这个T1时间,在T1时间内的一个合理时间点,发送下一个请求,这样就可以尽可能保证服务器返回的视频数据是连续的,从而充分利用了整个网络带宽进行传输数据;

  客户端 <----> 网关 <----> 流媒体服务器

  请求1 ------------------------->

  请求2 ---------------------->

  响应1 <-------------------------

  响应2 <----------------------

  9、如果是采用ffmpeg作为核心的容器解析和解码引擎,可以考虑针对手机的特殊性在ffmpeg方面进行内核优化,比如从编码方面进行适当调整,可以提高解码效率,从而提高手机端解码效率,提高播放流畅性(可以达到20%以上的效果,具体细节以后再描述);

  10、还需要特别注意音视频同步的问题,在线播放视频与本地播放有很多不同的地方,需要考虑在各种异常情况下,如何保证音视频都能同步,适当的进行部分帧数据的丢弃是必须的;

  11、基本上所有做手机上的网络应用,都绕不开移动的cmwap网关。cmwap网关对外只开发标准的http接口,因此,所有的手机联网应用,都需要考虑如何基于http进行协议的设计,或者考虑如何基于http代理的方式进行穿透cmwap网关;

  12、为了更好的在全国范围内穿透cmwap网关,每次传输的数据包大小建议在300K左右,如果过大,某些省份的cmwap网关可能会拦截;(其实手机上的下载工具在进行分段下载时也同样需要考虑这个问题)

  13、一般的电视直播,都是需要使用专门的采集卡,接入模拟或数字信号,利用directShow的框架进行声音、视频数据采集和同步,再进行编码、合并到容器和传输(比如mp4/mtk/wmv);

  14、基于网页的采集,可以查看我之前的一篇文章,利用显卡数据的镜像驱动,可以在指定区域内对视频数据进行抓取,同时通过声卡捕获声音,再对音视频进行同步、合并到容器(比如mp4/mtk/wmv);

  如果都能考虑到并解决好以上提到的这些问题,这个手机流媒体产品就具备了成功的条件。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值