일반적으로 안드로이드는 각 입력에 대해 nal 단위를 기대합니다. 일부 장치의 경우 h264의 미디어 형식에 csd-0/1을 설정하면 일관되게 작동하지 않습니다. 그러나 각 매개 변수 세트를 입력 버퍼로 공급하는 경우 미디어 코덱은 형식 변경으로이를 선택합니다.
int outputBufferIndex = NativeDecoder.DequeueOutputBuffer (info, 1000);
if (outputBufferIndex == (int)MediaCodec.InfoOutputFormatChanged) {
Console.WriteLine ("Format changed: {0}", NativeDecoder.OutputFormat);
} else if (outputBufferIndex >= 0) {
CodecOutputBufferAvailable (NativeDecoder, outputBufferIndex, info);
}
또한이 설정 넥서스와 다른 삼성 기기에 대한 필수입니다주의 :
formatDescription.SetInteger(MediaFormat.KeyWidth, SelectedPalette.Value.Width);
formatDescription.SetInteger(MediaFormat.KeyHeight, SelectedPalette.Value.Height);
formatDescription.SetInteger(MediaFormat.KeyMaxInputSize, SelectedPalette.Value.Width * SelectedPalette.Value.Height);
나는 이러한 해상도를 조회 할 수 있습니다 내 상황에서 운입니다. 그러나 SPS 및 PPS nal 단위에서 수동으로 해상도를 파싱 할 수 있습니다.
// 참고 여기서 Xamarin을 사용하고 있습니다. 그러나 전화와 사물은 거의 같습니다. 나는 iOS VideoToolbox Xamarin Wrapper에 버그가 있음을 확신합니다. 그렇습니다. 비디오 디코딩을 위해 Xamarin을 고려해 본 점을 명심하십시오. 모든 것을위한 그 위대한하지만 아무것도 조금 더 정의 또는 낮은 수준 thats.
MediaCodec은 NAL 단위로 작동합니다. 시작 접두사가 필요합니다. 참조 http://stackoverflow.com/questions/1685494/what-does-this-h264-nal-header-mean – fadden