Android 中H.264/AVC codec的开发

        Android有MediaRecorder接口,通过这个接口可以录制视频文件。Android内部也有各种音视频codec,但是并没有开放Java接口。所以当你想每次从Camera直接抓取一个画面,然后压缩成H264/MPEG4/H263 等视频包时,就有困难了。这种需求在视频聊天/视频共享里会有。本人仔细研究某开源代码,对其进行合理配置达到优化的目的,做了一套H.264/AVC的编解码器,编解码器使用C/C++开发,通过Android NDK编译产生动态连接库。基于这个库,我还做了一个在android里运行的应用来演示这个H.264/AVC编解码器。

       这里就介绍一下这个应用。它包含HelloGalleryActivity、AvcRecActivity、AvcFileListActivity、AvcViewActivity、LoopAvccodecActivity这些Activity。HelloGalleryActivity是一个入口,先对这个应用做个简单的说明,然后排出三个按钮。第一个是录制,点击它会启动AvcRecActivity,在这里面可以录制一个个画面,并且把它压缩成一个个H264/AVC数据包,并且存入后缀名为avc的文件里。第二个是播放,点击它会启动AvcFileListActivity,把/sdcard/avccodecDemo目录里所有avc文件列出来,点击某个文件将启动AvcViewActivity把该文件播放出来。第三个是自环,点击它会启动LoopAvccodecActivity,它录制和播放同时进行,每录制压缩一个帧,又解出来显示出来,这样可以评估同时录放的性能。

        核心类介绍一下。AVC压缩器在YzrAvcEnc.java,AVC解压缩器在YzrAvcDec.java , 他们两通过JNI调用C++层的AVC压缩器达到快速压缩解压的功能 。 Yuv2Rgb 负责把YUV数据转成RGB数据,只有RGB数据才好显示,这一功能也是费时的,所以也是通过C/C++代码和Java代码结合来达成,Java接口是Yuv2Rgb.java。录制和播放在独立线程里完成,AvcThread 创建线程以及实现线程函数,解压出来的数据通过Handler事件MSG_UPDATE_YUVVIEW通知 GraphicsView显示。GraphicsView的update接口被MSG_UPDATE_YUVVIEW的处理程序调用时更新需显示的最新数据(形参:updateArgb,实参:AvcThread.argbArray),draw函数负责显示出来。

操纵camera的类VideoCameraView可以参考上一篇博文:《Android Camera 使用一例,视频聊天app》。 

        代码和APK在sourceforge: http://nchc.dl.sourceforge.net/project/avccodecdemo/avccodecDemo-src-apk.zip

        编解码器的原生动态连接库是一个演示版,编码和解码出来的数据包含水印。

       到2015/11/19的下载统计:

       


 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值