shoutcast 스트림에서 노래 제목을 가져 오려고합니다. 그러나 MENewStream, MEEndOfStream, MESourceMetadataChanged 이벤트는 실행되지 않으며 아무것도 업데이트되지 않습니다. Media Foundation .NET : shoutcast에서 노래 제목을 얻는 방법
이
내가 미디어 소스 만드는 방법은 다음과 같습니다hr = sourceResolver.CreateObjectFromURL(
mediaURL, MFResolution.ByteStream, properties, out mediaStream
);
hr = sourceResolver.CreateObjectFromByteStream(
mediaStream, mediaURL, MFResolution.MediaSource, properties, out objectType, out mediaSource
);
그리고 이것은 내가 메타 데이터를 얻는 방법은 다음과 같습니다
hr = MFExtern.MFGetService(
mediaSource, MFServices.MF_METADATA_PROVIDER_SERVICE, typeof(IMFMetadataProvider).GUID, out obj
);
IMFMetadataProvider metadataProvider = obj as IMFMetadataProvider;
hr = mediaSource.CreatePresentationDescriptor(out descriptor);
hr = metadataProvider.GetMFMetadata(descriptor, 0, 0, out metadata);
어딘가에 응용 프로그램에서 I 전화 :
Display(stream.Metadata);
을하는 다음을 반환합니다.
"Bitrate" : 128
"Title" : ...(station name)
"WM/Genre" : ...
"WM/PromotionURL": ...
질문 : 위의 이벤트를 실행하기 위해 구현해야하는 Media Foundation .NET의 shoutcast에서 어떻게 업데이트를 얻을 수 있습니까?
시간과 자선을 위해 미리 감사드립니다.
이것이 다중 계층 문제인 것으로 생각됩니다. MF는 ID3 만 이해하고 파일에만 적용됩니다. 또한 스트림에 메타 데이터가 포함되도록하려면 서버에 메타 데이터를 삽입하도록 지시 한 다음 제거하여 디코더로 전달해야합니다. MF에 익숙하지 않아서이 모드가 있는지 모릅니다. 아이스 캐스트 (Icecast)의 경우 선호하는 스트림 컨테이너는 오그 (Ogg)입니다. – TBR
shoutcast를 MF [여기] (https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/220b166e-b8f2-4a5a-b2bc-c3f9b6674a87)와 함께 사용하는 방법에 대한 자세한 설명이 있습니다. MS의 응답은 icecast가 다른 shoutcast 서버가하는 것처럼 예상 된 'ICY 200 OK'를 전송하지 않기 때문에 MF가 올바르게 처리하지 못하는 것으로 보입니다. 이 게시물은 다소 일자가 (2010), 그래서 아마도 더 최근의 해결책이 있습니다. –
@Mario 스트림에서 인 밴드 메타 데이터를 디 먹스 (demux)하기 위해 자신 만의 코드를 생성 한 다음 디코딩을 수행하는 모든 곳으로 일반 스트림을 보내야합니다. – Brad