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);
とどこかに私が呼んでアプリ内:
Display(stream.Metadata);
次のもののみを返します:
"Bitrate" : 128
"Title" : ...(station name)
"WM/Genre" : ...
"WM/PromotionURL": ...
質問:私は上記のイベントを引き起こすために実装する必要があるMedia Foundation .NETのshoutcastからどのように更新を入手できますか?
あなたの時間と慈悲に感謝します。
私はこれが多層の問題だと思っています。私はMFがID3しか理解していないと思うし、それはファイルだけに適用されます。ストリームにメタデータが含まれている場合は、サーバーに挿入するようにサーバーに指示してから、それを削除してからデコーダに渡す必要があります。私はMFに慣れていないので、これにはモードがあるかどうかわかりません。アイスキャストの場合、好ましいストリームコンテナはOggであることに注意してください。 – TBR
shoutcastをMF [here](https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/220b166e-b8f2-4a5a-b2bc-c3f9b6674a87)で使用する方法の詳細な説明があります。 MSからの応答は、他のshoutcastサーバが行うように、ICecastが予想される「ICY 200 OK」を送信していないため、MFが正しく処理しないことが原因です。その投稿は多少日付が付けられています(2010年)ので、おそらく最近の解決策があります。 –
@Mario独自のコードを作成して、ストリームからインバンドのメタデータをデマルチプレクサにし、デコードを行っているすべてのものに通常のストリームを送信する必要があります。 – Brad