Воспроизведение потоковой волны прерывается при воспроизведении в WMP

Мы используем WMPLib в качестве встроенного проигрывателя в нашем приложении C #, но эта проблема возникает также в проигрывателе Windows Media.

Наш сервер транслирует аудио, и у него включена потоковая передача со смещением. Данный URL:

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

который возвращает поток октета или x-волны (оба не работают).

WMP начинает буферизацию и воспроизведение 2-минутного длинноволнового файла с заданного URL-адреса (все работает нормально), но когда я хватаю и опускаю ползунок дорожки примерно на 90% от его длины, воспроизведение прерывается, и WMP отображает общую ошибку звука ( c00d11b1). Когда я опускаю ползунок ближе (на 10-20% дальше), воспроизведение продолжается без ошибок и воспроизводится со смещением правильно. Я использую 64-разрядную версию Windows 7 Home Premium.

Когда я использую тот же URL-адрес в других приложениях медиаплеера (VLC), ошибки не возникает.

Что вызывает такую ​​проблему?

Пакеты 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 => Сервер - получаем звук со смещением (задано в диапазоне)

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

Сервер => 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 прерывает воспроизведение и показывает ошибку.

Как мы можем это исправить? Спасибо за любую помощь.


person gawi    schedule 04.04.2013    source источник


Ответы (1)


Как видно из второго ответа, сервер с самого начала отвечает полным потоком октетов. Предполагая, что у вас есть контроль на достаточно низком уровне на стороне сервера, ваш сервер должен использовать Range: bytes=733184-833657 http-заголовок, отправленный клиентом, чтобы прочитать этот диапазон байтов из soud.wav и отправить его клиенту.

Я не уверен в том, что нужны заголовки ответов http, но как подсказка: это то же поведение, что и при возобновлении загрузки http.

Здесь вы можете увидеть код C # на стороне сервера, создающий ответ Content-Range.

Здесь вы можете увидеть Ответ на построение кода PHP.

person jlvaquero    schedule 23.07.2013