VLC crash on h264 stream over RTP with packetloss
Hello vlc-devs,
for a demo we stream an avc encoded video sequence over rtp and in the network we introduce packetloss. This packetloss ranges from 0.1% to 1%.
When certain packets get lost vlc crashes. After reviewing the crash dump I noticed, that the error occurs inside libffmpeg.dll. I noticed that in january a bug was fixed in the h264 decoder of ffmpeg to enable decoding of corrupted avc streams. Maybe this could solve the problem?
Some further info:
- vlc 0.8.6a
- both on windows and linux
- I've uploade a file called "avc_over_RTP_with_packetloss.mov" to ftp://streams.videolan.org/incoming
DrMingw produces following backtrace:
vlc.exe caused an Access Violation at location 005f0c27 in module vlc.exe Reading from location 1711d134.
Registers: eax=0000001f ebx=167656e0 ecx=00000016 edx=00000000 esi=1091f2c4 edi=040a7010 eip=005f0c27 esp=0fe8f998 ebp=040a9108 iopl=0 nv up ei pl nz ac pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00200212
Call stack: 005F0C27 vlc.exe:005F0C27 Send switcher.c:475 static int Send( sout_stream_t * p_stream = &{ int i_object_id = , int i_object_type = , const char * psz_object_type = , char * psz_object_name = , char * psz_header = , int i_flags = , vlc_bool_t b_thread = , vlc_thread_t thread_id = , vlc_mutex_t object_lock = { HANDLE mutex = , CRITICAL_SECTION csection = { PCRITICAL_SECTION_DEBUG DebugInfo = , LONG LockCount = , LONG RecursionCount = , HANDLE OwningThread = , HANDLE LockSemaphore = , DWORD SpinCount = }, vlc_object_t * p_this = }, vlc_cond_t object_wait = { int i_waiting_threads = , HANDLE event = , SIGNALOBJECTANDWAIT SignalObjectAndWait = , HANDLE semaphore = , CRITICAL_SECTION csection = { PCRITICAL_SECTION_DEBUG DebugInfo = , LONG LockCount = , LONG RecursionCount = , HANDLE OwningThread = , HANDLE LockSemaphore = , DWORD SpinCount = }, int i_win9x_cv = , vlc_object_t * p_this = }, vlc_bool_t b_error = , vlc_bool_t b_die = , vlc_bool_t b_dead = , vlc_bool_t b_attached = , vlc_bool_t b_force = , vlc_mutex_t var_lock = { HANDLE mutex = , CRITICAL_SECTION csection = { PCRITICAL_SECTION_DEBUG DebugInfo = , LONG LockCount = , LONG RecursionCount = , HANDLE OwningThread = , HANDLE LockSemaphore = , DWORD SpinCount = }, vlc_object_t * p_this = }, int i_vars = , variable_t * p_vars = , libvlc_t * p_libvlc = , vlc_t * p_vlc = , int i_refcount = , vlc_object_t * p_parent = , vlc_object_t * * pp_children = , int i_children = , void * p_private = , int be_sure_to_add_VLC_COMMON_MEMBERS_to_struct = , module_t * p_module = , sout_instance_t * p_sout = , char * psz_name = , sout_cfg_t * p_cfg = , char * psz_next = , spu_t * p_spu = , sout_stream_id_t * ()(void) * pf_add = , int ()(void) * pf_del = , int ()(void) * pf_send = , sout_stream_sys_t * p_sys = }, sout_stream_id_t * id = &(indirect), block_t * p_buffer = &{ block_t * p_next = , block_t * p_prev = , uint32_t i_flags = , mtime_t i_pts = , mtime_t i_dts = , mtime_t i_length = , int i_samples = , int i_rate = , int i_buffer = , uint8_t * p_buffer = , void ()(void) * pf_release = , vlc_object_t * p_manager = , block_sys_t * p_sys = } )
...
{
block_Release( p_buffer );
return VLC_EGENERIC;
}
...
10924043 A6A00F00