これらのアプリは、Shoutcast メタデータを取得できます。
場合によっては、「サーバーがプロトコル違反をコミットしました。Section=ResponseStatusLine」という例外が発生することがあります。
リクエスト例:
GET http://173.244.215.162:8300/;stream.nsv HTTP/1.1
GET: / HTTP/1.0
Icy-MetaData: 1
User-Agent: WinampMPEG/5.09
Host: 173.244.215.162:8300
Connection: Keep-Alive
応答:
ICY 200 OK
icy-notice1: <BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR>
icy-notice2: SHOUTcast Distributed Network Audio Server/Linux v1.9.8<BR>
icy-name: 100Hitz - Top 40
icy-genre: Various
icy-url: http://www.100hitz.com
content-type: audio/mpeg
icy-pub: 1
icy-metaint: 32768
icy-br: 128
この問題を解決するには、次を使用できます。
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
私のApp.configファイルでは、しかしWindows 8ストアアプリではできません。
しかし、MediaElement は上記の Url(request) で問題なく動作します。
これらの制限を回避する方法はありますか?(c++ lib など)。
ありがとう。
**
更新:
** C++(Casablanca)用のREST SDKを見つけました。ライブラリは例外なく応答を取得できますが、まだ問題があります:
http_client client(L"http://173.244.215.162:8300/;stream.nsv");
http_request request(methods::GET);
request.headers().add(L"GET",L"/ HTTP/1.0");
request.headers().add(L"Icy-MetaData",L"1");
client.request(request).then([](http_response response)
{
...
}
応答ヘッダーは、responce.body();
HTTP RFC を無視する方法はありますか?の一部として表示されます。または、適切な応答ヘッダーを取得するために前処理を行うにはどうすればよいですか。ありがとう。
更新:
この問題は、手動のヘッダー解析で解決してください。より良い解決策をまだ見ています。