关键词:ijkplayer / 播放器 / 视频技术
本次笔记主要梳理了几家主流视频播放器的调研和对视频技术的初步分析。
(1)ijkplayer - 支持 Android 和 iOS 平台; - API 易于集成; - 编译配置可裁剪,方便控制安装包大小; - 支持硬件加速解码; - 移除了 ffmpeg 视频内核中不常用的特性以减小体积; - 使用各种平台原生的渲染方式进行优化,修复一些在线视频播放的 BUG; - 开源;
(2)Vitamio - 支持 Android 和 iOS 平台; - 支持硬件解码与 GPU 渲染,API 接口简洁易用; - 目前,全球已经有超过一万种应用在使用 vitamio,覆盖用户超过 5 亿; - 可播放 720P 甚至 1080P 高清 MKV / FLV / MP4 / MOV / TS / RMVB等常见格式的视频 - 支持 MMS / RTSP / RTSP / HLS(m3u8) 等常见协议,包括点播与直播; - 高级功能收费;
(3)VLC - 全名是 Video Lan Client,是一个开源的、跨平台的视频播放器,支持大量的音视频传输、封装和编码格式 - 几乎支持所有的视频格式,也很注重版权方面的问题,程序结构的扩展性好; - 开源; - 项目庞大;
(4)优酷 - 优酷公司开放的播放器框架,支持 Android / iOS / Web 平台,用于播放优酷视频网站的视频; - 呵呵,比较封闭; - 接口不够丰富,不支持 1080P; - 不开源;
对我个人而言,更喜欢 ijkplayer,有以下几个原因:1. 它开源,便于掌握关键机制和定制功能;2. 项目代码比较精简,相对于 VLC 来说,研究难度小一些;3. 功能强大,主流视频格式和协议都支持;
ffmpeg 编译之后主要是用于生成 libijksdl.so,ibijkffmpeg.so 两个分别主宰不同的方向:libijksdl.so 用于绘图显示(视频播放线程等和键鼠操控);libijkffmpeg.so用于数据解码等处理;
整体解码内核使用了 3 个第三方库: 1. ffmpeg 生成 libijkffmpeg.so 2. sdl 生成 libijksdl.so 3. libyuv 被静态链接进 sdl 中
作者的播放器库: libijkplayer.so 基于 ffplay,增加了不少东西,是 player 级别的关键代码 作者自主功能主要在 libijkplayer.so 这块
http://dranger.com/ffmpeg/ 这应该是目前网络上大多数教程的参考源。
http://blog.csdn.net/leixiaohua1020/article/details/15811977 这是一个总结性的文章,作者对 FFmpeg 的底层做了很多的研究,Android 端太少,但是源码分析的很不错,唯一可惜的是作者没有敢去分析 ffplay 的源码,要不我们的工作量或者我们对播放的原理理解就会进入一个新的高度
http://dande618.github.io/blog/2013/10/29/FFMepg/ 这个博客的代码对音频进行了较好的处理(虽然不大懂,但确实可以工作)
http://www.cnblogs.com/tanlon/p/3966130.html 这个博客的作者对很多音视频相关的内容进行了多个平台的实践,值得参考
https://github.com/dxjia/ffmpeg-jni-sample 这位作者使用 FFmpeg 将本地视频转成 gif 图片播放,源码由于环境的缘故还没有测试,但好歹是一个突破。
http://blog.csdn.net/jwzhangjie/article/details/9111547 本地视频播放器开发–SDL 编译编译中编译出 sdl 的支持库,只可惜是本地的
End.
Note by HF.
新闻热点
疑难解答