Я использую объекты NetStream, NetConnection и Video для воспроизведения файла mp4, который размещен на веб-сервере с использованием http.
URL-адрес файла mp4, например: http://xx.xx.xx.xx/file.mp4
Это приложение AIR, соответствующий код вставлен ниже:
var url:String = <some http url>;
connect_nc = new NetConnection();
connect_nc.connect(null);
stream_ns = new NetStream(connect_nc);
var ns_object:Object = new Object();
ns_object.onPlayStatus = ns_onPlayStatus;
stream_ns.client = ns_object;
videoMP4.attachNetStream(stream_ns);
stream_ns.bufferTime = 1.0 // 1 sec
stream_ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatusEventHandler);
stream_ns.play(url);
Этот код работает при работе в MAC OS X. Но он не работает при запуске в Windows XP. Я получаю ошибку:
NetStream.Play.StreamNotFound
Я также попытался воспроизвести URL-адрес с помощью VLC-проигрывателя на том же хосте Windows XP. URL действителен, потому что VLC может его воспроизвести.
В моем конкретном случае URL-адрес http размещается на WMP 12 (оконный медиаплеер 12) на компьютере с Win 7, где я использую функцию совместного использования мультимедиа WMP 12.
После дальнейшего изучения http-трафика на wireshark вот что я нашел.
После запуска wireshark на хосте, на котором выполняется приложение Adobe AIR, кажется, что он получает ответ HTTP 406 от
сервер, на котором работает WMP 12.
GET /WMPNSSv4/63903908/1_ezVGREUzQTA4LTdDQzQtNDJFMy1CNDVDLUZEMjA4MDE5OUM4Q30uMC44.mp4 HTTP/1.1
Host: 192.168.0.102:10243
User-Agent: Mozilla/5.0 (Windows; U; en) AppleWebKit/526.9+ (KHTML, like Gecko) AdobeAIR/1.5
Referer: app:/clicker.swf
x-flash-version: 10,0,12,36
Connection: Keep-Alive
Accept: text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, text/css, image/png, image/jpeg, image/gif;q=0.8, application/x-shockwave-flash, video/mp4;q=0.9, flv-application/octet-stream;q=0.8, video/x-flv;q=0.7, audio/mp4, application/futuresplash, */*;q=0.5
Ответ:
HTTP/1.1 406 Not Acceptable
Last-Modified: Mon, 19 Oct 2009 23:21:14 GMT
Server: Microsoft-HTTPAPI/2.0
Accept-Ranges: bytes
TransferMode.DLNA.ORG: Streaming
Date: Tue, 12 Jan 2010 22:52:48 GMT
Connection: close
Content-Length: 0
на MAC:
Тем не менее, он получает ответ 200 OK, и поэтому потоковое видео работает.
GET /WMPNSSv4/63903908/1_ezVGREUzQTA4LTdDQzQtNDJFMy1CNDVDLUZEMjA4MDE5OUM4Q30uMC44.m p4 HTTP/1.1
Host: 192.168.0.102:10243
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/526.9+ (KHTML, like Gecko) AdobeAIR/1.5.3
Referer: app:/clicker.swf
X-Flash-Version: 10,0,42,34
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: keep-alive
Ответ:
HTTP/1.1 200 OK
Content-Length: 1524867
Content-Type: video/mp4
Last-Modified: Mon, 19 Oct 2009 23:21:14 GMT
Server: Microsoft-HTTPAPI/2.0
Accept-Ranges: bytes
TransferMode.DLNA.ORG: Streaming
Date: Tue, 12 Jan 2010 22:56:20 GMT
Разница, которую я вижу в HTTP-запросах между Windows XP и MAC-версией, заключается в заголовке Accept:. Является ли значение заголовка Accept: неправильным для случая Windows, из-за которого WMP 12 отклоняет
запрос http.
Если я запускаю приложение Adobe AIR на хосте Win 7, я вижу ту же ошибку.
Я неправильно использую объект NetStream или это ошибка в коде WMP 12, которая не может быть проанализирована
заголовок правильно или это гибкая ошибка, когда он генерирует неверный заголовок accept: header?