[Libav-user] Server out stream as RTP

Charles linux2 at orion15.org
Fri Sep 23 21:43:22 EEST 2016


On 09/23/2016 07:04 AM, Simon Brown wrote:
>
> On 23 September 2016 at 09:27, Simon Brown <simon.k.brown at gmail.com <mailto:simon.k.brown at gmail.com>> wrote:
>
>     Hi,
>     I'm trying to serve a transport stream generated by hardware out on as an RTP stream.  Is there an example I can use to help me do

With ffmpeg or writing code to use the libs?
Probably get more ffmpeg help over in ffmpeg-user at ffmpeg.org

>     this?  I've been looking through ffserver.c but that is much more complicated than I need, and seems to be largely aimed at serving
>     files out.
>
>     Cheers,
>     Simon
>
>
> Ok, I've taken a step back.
> If I type:
> ffplay -i tcp://localhost:60010?listen
> in one window, and
> ffmpeg -i INPUT -f mpegts tcp://localhost:60010

Not sure how to send mpegts over TCP, you can RTP on top of TCP but normally mpegts is UDP.

Try something like this:
ffmpeg -i INPUT -c:v copy -listen 1 -f mpegts "udp://227.0.0.1:5000?pkt_size=1316"

ffplay -i udp://227.0.0.1:5000
OR
vlc udp/ts://@227.0.0.1:5000

"-c:v copy" is the no transcode copy video only handling

You will need a multicast route (all multicast)
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
OR single
route add -net 227.0.0.0 netmask 255.255.255.0 dev eth0

This will allow you to connect multiple listeners to the stream.

>
> my video plays.
>
> For my use though, I don't want to wade through ffmpeg.c to find what it's doing, and wanted a much simpler example that isn't transcoding,
> but just transmitting a ready made transport stream.  I found in the examples directory "http_multiclient.c" and thought this would do for
> me, at least as a starting point.
> My problem is that if I start ffplay with "?listen" first, then http_multiclient won't connect, yet if I start http_multiclient first it
> says "Client not accepted" and aborts.
> My http_multiclient command line is:
> ./http_multiclient ts_file tcp://localhost:60010
>
> It seems that http_multiclient is trying to listen on the server socket, but not avio_accept is returning immediately with a "client not
> accepted".  How can I make this work?
>
> Regards,
> Simon

I was not able to get that sample to work, it always core dumped on
ret = ffurl_accept(sc, &cc); in libavformat/aviobuf.c
Prob because of the     av_assert0(!*c); in avio.c since I have a debug build.

If you are trying to write code to do this, start with transcoding.c
In the main while loop, just use the "else"
         } else {
             /* remux this frame without reencoding */

That should get you pretty close to what you want...ignore the extra code
open in, open out, while in frame write out frame...

Thanks
cco







More information about the Libav-user mailing list