2017-11-27 2 views
1

1 비디오 및 2 오디오 스트림이있는 mp4 파일이 있습니다. Media Foundation을 사용하여 오디오 스트림을 디코딩하려고합니다 (그 중 하나를 선택한 후). 다음은 코드입니다 (MediaFoundation SDK 샘플의 MFAudio 예제에서 가져 왔습니다).Media Foundation 다중 오디오 스트림 파일 디코딩 오류

오류 검사는 간단히하기 위해 생략되었습니다.

// Set up the source reader for the file. 
MFCreateSourceResolver(&pSourceResolver); 

pSourceResolver->CreateObjectFromURL(
    L"C:\\Users\\vahagng\\Desktop\\a.mp4",  // URL of the source. 
    MF_RESOLUTION_MEDIASOURCE, // Create a source object. 
    NULL,      // Optional property store. 
    &ObjectType,    // Receives the created object type. 
    &uSource     // Receives a pointer to the media source. 
    ); 

uSource->QueryInterface(IID_PPV_ARGS(&mediaFileSource)); 

MFCreateSourceReaderFromMediaSource(mediaFileSource, NULL, &pSourceReader); 

// Deselect all streams, we only want the first 
pSourceReader->SetStreamSelection(MF_SOURCE_READER_ALL_STREAMS, false); 
pSourceReader->SetStreamSelection(MF_SOURCE_READER_FIRST_AUDIO_STREAM, true); 

MFCreateMediaType(&pAudioOutType); 
pAudioOutType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio); 
CHECK_HR(pAudioOutType->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_Float); 

pSourceReader->SetCurrentMediaType(MF_SOURCE_READER_FIRST_AUDIO_STREAM, NULL, pAudioOutType); 

위의 코드는 2 개 오디오 스트림을 가지고 있지만 1 개 오디오 스트림 파일에 대해 잘 작동 미디어 파일에 대한 오류 코드 0xc00d36b4 : The data specified for the media type is invalid, inconsistent, or not supported by this object.와 마지막 줄 (pSourceReader-> SetCurrentMediaType())에 실패합니다.

테스트중인 파일에는 MediaFoundation에서 확실히 지원되는 2 개의 AAC 오디오 스트림이 있습니다.

MediaFoundation은 여러 오디오 스트림의 파일을 디코딩 할 수 있습니까?

+0

어떤 오류가 반환됩니까? –

+0

0xc00d36b4 : 미디어 유형에 지정된 데이터가 유효하지 않거나 일관성이 없거나이 개체에서 지원되지 않습니다. – mbaros

+0

MF에서 디코딩 할 수없는 오디오 트랙을 선택 했으므로 오류 코드 (예상대로)가 발생할 수 있습니다. 전체적으로이 동작이 잘못되지 않았거나 잘못된 세부 사항을 게시해야하는 이유 (선택한 오디오 파일 샘플). –

답변

1

Microsoft AAC 오디오 디코더 MFT는이 AAC 트랙/인코딩의 맛을 지원하지 않습니다. 당신은 SetCurrentMediaType 를 통해 디코더에게 당신이 방법을 적용 할 수없는

  • :
    MF_MT_MAJOR_TYPE, vValue {73647561-0000-0010-8000-00AA00389B71} (Type VT_CLSID, MFMediaType_Audio, FourCC auds) 
    MF_MT_SUBTYPE, vValue {00001610-0000-0010-8000-00AA00389B71} (Type VT_CLSID, MFAudioFormat_AAC, FourCC 0x00001610) 
    MF_MT_AM_FORMAT_TYPE, vValue {05589F81-C356-11CE-BF01-00AA0055595A} (Type VT_CLSID, FORMAT_WaveFormatEx) 
    MF_MT_ALL_SAMPLES_INDEPENDENT, vValue 1 (Type VT_UI4) 
    MF_MT_FIXED_SIZE_SAMPLES, vValue 1 (Type VT_UI4) 
    MF_MT_SAMPLE_SIZE, vValue 1 (Type VT_UI4) 
    MF_MT_AVG_BITRATE, vValue 111360 (Type VT_UI4) 
    MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION, vValue 254 (Type VT_UI4) 
    MF_MT_AAC_PAYLOAD_TYPE, vValue 0 (Type VT_UI4) 
    MF_MT_AUDIO_AVG_BYTES_PER_SECOND, vValue 13920 (Type VT_UI4) 
    MF_MT_AUDIO_BITS_PER_SAMPLE, vValue 16 (Type VT_UI4) 
    MF_MT_AUDIO_BLOCK_ALIGNMENT, vValue 1 (Type VT_UI4) 
    MF_MT_AUDIO_NUM_CHANNELS, vValue 2 (Type VT_UI4) 
    MF_MT_AUDIO_PREFER_WAVEFORMATEX, vValue 1 (Type VT_UI4) 
    MF_MT_AUDIO_SAMPLES_PER_SECOND, vValue 48000 (Type VT_UI4) 
    MF_MT_MPEG4_CURRENT_SAMPLE_ENTRY, vValue 0 (Type VT_UI4) 
    MF_MT_MPEG4_SAMPLE_DESCRIPTION, vValue 00 00 00 5B 73 74 73 64 00 00 00 00 00 00 00 01 00 00 00 4B 6D 70 34 61 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 02 00 10 00 00 00 00 BB 80 00 00 00 00 00 27 65 73 64 73 00 00 00 00 03 19 00 00 00 04 11 67 15 00 01 82 00 01 DF 60 00 01 B3 00 05 02 09 90 06 01 02 (Type VT_VECTOR | VT_UI1) 
    MF_MT_USER_DATA, vValue 00 00 FE 00 00 00 00 00 00 00 00 00 09 90 (Type VT_VECTOR | VT_UI1) 
    

    디코더가 용지 종류를 처리 할 수없는 것처럼

    , 스트림은 결과, 미디어 Foudnation에 대한 복호하지 않습니다
  • TopoEdit가 파일을 렌더링 할 수 없습니다.
  • 각 멀티플렉서, 디코더를 사용할 수있는 경우 Windows Media Player에서 DirectShow로 폴백 할 수 있습니다.
  • 영화 및 TV 플레이어는 비디오 만 재생하며 잠잠히 있습니다.

오디오 페이로드는 대부분 괜찮지 만 트랙 설명자가 일부 부분에서 정확하지 않을 수 있으며 디코더가 문제를 일으키지 만 치명적이지는 않지만 - 파일을 거부합니다.

특히, 파일의 여러 오디오 트랙 때문에 문제가 발생하지 않는 것으로 보입니다. 문제는 AAC 트랙과 관련이 있습니다.

관련 문제