您的位置:首页 > 移动开发 > Android开发

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 视频