0

C# アプリケーションで埋め込みプレーヤーとして WMPLib を使用していますが、この問題は Windows Media Player でも発生します。

私たちのサーバーはオーディオをストリーミングし、オフセットを有効にしてストリーミングしています。指定された URL:

http://ourserver.com/playback?id=400

オクテットまたは x-wave ストリームを返します (どちらも機能しません)。

WMP は、指定された URL から 2 分間の長さの wave ファイルのバッファリングと再生を開始します (すべて正常に動作します) が、トラック スライダーをつかんでその長さの約 90% にドロップすると、再生が中断され、WMP に一般的なオーディオ エラーが表示されます ( c00d11b1)。スライダーを近くに (10 ~ 20% ) ドロップすると、再生はエラーなしで続行され、適切にオフセットされて再生されます。Windows 7 Home Premium 64 ビットを使用しています。

他のメディア プレーヤー アプリケーション (VLC) で同じ URL を使用している場合、エラーは発生しません。

そのような問題の原因は何ですか?

この状況からの TCP パケット:

WMP=>サーバー - ウェーブを取得

GET http://ourserver.com/playback?id=400
Cache-Control: no-cache
Connection: Keep-Alive
Pragma: getIfoFileURI.dlna.org
Accept: */*
Cookie: PHPSESSID=7e5156ec44280a9210570158c5d31475
User-Agent: NSPlayer/12.00.7601.17514 WMFSDK/12.00.7601.17514
GetContentFeatures.DLNA.ORG: 1
Host: 192.168.0.5

サーバー=>WMP - ファイルを返す

HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Content-Description: File Transfer
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Dis; filename="sound.wav"
Content-Length: 833658
Accept-Ranges: bytes
Date: Tue, 02 Apr 2013 10:46:01 GMT
Server: lighttpd/1.4.28

サウンドが再生され、スライダーを動かします... WMP=>Server - オフセットでサウンドを取得します (範囲で設定)

GET http://ourserver.com/playback?id=400
Cache-Control: no-cache
Connection: Keep-Alive
Pragma: getIfoFileURI.dlna.org
Accept: */*
Cookie: PHPSESSID=7e5156ec44280a9210570158c5d31475
Range: bytes=733184-833657
User-Agent: NSPlayer/12.00.7601.17514 WMFSDK/12.00.7601.17514
GetContentFeatures.DLNA.ORG: 1
Host: 192.168.0.5

Server=>WMP - サウンドを返す

HTTP/1.1 206 Partial Content
X-Powered-By: PHP/5.3.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Content-Range: bytes 733184-833657/
Cache-Control: no-cache
Pragma: no-cache
Content-Description: File Transfer
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Dis; filename="sound.wav"
Content-Length: 833658
Accept-Ranges: bytes
Date: Tue, 02 Apr 2013 10:46:10 GMT
Server: lighttpd/1.4.28

ストリームは続行しますが、WMP は再生を中断し、エラーを表示します。

どうすればこれを修正できますか? 助けてくれてありがとう。

4

1 に答える 1

0

2 番目の応答でわかるように、サーバーは最初から完全な octect ストリームで応答しています。サーバー側で十分に低いレベルで制御できると仮定すると、サーバーRange: bytes=733184-833657はクライアントから送信された http ヘッダーを使用して、この範囲のバイトを読み取り、クライアントにsoud.wav送信する必要があります。

必要な http 応答ヘッダーについてはわかりませんが、手がかりとして、http ダウンロードを再開するのと同じ動作です。

ここでは、Content-Range 応答を作成するサーバー側の C# コードを確認できます。

ここでは、PHP コードのビルド応答を確認できます。

于 2013-07-23T08:23:12.797 に答える