This fixes partially completed send()
Avoids holding the mutex during send()
fixes race conditions in error handling
removes copied non thread specific blocking code
Fixes deadlocks on closure
Fixes data loss on closure
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit enables sending UDP packets in a background thread with specified delay.
When sending packets without a delay some devices with small RX buffer
( MAG200 STB, for example) will drop tail packets in bursts causing
decoding errors.
To use it 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>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit also disables the async fate test, because it
used internal APIs in a non-kosher way, which no longer
exists.
* commit '2758cdedfb7ac61f8b5e4861f99218b6fd43491d':
lavf: reorganize URLProtocols
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Instead of a linked list constructed at av_register_all(), store them
in a constant array of pointers.
Since no registration is necessary now, this removes some global state
from lavf. This will also allow the urlprotocol layer caller to limit
the available protocols in a simple and flexible way in the following
commits.
* commit '12b14382861fbf19378afcddaa19cd9a949a86a3':
udp: Provide additional information on getaddrinfo failure
Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
Glibc 2.20 onwards generates a deprecation warning for usage of _BSD_SOURCE and _SVID_SOURCE.
The solution from man feature_test_macros is to define both _DEFAULT_SOURCE and the old macros.
This solution is on the lines of the one in commit af1818276e.
Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Add a missing AVClass member, check whether localaddr is null.
(Previously, localaddr was always a local stack buffer, while it
now also can be an avoption string which can be null.)
This fixes crashes when not passing any localaddr parameter, since
66028b7ba.
Signed-off-by: Martin Storsjö <martin@martin.st>
By appending `?dscp=26` to the URL, IP packets will be classified as
AF31 (assured forwarding for multimedia flows with low probability of
loss). On congested network, this allows a user to assign priorities to
flows.
Signed-off-by: Vincent Bernat <vincent@bernat.im>
Use the required socket option SO_BROADCAST to be able to stream to a broadcast
address.
Prior to the patch, trying to stream to a broadcast address was resulting to the
following error:
av_interleaved_write_frame(): Permission denied
The patch has been tested with:
ffmpeg -f v4l2 -framerate 30 -input_format yuyv422 -video_size 640x480 -i /dev/video0 \
-c:v libx264 -profile:v high -preset ultrafast -tune zerolatency -b:v 500k -pix_fmt yuv420p \
-f mpegts udp://192.168.1.255:5004?broadcast=1
I have added an option to let the user explicitly request broadcast in order to avoid
ffmpeg to broadcast unintentionally.
Signed-off-by: Olivier Langlois <olivier@trillion01.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
When joining multicast groups, ffmpeg was using INADDR_ANY as interface address
which leads to enabling the multicast group on the interface with "default gateway".
Often multicast traffic is received over dedicated interface, which scenario ffmpeg was
unable to handle. With this patch, ffmpeg will enable multicast group to the interfaces
configured with address specified in &localaddr= parameter of udp:// URL. To avoid
loacal_addr resolve at udp_close(...) the UDPContext structure was extended with
struct sockaddr_storage local_addr_storage member, which is populated in udp_open(..)
and passed to udp_join_multicast_group() and udp_leave_multicast_group().
Signed-off-by: Stoian Ivanov <s.ivanov@teracomm.bg>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '7d99c92945e4b2d12ed2126365482e1900340da0':
udp: Keep track of include and exclude sources separately
Conflicts:
libavformat/udp.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '3357bccc5cb31795f248cd72dc480025f3075a5b':
udp: Allow specifying multicast include/blocks as host names as well
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This allows us to explicitly fail if the caller tried to set
both inclusions and exclusions at the same time.
Signed-off-by: Martin Storsjö <martin@martin.st>
Previously this only allowed literal IP addresses. When these
are conveyed in a SDP file as in RFC4570, host names are allowed
as well.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '4521645b1aee9e9ad8f5cea7b2392cd5f6ffcd26':
avio: fix pointer type mismatches in avio_enum_protocols()
avserver: use socklen_t where appropriate
udp: use socklen_t where appropriate
network: use HAVE_THREADS instead of local hack
af_channelmap: remove stray enum declaration
buffersink: remove stray semicolon after function definition
Conflicts:
libavformat/avio.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This updated version does not deviate from previous behavior on default value of 'buffer_size'
I skipped porting 'sources', 'block' options for now as they're parsed seriously. So i added TODO remarks.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This patch accepts 'timeout' option for input mode only. As far as i know, UDP output cannot introduce delays.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This happens with for example mplayer.
Fixing it in ffmpeg allows new ffmpeg to be compiled with older mplayer
which would not be possible if the fix was just in mplayer.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>