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

Ilkka Ollakka ileoo at videolan.org
Mon Aug 19 10:31:51 CEST 2013


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!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: Digital signature
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20130819/ab45925a/attachment.sig>


More information about the vlc-devel mailing list