mediacodec init:
mediaCodec = MediaCodec.createDecoderByType("video/avc");
mediaFormat = MediaFormat.createVideoFormat("video/avc", width, height);
mediaFormat.setInteger("color-format", 19);
mediaCodec.configure(mediaFormat, paramSurface, null, 0);
int i = mediaCodec.dequeueOutputBuffer(this.bufferInfo, 0L);
if (i >= 0)
{
int j = i;
mediaCodec.releaseOutputBuffer(j, true);
if ((this.bufferInfo.flags & 0x4) != 0)
Log.d(TAG, "BUFFER_FLAG_END_OF_STREAM");
return ;
}
else if (i == -3)
{
Log.d(TAG, "INFO_OUTPUT_BUFFERS_CHANGED");
outputBuffers = mediaCodec.getOutputBuffers();
}
else if (i == -2)
{
MediaFormat localMediaFormat = mediaCodec.getOutputFormat();
Log.d(TAG, "Output format has changed to " + localMediaFormat);
Log.d(TAG, "Output format width:" + localMediaFormat.getInteger("width"));
Log.d(TAG, "Output format height:" + localMediaFormat.getInteger("height"));
}
else if(i==-1){
Log.d(TAG, "dequeueOutputBuffer timeout pts is " + pts);
}
1 に答える
1
コメントで ZTE V987 を意味していると仮定すると、私が見つけた仕様では、PowerVR GPU で Android 4.1.2 を実行すると書かれていますが、ビデオ IP が誰からのものかは述べられていないため、決定的な答えが得られます. ただし、問題は、カラー形式を 19 (平面 YUV 420) にハードコーディングしていることであり、一部のデバイスはそれをサポートしていません。
たとえば、PVR GPU が TI ビデオ (Galaxy Nexus の場合のように) とペアになっている場合、COLOR_TI_FormatYUV420PackedSemiPlanar
(半平面形式) が必要になる可能性があります。logcat の出力に関連するメッセージが表示される場合があります。
encodeDecodeVideoFromBuffer()
CTS EncodeDecodeTestのメソッドを見ると、メソッドを使用selectColorFormat()
して色形式を選択する方法がわかります。この形式でデータを配信するように ffmpeg を構成できない場合は、独自の変換を行う必要があります。generateFrame()
レイアウトについては、メソッドを参照してください。
于 2013-11-22T15:45:27.290 に答える