[MPlayer-dev-eng] [PATCH] using mplayer with ffmpeg asf stream

Dominique Andre Gunia Dominique.Gunia at schunter.etc.tu-bs.de
Wed Oct 29 12:53:42 CET 2003


Hi!

I set up a stream with ffmpeg/ffserver (ffmpeg.sourceforge.net). It
creates an asf stream that I would like to view with mplayer. The
problem is, that mplayer thinks the asf file would be a playlist because
of an unknown Content-Type. Details follow:

When started, I get the following result

> dom at tng:/tmp$ mplayer -nocache http://schuntille:8090/test.asf
> [...]
> Playing http://schuntille:8090/test.asf
> Resolving schuntille ...
> Connecting to server schuntille[134.169.169.6]:8090 ...
> Resolving schuntille ...
> Connecting to server schuntille[134.169.169.6]:8090 ...
> =====> ASF Redirector
> Connected to server: schuntille
> 
> 
> MPlayer interrupted by signal 2 in module: handle_playlist

The http-protocol is something like this:

> dom at tng:/tmp/MPlayer-0.92$ telnet schuntille 8090
> Trying 134.169.169.6...
> Connected to schuntille.schunter.etc.tu-bs.de.
> Escape character is '^]'.
> GET /test.asf HTTP/1.0
> Host: schuntille
> 
> HTTP/1.0 200 OK
> Pragma: no-cache
> Server: Cougar 4.1.0.3923
> Cache-Control: no-cache
> Pragma: client-id=1908046342
> Pragma: features="broadcast"
> Content-Type: video/x-ms-asf

As you can see the Content-Type is video/x-ms-asf but mplayer expects
one of these (defined in libmpdemux/asf_stream.c):

> if(!strcasecmp(content_type, "application/octet-stream") ||
> !strcasecmp(content_type, "application/vnd.ms.wms-hdr.asfv1") || 
> !strcasecmp(content_type, "application/x-mms-framed") )

Since this content type is not defined, it uses the default behaviour,
which thinks this is a redirector for some browser and tries to parse it
as playlist, which is simply wrong.

When I patch the file like this:

--- main/libmpdemux/asf_streaming.c     2003-09-25 02:36:04.000000000 +0200
+++ main.patched/libmpdemux/asf_streaming.c     2003-10-29 12:44:32.000000000 +0100
@@ -421,7 +421,8 @@
        if( content_type==NULL ) return ASF_Unknown_e;
        if(     !strcasecmp(content_type, "application/octet-stream") ||
                !strcasecmp(content_type, "application/vnd.ms.wms-hdr.asfv1") ||        // New in Corona, first request
-               !strcasecmp(content_type, "application/x-mms-framed") ) {               // New in Corana, second request
+               !strcasecmp(content_type, "application/x-mms-framed") ||                // New in Corana, second request
+               !strcasecmp(content_type, "video/x-ms-asf")) {

                if( strstr(features, "broadcast") ) {
                        mp_msg(MSGT_NETWORK,MSGL_V,"=====> ASF Live stream\n");


everything is fine. The output is

> Playing http://schuntille:8090/test.asf
> Resolving schuntille ...
> Connecting to server schuntille[134.169.169.6]:8090 ...
> Resolving schuntille ...
> Connecting to server schuntille[134.169.169.6]:8090 ...
> Resolving schuntille ...
> Connecting to server schuntille[134.169.169.6]:8090 ...
> Cache size set to 0 KBytes
> Connected to server: schuntille
> Stream not seekable!
> ASF file format detected.

Is this a bug in ffmpeg or in mplayer? If it is a bug in mplayer, could
you please use this patch for further versions? I found serveral users
having this problem and no one knew a solution.

Thanks very much!

Regards,
Dominique

-------------- next part --------------
--- main/libmpdemux/asf_streaming.c	2003-09-25 02:36:04.000000000 +0200
+++ main.patched/libmpdemux/asf_streaming.c	2003-10-29 12:44:32.000000000 +0100
@@ -421,7 +421,8 @@
 	if( content_type==NULL ) return ASF_Unknown_e;
 	if( 	!strcasecmp(content_type, "application/octet-stream") ||
 		!strcasecmp(content_type, "application/vnd.ms.wms-hdr.asfv1") ||        // New in Corona, first request
-		!strcasecmp(content_type, "application/x-mms-framed") ) {               // New in Corana, second request
+		!strcasecmp(content_type, "application/x-mms-framed") ||                // New in Corana, second request
+		!strcasecmp(content_type, "video/x-ms-asf")) {               
 
 		if( strstr(features, "broadcast") ) {
 			mp_msg(MSGT_NETWORK,MSGL_V,"=====> ASF Live stream\n");


More information about the MPlayer-dev-eng mailing list