[FFmpeg-devel] [PATCH] avformat/udp: Add a delay between packets for streaming to clients with short buffer
Michael Niedermayer
michael at niedermayer.cc
Tue Mar 1 19:01:53 CET 2016
On Mon, Feb 29, 2016 at 10:40:02PM +0300, Pavel Nikiforov wrote:
> Hello !
>
> This patch enables background sending of UDP packets with specified delay.
> When sending packets without a delay some devices with small RX buffer
> ( MAG200 STB, for example) will drop tail packets in burst causing
> decoding errors.
>
> It needs to specify "fifo_size" with "packet_gap" .
>
> The output url will looks like udp://xxx:yyy?fifo_size=<output fifo
> size>&packet_gap=<delay in usecs>
>
> Patch attached.
> udp.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 129 insertions(+), 4 deletions(-)
> 80b57f176b5492070b2ed4853472de61b7d9ab7f udp.patch
> libavformat/udp.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 129 insertions(+), 4 deletions(-)
>
> diff --git a/libavformat/udp.c b/libavformat/udp.c
> index ea80e52..ff676f4 100644
> --- a/libavformat/udp.c
> +++ b/libavformat/udp.c
> @@ -92,6 +92,7 @@ typedef struct UDPContext {
> int circular_buffer_size;
> AVFifoBuffer *fifo;
> int circular_buffer_error;
> + int packet_gap; /* delay between transmitted packets */
> #if HAVE_PTHREAD_CANCEL
> pthread_t circular_buffer_thread;
> pthread_mutex_t mutex;
> @@ -112,6 +113,7 @@ typedef struct UDPContext {
> #define E AV_OPT_FLAG_ENCODING_PARAM
> static const AVOption options[] = {
> { "buffer_size", "System data size (in bytes)", OFFSET(buffer_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, .flags = D|E },
> + { "packet_gap", "Delay between packets, in usec", OFFSET(packet_gap), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, .flags = E },
units should be seconds so that SI suffixes like for usecs work
also independant of this patch but supporting to transmit packets
at at their PCR/SCR/transmit time should be interresting
> { "localport", "Local port", OFFSET(local_port), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, D|E },
> { "local_port", "Local port", OFFSET(local_port), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, .flags = D|E },
> { "localaddr", "Local address", OFFSET(localaddr), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = D|E },
> @@ -486,7 +488,7 @@ static int udp_get_file_handle(URLContext *h)
> }
>
> #if HAVE_PTHREAD_CANCEL
> -static void *circular_buffer_task( void *_URLContext)
> +static void *circular_buffer_task_rx( void *_URLContext)
> {
> URLContext *h = _URLContext;
> UDPContext *s = h->priv_data;
renaming things should be in a seperate patch
anyway, real review left to someone who knows th network stuff better
like nicolas
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
He who knows, does not speak. He who speaks, does not know. -- Lao Tsu
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160301/26978555/attachment.sig>
More information about the ffmpeg-devel
mailing list