Android视频编码--H264编码

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:在使用软编时,要编译各种架构需要的库,有时候怎么编都不行,真是十分令人头疼。

你可能感兴趣的:(h264)