2016-08-03 11 views
0

Mediacodecを使用してビデオに10ビットマップをエンコードする必要があります。 FFmpegやJcodecは非常に遅いので使いたくないです。イメージをビデオにエンコードする(Mediacodec)

私はインターネットで検索しましたが、修正可能な完全に動作するサンプルコードが見つからないようです。ここで

は、私が試したものです:ところでちょうど見せかけZIPファイル形式である(

mMediaCodec = MediaCodec.createEncoderByType("video/avc"); 
mMediaFormat = MediaFormat.createVideoFormat("video/avc", 320, 240); 
mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000); 
mMediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15); 
mMediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,  MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar); 
mMediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5); 
mMediaCodec.configure(mMediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); 
mMediaCodec.start(); 
mInputBuffers = mMediaCodec.getInputBuffers(); 

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
image.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); // image is the bitmap 
    byte[] input = byteArrayOutputStream.toByteArray(); 

    int inputBufferIndex = mMediaCodec.dequeueInputBuffer(-1); 
    if (inputBufferIndex >= 0) { 
    ByteBuffer inputBuffer = mInputBuffers[inputBufferIndex]; 
    inputBuffer.clear(); 
    inputBuffer.put(input); 
    mMediaCodec.queueInputBuffer(inputBufferIndex, 0, input.length, 0, 0); 
    } 
+0

サンプルコードを使用して質問を編集し、直面している問題の詳細を追加する必要があります。 BTW:10枚は10フレームを意味し、15フレーム/秒のフレームレートを使用すると、0.67秒のビデオが得られます... – Robert

答えて

0

あなたのコード例では、YUV420画像バッファを期待エンコーダを作成しますが、あなたはそれをPNG圧縮データを供給しています、イメージ表現形式ではありません)。

各bitmap'zピクセルをARGBからYUVに変換し、そのバッファをエンコーダにフィードする必要があります。エンコーダの設定では、フレームの幅と高さに合わせる必要があります。

関連する問題