Воспроизведение потоковой волны прерывается во время воспроизведения в 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.