Closed Bug 1002019 Opened 6 years ago Closed 5 years ago

YouTube DASH player causes Nightly to hang when playing MP4

Categories

(Core :: Audio/Video, defect, critical)

x86_64
Windows 8.1
defect
Not set
critical

Tracking

()

RESOLVED DUPLICATE of bug 1002404

People

(Reporter: geeknik, Unassigned)

References

(Blocks 1 open bug)

Details

(Keywords: hang)

Attachments

(1 file)

74.38 KB, application/x-zip-compressed
Details
Attached file windbg log file
Like the summary says, if you enable Youtube's HTML5 player while having media.mediasource.enabled set to true, x64 Nightly for Windows freezes, quits responding, has to be force closed. Useful information taken from WinDbg:

   0  Id: 1e54.78 Suspend: 1 Teb: 00007ff7`961ce000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`00ccc500 00007fff`dd264f6b xul!mozilla::GetEstimatedBufferedTimeRanges(class mozilla::MediaResource * aStream = 0x00000000`455fde08, int64 aDurationUsecs = 1043898624, class mozilla::dom::TimeRanges * aOutBuffered = 0x00000000`512df300)+0x10b [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\content\media\videoutils.cpp @ 96]
00000000`00ccc550 00007fff`dd2833cc xul!mozilla::MediaDecoderReader::GetBuffered(class mozilla::dom::TimeRanges * aBuffered = 0x00000000`4f219980, int64 aStartTime = 13420016)+0x6b [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\content\media\mediadecoderreader.cpp @ 351]
00000000`00ccc580 00007fff`dcd2f4f8 xul!mozilla::dom::SourceBuffer::GetBuffered(class mozilla::ErrorResult * aRv = 0x00000000`3b4a3570)+0xc8 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\content\media\mediasource\sourcebuffer.cpp @ 192]
00000000`00ccc5d0 00007fff`dcdccf49 xul!mozilla::dom::SourceBufferBinding::get_buffered(struct JSContext * cx = 0x00000000`00cccc08, class JS::Handle<JSObject *> obj = class JS::Handle<JSObject *>, class mozilla::dom::SourceBuffer * self = 0x00000000`08f0e360, class JSJitGetterCallArgs args = class JSJitGetterCallArgs)+0x30 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\obj-firefox\dom\bindings\sourcebufferbinding.cpp @ 132]
00000000`00ccc620 00007fff`e8834eb5 xul!mozilla::dom::GenericBindingGetter(struct JSContext * cx = 0x00000000`00000000, unsigned int argc = 0xdcdccd9c, class JS::Value * vp = 0x00000000`4f219980)+0x1ad [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\dom\bindings\bindingutils.cpp @ 2239]
00000000`00ccc6a0 00007fff`e8835297 mozjs!js::Invoke(struct JSContext * cx = 0x00000000`00cccc39, class JS::CallArgs * args = 0x00000000`00000000, js::MaybeConstruct construct = NO_CONSTRUCT (0))+0x2a5 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\vm\interpreter.cpp @ 475]
00000000`00cccb80 00007fff`e88358f2 mozjs!js::Invoke(struct JSContext * cx = 0xfffb8000`4b787980, class JS::Value * thisv = 0x00000000`3b4a3570, class JS::Value * fval = 0x00000000`00cccd10, unsigned int argc = 0xe8827585, class JS::Value * argv = 0x00000000`00000000, class JS::MutableHandle<JS::Value> rval = class JS::MutableHandle<JS::Value>)+0x217 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\vm\interpreter.cpp @ 531]
00000000`00cccc90 00007fff`e8771ca3 mozjs!js::InvokeGetterOrSetter(struct JSContext * cx = 0xfffb8000`4b752e80, class JSObject * obj = 0x00000000`3b4a3570, class JS::Value fval = class JS::Value, unsigned int argc = 0x3b4a3570, class JS::Value * argv = 0x00000000`00000000, class JS::MutableHandle<JS::Value> rval = class JS::MutableHandle<JS::Value>)+0x92 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\vm\interpreter.cpp @ 604]
00000000`00ccccd0 00007fff`e87a6239 mozjs!js::Shape::get(struct JSContext * cx = 0x00000000`3b4a3570, class JS::Handle<JSObject *> receiver = class JS::Handle<JSObject *>, class JSObject * obj = 0x00000000`091990b8, class JSObject * pobj = 0x00000000`4b7e6130, class JS::MutableHandle<JS::Value> vp = class JS::MutableHandle<JS::Value>)+0x73 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\vm\shape-inl.h @ 51]
00000000`00cccd60 00007fff`e883ec02 mozjs!js::baseops::GetProperty(struct JSContext * cx = 0x00000000`3b4a3570, class JS::Handle<JSObject *> obj = class JS::Handle<JSObject *>, class JS::Handle<JSObject *> receiver = class JS::Handle<JSObject *>, class JS::Handle<jsid> id = class JS::Handle<jsid>, class JS::MutableHandle<JS::Value> vp = class JS::MutableHandle<JS::Value>)+0xa59 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\jsobj.cpp @ 4507]
00000000`00cccee0 00007fff`e8845c75 mozjs!GetPropertyOperation(struct JSContext * cx = 0x00000000`3b4a3570, class js::InterpreterFrame * fp = 0x00000000`09199021, class JS::Handle<JSScript *> script = class JS::Handle<JSScript *>, unsigned char * pc = 0x00000000`00000000 "", class JS::MutableHandle<JS::Value> lval = class JS::MutableHandle<JS::Value>, class JS::MutableHandle<JS::Value> vp = class JS::MutableHandle<JS::Value>)+0x292 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\vm\interpreter.cpp @ 265]
00000000`00cccfa0 00007fff`e8829f16 mozjs!Interpret(struct JSContext * cx = 0x00000000`3b4a3570, class js::RunState * state = 0x00000000`00000001)+0x34a5 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\vm\interpreter.cpp @ 2415]
00000000`00ccdc80 00007fff`e883503e mozjs!js::RunScript(struct JSContext * cx = 0x00000000`00cce278, class js::RunState * state = 0x00007fff`ffffffff)+0x156 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\vm\interpreter.cpp @ 422]
00000000`00ccdcc0 00007fff`e8785776 mozjs!js::Invoke(struct JSContext * cx = 0x00000000`00cce2a0, class JS::CallArgs * args = 0x00000000`00000000, js::MaybeConstruct construct = NO_CONSTRUCT (0))+0x42e [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\vm\interpreter.cpp @ 497]
00000000`00cce1a0 00007fff`e8834eb5 mozjs!js::CallOrConstructBoundFunction(struct JSContext * cx = 0x00000000`3b4a3570, unsigned int argc = 0, class JS::Value * vp = 0x00000000`00cce3e1)+0x256 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\jsfun.cpp @ 1282]
00000000`00cce2e0 00007fff`e8835297 mozjs!js::Invoke(struct JSContext * cx = 0x00000000`00cce879, class JS::CallArgs * args = 0x00000000`00cce9e8, js::MaybeConstruct construct = 1 (No matching enumerant))+0x2a5 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\vm\interpreter.cpp @ 475]
00000000`00cce7c0 00007fff`e8749091 mozjs!js::Invoke(struct JSContext * cx = 0x00000000`00cce998, class JS::Value * thisv = 0x00000000`00cce998, class JS::Value * fval = 0x00000000`00000001, unsigned int argc = 0xdcc25784, class JS::Value * argv = 0x00000000`00cce9e8, class JS::MutableHandle<JS::Value> rval = class JS::MutableHandle<JS::Value>)+0x217 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\vm\interpreter.cpp @ 531]
00000000`00cce8d0 00007fff`dcba713d mozjs!JS::Call(struct JSContext * cx = 0x00000000`00cceca0, class JS::Handle<JS::Value> thisv = class JS::Handle<JS::Value>, class JS::Handle<JS::Value> fval = class JS::Handle<JS::Value>, class JS::HandleValueArray * args = 0x00000000`3b4a35d0, class JS::MutableHandle<JS::Value> rval = class JS::MutableHandle<JS::Value>)+0x51 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\js\src\jsapi.cpp @ 5061]
00000000`00cce920 00007fff`dcfd17e7 xul!mozilla::dom::EventListener::HandleEvent(struct JSContext * cx = 0x00000000`00cceac0, class JS::Handle<JS::Value> aThisVal = class JS::Handle<JS::Value>, class mozilla::dom::Event * event = 0x00000000`00000000, class mozilla::ErrorResult * aRv = 0x00000000`00cceca0)+0x191 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\obj-firefox\dom\bindings\eventlistenerbinding.cpp @ 46]
00000000`00ccea80 00007fff`dcfd1b60 xul!mozilla::dom::EventListener::HandleEvent<mozilla::dom::EventTarget * __ptr64>(class mozilla::dom::EventTarget ** thisObjPtr = 0x00007fff`f6546f80, class mozilla::dom::Event * event = 0x00000000`00d803c0, class mozilla::ErrorResult * aRv = 0x00000000`45b664d0, mozilla::dom::CallbackObject::ExceptionHandling aExceptionHandling = eReportExceptions (0))+0x197 [c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\obj-firefox\dist\include\mozilla\dom\eventlistenerbinding.h @ 53]

Full WinDbg log attached. If I disable the HTML5 player on Youtube, videos work just fine, Nightly doesn't hang, quit responding, etc.
From the stack trace it looks like it's instantiating Windows Media Foundation stuff so maybe it's trying to use the OS MP4 decoders. I suspect that combination does not currently work with MSE.
Did you also set media.mediasource.ignore_codecs to true? Can you please include a link to a video you're seeing the bug with?
(In reply to Matthew Gregan [:kinetik] from comment #2)
> Did you also set media.mediasource.ignore_codecs to true? Can you please
> include a link to a video you're seeing the bug with?

No, and every video on YouTube. I did go ahead and set media.mediasource.ignore_codecs to true, and I got the same behavior. Firefox hangs and is completely unresponsive and has to be killed.
I tested with a 32-bit build of Win 8.1 and was served WebM (with no hang), but the stack trace you provided suggests the MP4 decoding stack is involved, so please provide a link to a specific YouTube video that produces the hang shown by the stack attached in the bug's initial comment.
Thanks.  So that video is offered with DASH but only with MP4:

From youtube-dl -F -s:
format code extension resolution  note 
139         m4a       audio only  DASH audio   50k , audio@ 48k (22050Hz), 11.64MiB (worst)
140         m4a       audio only  DASH audio  129k , audio@128k (44100Hz), 31.09MiB
141         m4a       audio only  DASH audio  257k , audio@256k (44100Hz), 62.41MiB
160         mp4       256x144     DASH video  117k , video only, 26.76MiB
133         mp4       426x240     DASH video  265k , video only, 59.73MiB
134         mp4       640x360     DASH video  614k , video only, 132.86MiB
135         mp4       854x480     DASH video 1129k , video only, 250.50MiB
136         mp4       1280x720    DASH video 2251k , video only, 497.85MiB
137         mp4       1920x1080   DASH video 4348k , video only, 935.74MiB
17          3gp       176x144     
36          3gp       320x240     
5           flv       400x240     
18          mp4       640x360     
43          webm      640x360     
22          mp4       1280x720    (best)

...the only WebM is non-DASH 360p.

The codec whitelist change (to include only WebM for MSE) I just landed in bug 1000686 should stop this being hit, and you should see YouTube fall back to non-DASH playback for this video.  I'll leave this bug open to deal with the actual hang, but anything MP4 related is lower priority than other MSE bugs right now.
Summary: Enabling Youtube's HTML5 player w/ media.mediasource.enabled = true causes Nightly to freeze, hang, quit responding → YouTube DASH player causes Nightly to hang when playing MP4
(In reply to Matthew Gregan [:kinetik] from comment #6)
> The codec whitelist change (to include only WebM for MSE) I just landed in
> bug 1000686 should stop this being hit, and you should see YouTube fall back
> to non-DASH playback for this video.  I'll leave this bug open to deal with
> the actual hang, but anything MP4 related is lower priority than other MSE
> bugs right now.

So I'm running an hourly build with your codec whitelist change in it, and now when I set media.mediasource.enabled to true and enable the HTML5 player on YouTube, the videos are just black. I can hear audio, but there is no video. Example: https://www.youtube.com/watch?v=XoE-0-X03Qo. 

Should I file a new bug or is this something else?
Thanks for testing.  That sounds like bug 1002404.
Can you please indicate if you're still experiencing this issue ?
I'm unable to provide that information, so please close/resolve as necessary.
Status: NEW → RESOLVED
Closed: 5 years ago
Resolution: --- → DUPLICATE
Duplicate of bug: 1002404
You need to log in before you can comment on or make changes to this bug.