2012-02-24 4 views
2

누구나이 작업을 수행합니까? 나는 CodecPrivateData를 엉망으로 만들었지 만 작동하는 것처럼 보이는 WAVEFORMTEX FormatTags를 찾을 수 없습니다. 0xFF00, 0x1016 및 0x0116 시도했습니다. MSDN 설명서를 사용하여 나머지 문자열을 완성했습니다.MediaStreamSource를 사용하여 raw adts AAC 스트림을 재생하는 방법은 무엇입니까?

FormatTag (0x0016)가있는 MMReg.h (WAVE_FORMAT_MPEG_ADTS_AAC 0x1600)에서이 파일을 발견했습니다. 당신은 이것이 내가 사용해야하는 것이라고 생각할 것입니다, 그러나 그것도 작동하지 않습니다.

GetSampleAsync 스트림에서 adts 헤더가 반복적으로 호출 되더라도 재생되지는 않지만 0xFF를 사용하는 경우. FooBar, VLC 및 Window Media Player에서 재생할 수 있기 때문에 스트림이 양호하다는 것을 알고 있습니다. AAC를 MP4 컨테이너에 집어 넣을 때 실버 라이트에서 잘 작동하므로 실버 라이트가 AAC 설정을 지원한다는 것을 알고 있습니다.

누군가 나를 위해 작동하는 16 진수 CodecPrivateData 문자열을 제공 할 수 있습니까?

편집 :

0x1016010080BB0000E02E0000010000000E000100FE0000000000000000001190

이 문자열은 시도조차하지 않고 CloseMedia()에 OpenMediaAsync()에서 바로 간다 : 이것은 내 생각 PrivateCodecData의 16 진수 문자열의 예 작동합니다입니다

샘플. MSDN 설명서 예제는 동일한 내용의 here을 찾습니다. 나는 적어도 그것을 닫기 전에 샘플을 시험해 볼 것을 기대할 것이다.

답변

1

실버 라이트는 당신이 (예를 들어 Mediainfo를 포함) 귀하의 MP4 파일을 분석하면

, 당신은 오디오 만 ADTS 래퍼없이 AAC를 볼 수 ... AAC 및 ADTS 래퍼와 호환되지 않는 것 같다. 이것이 Silverlight가이 경우 AAC 오디오를 MP4 파일에 포함시켜 읽을 수있는 이유입니다.

MediaStreamSource에서 ReportSampleCompleted()를 호출하기 전에 각 오디오 샘플에 대한 ADTS 헤더를 제거해야합니다. ADTS 헤더는 7 또는 9 바이트로 구성됩니다 (CRC없이 또는 함께). ADTS 헤더에 대한 자세한 내용은 see this link을 참조하십시오.

물론 올바른 FormatTag로 CodecPrivateData 문자열을 조정해야합니다. 다음은 AAC LC 48KHz @ 96Kbps 파일입니다. FF00020080BB0000E02E0000040010000200

+0

저는 귀하가 Silverlight가 적합하지 않다고 생각합니다. 일하기 위해 일주일을 보냈다. 해결 방법은 효과가 있으며 구현 한 것입니다.하지만 AAC의 설명서가 가장 적은 말로 표현하기가 쉽지 않기 때문에 스트림을 다시 포맷하지 않아도되도록 노력하고있었습니다. 답장을 보내 주셔서 감사합니다. – shibbybird