H264解码器源码(Android 1.6 版)
来源:互联网 发布:怎么下载java 编辑:程序博客网 时间:2024/05/22 02:22
http://www.cnblogs.com/mcodec/articles/1780598.html
H264解码器源码,移植ffmpeg中的H264解码部分到Android,深度删减优化,在模拟器(320x480)中验证通过。
程序的采用jni架构。界面部分,文件读取,视频显示都是用java做的,底层的视频解码用C来做满足速度的要求。
在这个版本中,从H264码流中分割出Nal是在java层做的,这样在java层直接调用解码时就知道是否有显示视频,缺点的就是耦合度/封装性差一点。
如果采用在底层做Nal分割的方法,可以封装得好看一些,但是每次送的数据有限制,如果送的数据太多,底层可能会一次解码出好几帧视频,但是通知到界面层只能显示一帧,造成丢帧的现象。 如果每次送的数据较少,就会有很多次底层调用没有进行实质解码,很小气的做法,比如有一压缩数据帧需要600字节,如果一次送100个字节给解码器,那么要送6次才会进行实质解码,因为每个数据帧有大有小,所以只能取极小值才不会导致丢帧。
不过所有的编码解码都是各种因素平衡折中的结果,具体用什么方法具体分析。
如果程序崩溃退出,优先考虑:
2)byte [] NalBuf = new byte[40980]; 缓冲区是否溢出。
如果有B帧,那肯定不是baseline。
为便于支持不同分辨率的码流,修改了代码。现在只需要修改H264Android.java文件中第51,74,75行就可测试新分辨率。
有些大分辨率的码流可能会异常,优先修改H264Android.java文件中第161行把Nal缓冲区改大。
两版本都是用 android-ndk-1.6_r1-windows.zip 和 cygwin 1.7.5-1, gcc4 4.3.4-3 (用 cygcheck -c查看) 编译。
注意 /jni/H264Android.cpp文件添加了extern "C" 关键声明。
解码源码下载地址:http://files.cnblogs.com/mcodec/H264Android.7z
C++版本下载地址:http://files.cnblogs.com/mcodec/H264Android_CPP.7z
测试码流(240x320)下载地址:http://files.cnblogs.com/mcodec/butterfly.h264.rar
测试码流(352x288)下载地址:http://files.cnblogs.com/mcodec/352x288.264.7z
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版)
- H264解码器源码(Android 1.6 版和QT都可以调用)
- H264解码器源码(Android 1.6 版和QT都可以调用)
- H264解码器源码(vc6版)H264Decoder_vc6.rar
- Android使用MediaCodec解码H264视频解码器
- 第四周项目1:三角形类的构造函数:默认构造函数
- 警示预防摄像机(安防新一代财产安全保护神)
- android sdk manager 无法更新解决方法
- 【重学《C++Primer第四版》】第四章、数组和指针
- 10 篇精选Android技术文章
- H264解码器源码(Android 1.6 版)
- B - I Hate It HDU 1754 (线段树+区间)
- [IOS 开发] UIImage改变像素值
- 多态的特殊处理
- 你真的理解:“学而不思则罔”? 什么是学习吗?
- mysql in查询结果顺序
- 【BZOJ 1492】 [NOI2007]货币兑换Cash
- 如何禁止特定IP访问自己网站?
- JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件