[gstreamer-bugs] [Bug 607555] asfmux plugin generates data streams incompatible with WMSP (MMSH) and WMP

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Thu Jan 21 07:49:50 PST 2010


https://bugzilla.gnome.org/show_bug.cgi?id=607555
  GStreamer | gst-plugins-bad | 0.10.25

--- Comment #5 from Thiago Sousa Santos <thiago.sousa.santos at collabora.co.uk> 2010-01-21 15:49:46 UTC ---
(In reply to comment #4)
> Ok, here are some comments from the different parts of the patch:
> 
> -  GST_WRITE_UINT64_LE (*buf + 16, 0);   /* object size - needs updating */
> +  
> +  /* Data object size. This is always >= ASF_DATA_OBJECT_SIZE. The standard
> +   * specifically accepts the value 0 in live streams, but WMP is not
> accepting
> +   * this while streaming using WMSP, so we default to minimum size also for
> +   * live streams. Otherwise this field must be updated later on when we know 
> +   * the complete stream size.
> +   */
> +  GST_WRITE_UINT64_LE (*buf + 16, ASF_DATA_OBJECT_SIZE);
> +
> 
> The correct size for all live video streams are _always_ ASF_DATA_OBJECT_SIZE.
> As you know the specification explicitly allows 0 in live streams - telling
> demuxers to do a:
> if (data_object_size == 0)
>   data_object_size = ASF_DATA_OBJECT_SIZE;
> 
> To add a property to the muxer so that you can force it to 0 seems like
> overkill to me, but this is of course your decision.

Yes, other devels also agreed with you and convinced me, so no property :)

> 
> Without this change windows media player won't even try to play the stream.
> Shame on them. Next problem is that the windows media player breaks down after
> a certain time of buffering. The reason for this is that we don't send the
> correct data_packet size when we do padding. The part of the diff that fixes
> this is extracted below:
> 
> -  GST_WRITE_UINT32_LE (data + 2, asfmux->packet_size);
> ....
> +    GST_WRITE_UINT32_LE (data + offset, asfmux->packet_size - size_left);
> 
> We _must_ subtract size_left from the total length or we typically get packets
> with packet size 4803 bytes if we pad 3 bytes. This is a critical error and
> makes us violate the standard.
> 
> With these two fixes there is one major problem left: Windows Media Player is
> buffering forever. It took me horribly many hours of tweaking the asfmux plugin
> to realize that it was due to the packet size and padding size in the parsing
> info header. WMP can for some unknown reason not accept 32 bit data & padding
> size. A quick fix would be to just always force 16 bit packet & padding sizes,
> we hardly ever want packet sizes above 64K, but it felt a bit hackish. So
> instead I created a function to check if the sizes are small enough to fit in
> 16 bit and adapt the parsing info header accordingly. On my PC the wmsp_server
> now finally streams correctly.
> 
> All my work on the asfmux was done by analyzing the asf headers in NRK's
> (Norwegian Broadcasting Corporation) TV broadcast streams available on
> http://www.nrk.no/nett-tv/direkte/nrk1/
> They use Microsoft's own streaming server solution and could easily be
> downloaded and re-streamed with wmsp_server.
> 
> I hope this made things a bit clearer. And I find it strange that the
> wmsp_server didn't work for you. It shouldn't segfault while streaming - only
> if you restart the client without restarting the server.
> 
> Oh, and to help you do debugging with WMP I can recommend that you download
> this web page and opens it in internet explorer:
> http://blogs.msdn.com/randomnumber/archive/2009/07/20/wmp-debug-page-to-dump-player-events.aspx
> It's not great - but better than working directly in WMP (just remember to
> allow activex plugins - or it won't work).
> 
> I'm interested in getting this WMSP work out of the box in gstreamer - so
> please tell me more about how far you get with the test program and I'll see if
> I can assist you in any way.

Currently I'm tracking a regression introduced by your patch with a simple
pipeline like:

gst-launch videotestsrc num-buffers=500 ! ffenc_wmv2 ! asfmux ! filesink
location=test.asf

It doesn't play till the end in totem anymore (haven't tested other players
yet).

After solving this, I'll push your patch.

-- 
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.




More information about the Gstreamer-bugs mailing list