Android视频编码--H264编码
2016-12-24 19:42
288 查看
Android视频编码–H264编码
Android中的H264编码有两种编码方式:硬编码
软编码
1.硬编码
Android中的H264硬编码主要是通过自身提供的API,调用底层的硬件模块实现编码,不使用CPU。采用硬编码的核心示例代码如下:
void encodeYuvFrame(byte[] yuvFrame) { ByteBuffer[] inBuffers; ByteBuffer[] outBuffers; int bufferIndex; inBuffers = mEncoder.getInputBuffers(); outBuffers = mEncoder.getOutputBuffers(); bufferIndex= mEncoder.dequeueInputBuffer(-1); if (bufferIndex>= 0) { ByteBuffer bb = inBuffers[bufferIndex]; bb.clear(); bb.put(yuvFrame, 0, yuvFrame.length); long pts = System.nanoTime() / 1000 - mPresentTimeUs; mEncoder.queueInputBuffer(bufferIndex, 0, yuvFrame.length, pts, 0); } for (; ; ) { int bufferIndex= mEncoder.dequeueOutputBuffer(vebi, 0); if (bufferIndex >= 0) { ByteBuffer bb = outBuffers[bufferIndex];//编码数据,可在此进行处理数据 mEncoder.releaseOutputBuffer(bufferIndex, false); } else { break; } } }
2.软编码
Android中的软编码主要是使用第三方的编码库,如x264,openh264等,然后通过jni调用完成编码。因为要使用CPU,所以在编码时可能会造成手机发热。之前在项目中,用过x264以及openh264进行软编。库使用这两个库进行编码,接收的视频数据格式是YUV420P,如果从摄像头采集到的数据不是这种格式的,需要进行一下数据格式的转换,可以借助libyuv来完成。通过使用这两个库发现,openh264的编码效率要比x264的库高,x264的编码质量要比openh264好。
PS:在使用软编时,要编译各种架构需要的库,有时候怎么编都不行,真是十分令人头疼。
相关文章推荐
- Android视频采集+H264编码
- 文章【Android 的视频编码 H263 MP4V H264】的代码实现
- Android 实时视频编码—H.264硬编码
- android实时录制视频h263编码通过rtp打包udp发送到服务器
- Android 实时视频采集/编码/传输/解码/播放—方案调研
- 庆祝一下,Android视频采集+H264编码成功
- 【Android 的视频编码 H263 MP4V H264】的代码实现
- 【流媒體】Android 实时视频采集/编码/传输/解码/播放—方案调研(初)
- 【流媒體】 Android 实时视频编码—H.264硬编码
- [流媒体]Android 实时视频采集/编码/传输/解码/播放—方案调研(初)
- Android视频采集+H264编码成功
- 庆祝一下,Android视频采集+H264编码成功
- Android视频采集+H264编码
- Android 实时视频采集/编码/传输/解码/播放 方案调研
- android 视频编码资料
- Android 的视频编码 H263 MP4V H264
- Android视频采集+H264编码
- 【流媒體】 Android 实时视频编码—H.264硬编码
- Android视频采集+H264编码成功
- [流媒体]Android 实时视频编码—H.264硬编码