views:

772

answers:

0

Hi,

I am using NetStream, NetConnection and Video object to play an mp4 file which is hosted over a web server using http.

The mp4 file URL is for example: http://xx.xx.xx.xx/file.mp4

This is an AIR application and the relevant code is pasted below:


                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);

This code works when run on MAC OS X. But it does not work when run on Windows XP. I get the error:

"NetStream.Play.StreamNotFound"

I also tried playing the URL using VLC player on the same windows XP host. The URL is valid because VLC can play it.

In my particular case, the http URL is hosted by WMP 12 (window media player 12) on Win 7 machine where I am using the media sharing feature of WMP 12.

After further looking into http traffic on wireshark, here is what i found.

After running wireshark on the host running the adobe AIR application, it seems that it is getting a HTTP 406 response from

the server being run by WMP 12.

GET /WMPNSSv4/63903908/1_ezVGREUzQTA4LTdDQzQtNDJFMy1CNDVDLUZEMjA4MDE5OUM4Q30uMC4 4.mp4 HTTP/1.1

Referer: app:/clicker.swf

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

x-flash-version: 10,0,12,36

User-Agent: Mozilla/5.0 (Windows; U; en) AppleWebKit/526.9+ (KHTML, like Gecko) AdobeAIR/1.5

Host: 192.168.0.102:10243

Connection: Keep-Alive


Response:

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

On MAC:

It receives 200 OK response though, and that is why the video streaming works.

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


Response:

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

The difference that I can see in the HTTP requests between the Windows XP and MAC version is the Accept: Header. Is the Accept: header value wrong for Windows case because of which WMP 12 rejects the http request.

If i run the adobe AIR application on Win 7 host, i see the same failure.

Am I using the NetStream object incorrectly or it is a bug in WMP 12 code not being able to parse the header properly or it is a flex bug where it is generating an incorrect accept: header?

thanks in advance. Sunil