[vlc-devel] [PATCH] VLC unable to play HLS live stream

Avishay Spitzer savishay at gmail.com
Tue Aug 20 09:03:49 CEST 2013


I hope I understood what you meant. Let me know if it's still not ok.

Avishay


On Mon, Aug 19, 2013 at 4:31 AM, Ilkka Ollakka <ileoo at videolan.org> wrote:

>
> Thanks for your patch, if you could clean up the indentation and remove
> tabs.
>
> On Mon, Aug 19, 2013 at 03:11:41AM -0400, Avishay Spitzer wrote:
> > From e4c56f0bec62e679d8c0d2364cac8f7da7cbcbaa Mon Sep 17 00:00:00 2001
> > From: Avishay Spitzer <savishay at gmail.com>
> > +    while (length == 0)
> > +    {
> > +     // In case an error occurred or the stream was closed return 0
> > +        if (p_sys->b_error || !vlc_object_alive(s))
> > +            return 0;
>
> > +        // Lock the mutex before trying to read to avoid a race
> condition with the download thread
> > +        vlc_mutex_lock(&p_sys->read.lock_wait);
> > +
> > +             /* NOTE: buffer might be NULL if caller wants to skip data
> */
> > +             length = hls_Read(s, (uint8_t*) buffer, i_read);
> > +
> > +             // An error has occurred in hls_Read
> > +             if (length < 0)
> > +             {
> > +             vlc_mutex_unlock(&p_sys->read.lock_wait);
> > +
> > +                     return 0;
> > +             }
> > +
> > +             // There is no data available yet for the demuxer so we
> need to wait until reload and
> > +             // download operation are over.
> > +             // Download thread will signal once download is finished.
> > +             // A timed wait is used to avoid deadlock in case data
> never arrives since the thread
> > +             // running this read operation is also responsible for
> closing the stream
> > +             if (length == 0)
> > +             {
> > +                 mtime_t start = mdate();
> > +
> > +                 // Wait for 10 seconds
> > +                 mtime_t timeout_limit = start + (10 *
> UINT64_C(1000000));
> > +
> > +             int res = vlc_cond_timedwait(&p_sys->read.wait,
> &p_sys->read.lock_wait, timeout_limit);
> > +
> > +             // Error - reached a timeout of 10 seconds without data
> arriving - kill the stream
> > +             if (res == ETIMEDOUT)
> > +             {
> > +                     msg_Info(s, "timeout limit reached!");
> > +
> > +                     vlc_mutex_unlock(&p_sys->read.lock_wait);
> > +
> > +                     return 0;
> > +             }
> > +             else if (res == EINVAL)
> > +                     return 0; // Error - lock is not locked so we can
> just return
> > +             }
> > +
> > +        vlc_mutex_unlock(&p_sys->read.lock_wait);
> > +    }
>
> --
> Ilkka Ollakka
> Disc space -- the final frontier!
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20130820/304bb45a/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-In-case-of-live-streams-the-reload-thread-did-not-wa.patch
Type: application/octet-stream
Size: 2966 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20130820/304bb45a/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-Bug-fix-HLS-module-does-not-block-until-data-is-avai.patch
Type: application/octet-stream
Size: 5096 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20130820/304bb45a/attachment-0001.obj>


More information about the vlc-devel mailing list