What steps are needed to stream RTSP from FFmpeg?

前端 未结 4 1095
耶瑟儿~
耶瑟儿~ 2020-12-23 18:53

What steps are needed to stream RTSP from FFmpeg?

Streaming UDP is not a problem, but as I want to stream to mobile devices which can natively read RTSP streams, I c

相关标签:
4条回答
  • 2020-12-23 19:08

    Another streaming command I've had good results with is piping the ffmpeg output to vlc to create a stream. If you don't have these installed, you can add them:

    sudo apt install vlc ffmpeg
    

    In the example I use an mpeg transport stream (ts) over http, instead of rtsp. I've tried both, but the http ts stream seems to work glitch-free on my playback devices.

    I'm using a video capture HDMI>USB device that sets itself up on the video4linux2 driver as input. Piping through vlc must be CPU-friendly, because my old dual-core Pentium CPU is able to do the real-time encoding with no dropped frames. I've also had audio-sync issues with some of the other methods, where this method always has perfect audio-sync.

    You will have to adjust the command for your device or file. If you're using a file as input, you won't need all that v4l2 and alsa stuff. Here's the ffmpeg|vlc command:

    ffmpeg -thread_queue_size 1024 -f video4linux2 -input_format mjpeg -i /dev/video0 -r 30 -f alsa -ac 1 -thread_queue_size 1024 -i hw:1,0 -acodec aac -vcodec libx264 -preset ultrafast -crf 18 -s hd720 -vf format=yuv420p -profile:v main -threads 0 -f mpegts -|vlc -I dummy - --sout='#std{access=http,mux=ts,dst=:8554}'
    

    For example, lets say your server PC IP is 192.168.0.10, then the stream can be played by this command:

    ffplay http://192.168.0.10:8554
    #or
    vlc http://192.168.0.10:8554
    
    0 讨论(0)
  • 2020-12-23 19:14

    An alternative that I used instead of FFServer was Red5 Pro, on Ubuntu, I used this line: ffmpeg -f pulse -i default -f video4linux2 -thread_queue_size 64 -framerate 25 -video_size 640x480 -i /dev/video0 -pix_fmt yuv420p -bsf:v h264_mp4toannexb -profile:v baseline -level:v 3.2 -c:v libx264 -x264-params keyint=120:scenecut=0 -c:a aac -b:a 128k -ar 44100 -f rtsp -muxdelay 0.1 rtsp://localhost:8554/live/paul

    0 讨论(0)
  • 2020-12-23 19:22

    FWIW, I was able to setup a local RTSP server for testing purposes using simple-rtsp-server and ffmpeg following these steps:

    1. Create a configuration file for the RTSP server called rtsp-simple-server.yml with this single line:
      protocols: [tcp]
      
    2. Start the RTSP server as a Docker container:
      $ docker run --rm -it -v $PWD/rtsp-simple-server.yml:/rtsp-simple-server.yml -p 8554:8554 aler9/rtsp-simple-server
      
    3. Use ffmpeg to stream a video file (looping forever) to the server:
      $ ffmpeg -re -stream_loop -1 -i test.mp4 -f rtsp -rtsp_transport tcp rtsp://localhost:8554/live.stream
      

    Once you have that running you can use ffplay to view the stream:

    $ ffplay -rtsp_transport tcp rtsp://localhost:8554/live.stream
    

    Note that simple-rtsp-server can also handle UDP streams (i.s.o. TCP) but that's tricky running the server as a Docker container.

    0 讨论(0)
  • 2020-12-23 19:26

    You can use FFserver to stream a video using RTSP.

    Just change console syntax to something like this:

    ffmpeg -i space.mp4 -vcodec libx264 -tune zerolatency -crf 18 http://localhost:1234/feed1.ffm
    

    Create a ffserver.config file (sample) where you declare HTTPPort, RTSPPort and SDP stream. Your config file could look like this (some important stuff might be missing):

    HTTPPort 1234
    RTSPPort 1235
    
    <Feed feed1.ffm>
            File /tmp/feed1.ffm
            FileMaxSize 2M
            ACL allow 127.0.0.1
    </Feed>
    
    <Stream test1.sdp>
        Feed feed1.ffm
        Format rtp
        Noaudio
        VideoCodec libx264
        AVOptionVideo flags +global_header
        AVOptionVideo me_range 16
        AVOptionVideo qdiff 4
        AVOptionVideo qmin 10
        AVOptionVideo qmax 51
        ACL allow 192.168.0.0 192.168.255.255
    </Stream>
    

    With such setup you can watch the stream with i.e. VLC by typing:

    rtsp://192.168.0.xxx:1235/test1.sdp
    

    Here is the FFserver documentation.

    0 讨论(0)
提交回复
热议问题