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

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

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

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

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

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

Когда я использую тот же 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 отключает воспроизведение и показывает ошибку.

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

1 ответ

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

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

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

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

Другие вопросы по тегам