I decided to see what VLC would do given one of our MPDs. VLC SEGV'd.
Code: Select all
(gdb) where
#0 0x00007ffff44f7d8e in std::_Rb_tree<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::_M_begin (this=0x8)
at /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.5/include/g++-v4/bits/stl_tree.h:488
#1 0x00007ffff44f90b8 in std::_Rb_tree<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::find (this=0x8, __k=...)
at /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.5/include/g++-v4/bits/stl_tree.h:1434
#2 0x00007ffff44f9035 in std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::find (this=0x8, __x=...)
at /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.5/include/g++-v4/bits/stl_map.h:674
#3 0x00007ffff44fdf67 in dash::mpd::MPD::isLive (this=0x0) at mpd/MPD.cpp:99
#4 0x00007ffff45067ca in Open (p_obj=0x7fffe8005fb8) at dash.cpp:109
#5 0x00007ffff79501e4 in generic_start (func=0x7ffff4506614,
ap=0x7fffed649b00) at modules/modules.c:413
#6 0x00007ffff794fe9a in vlc_module_load (p_this=0x7fffe8005fb8,
psz_capability=0x7ffff7990248 "stream_filter", psz_name=0x0,
b_strict=true, probe=0x7ffff7950171 <generic_start>)
at modules/modules.c:342
#7 0x00007ffff79502a3 in module_need (obj=0x7fffe8005fb8,
cap=0x7ffff7990248 "stream_filter", name=0x0, strict=true)
at modules/modules.c:428
#8 0x00007ffff791ee8f in stream_FilterNew (p_source=0x7fffe800b7a8,
psz_stream_filter=0x0) at input/stream_filter.c:62
#9 0x00007ffff791eef2 in stream_FilterChainNew (p_source=0x7fffe800b7a8,
psz_chain=0x0, b_record=true) at input/stream_filter.c:82
#10 0x00007ffff79151ad in InputSourceInit (p_input=0x7afce8, in=0x6c3bb0,
psz_mrl=0x6b6a60 "http://localhost:4046/live/Kung%20Fu%20Panda/index.mpd",
psz_forced_demux=0x0, b_in_can_fail=false) at input/input.c:2540
#11 0x00007ffff791160e in Init (p_input=0x7afce8) at input/input.c:1240
#12 0x00007ffff790f75d in Run (obj=0x7afce8) at input/input.c:542
#13 0x00007ffff6fd2c1a in start_thread () from /lib64/libpthread.so.0
#14 0x00007ffff6b342cd in clone () from /lib64/libc.so.6
(gdb) up
#4 0x00007ffff45067ca in Open (p_obj=0x7fffe8005fb8) at dash.cpp:109
109 p_sys->isLive = p_dashManager->getMpdManager()->getMPD()->isLive();
(gdb) print p_dashManager->mpdManager ->getMPD()
$9 = (const dash::mpd::MPD *) 0x0
Code: Select all
$ wget -q -O - http://localhost:4046/live/Kung%20Fu%20Panda/index.mpd
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:mpegB:schema:DASH:MPD:DIS2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="urn:mpeg:mpegB:schema:DASH:MPD:DIS2011" profiles="urn:MPEG:MPEGB:profile:dash:full:2011" minBufferTime="PT10.0S">
<Period>
<Group mimeType="video/mp2t">
<SegmentInfo duration="PT10.0S">
<SegmentTimeline>
<S d="10" />
<S d="10" />
<S d="10" />
<S d="10" />
<S d="10" />
<S d="10" />
<S d="10" />
<S d="10" />
<S d="10" />
<S d="10" />
<S d="10" />
<S d="10" />
</SegmentTimeline>
<Url sourceURL="frag00094.mpeg" />
<Url sourceURL="frag00095.mpeg" />
<Url sourceURL="frag00096.mpeg" />
<Url sourceURL="frag00097.mpeg" />
<Url sourceURL="frag00098.mpeg" />
<Url sourceURL="frag00099.mpeg" />
<Url sourceURL="frag00100.mpeg" />
<Url sourceURL="frag00101.mpeg" />
<Url sourceURL="frag00102.mpeg" />
<Url sourceURL="frag00103.mpeg" />
<Url sourceURL="frag00104.mpeg" />
<Url sourceURL="frag00105.mpeg" />
</SegmentInfo>
</Group>
</Period>
</MPD>
I am pretty sure the VLC application should never SEGV. Ideally it would give a diagnostic that tells you exactly what it doesn't like, but error checking code is often a low priority.