添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
玩手机的夕阳  ·  [Solved] datagridview ...·  1 年前    · 
近视的金鱼  ·  html - ...·  2 年前    · 

从FFmpeg传输RTSP需要哪些步骤?

流媒体UDP不是问题,但由于我想流媒体到移动设备上,这些设备可以原生读取RTSP流,我找不到任何设置,告诉我到底需要什么。我需要一个像LIVE555这样的RTSP流媒体服务器,还是只能使用FFmpeg?

我的命令。

ffmpeg -i space.mp4 -vcodec libx264 -tune zerolatency -crf 18 -f rtsp -muxdelay 0.1 rtsp://192.168.1.200:1234

我得到一个输入/输出错误。

我需要一个SDP描述来使用RTSP吗? 如果是的话,我应该把它放在哪里?

1 个评论
ffmpeg本身可以通过RTP流媒体。比UDP好,但你需要在格式上达成一致,这就是为什么RTP通常通过RTSP管理。但ffmpeg ... -f rtp rtp://destination/streamID:54321 ,会向 "目的地 "的54321端口发送一个连续的RTP流。
ffmpeg
video-streaming
rtsp
user1767754
user1767754
发布于 2014-11-19
4 个回答
grzebyk
grzebyk
发布于 2021-07-07
已采纳
0 人赞同

你可以用FFserver用RTSP来串流视频。

只要把控制台的语法改为这样就可以了。

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

创建一个ffserver.config 文件(样本),在那里你声明HTTPPort,RTSPPort 和SDP流。你的配置文件可以是这样的(一些重要的东西可能会丢失)。

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>

有了这样的设置,你就可以用VLC来观看流媒体,比如说通过输入。

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

这里是FFserver的文档。

工作,但ffserver比live555更受欢迎吗?
2016年7月10日,ffserver程序被放弃 -ffmpeg.org/index.html#ffserv
@user1767754 由于ffserver被废止,是否有任何替代品?您是否建议使用Live555?
我已经创建了FFS服务器,并在我的手机上安装了Larix broadcaster移动应用程序。我在其中添加了这样的网址rtsp://<ip to computer>:<port>/fedd1.fm但它没有连接。
你用的是哪个ffmpeg版本,@grzebyk?
Rob van der Leek
Rob van der Leek
发布于 2021-07-07
0 人赞同

顺便说一句,我能够使用simple-rtsp-server和ffmpeg按照这些步骤建立一个本地RTSP服务器用于测试。

  • 用这一行为RTSP服务器创建一个名为rtsp-simple-server.yml 的配置文件。
    protocols: [tcp]
    
  • 将RTSP服务器作为一个Docker容器启动。
    $ docker run --rm -it -v $PWD/rtsp-simple-server.yml:/rtsp-simple-server.yml -p 8554:8554 aler9/rtsp-simple-server
    
  • 使用ffmpeg将一个视频文件(永远循环)流到服务器上。
    $ ffmpeg -re -stream_loop -1 -i test.mp4 -f rtsp -rtsp_transport tcp rtsp://localhost:8554/live.stream
    

    一旦你运行了这个服务器,你就可以使用ffplay来观看流媒体。

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

    请注意,simple-rtsp-server也可以处理UDP流(即TCP),但将服务器作为Docker容器运行会很麻烦。

  • scy
    我完全被震惊了,因为simple-rtsp-server 是多么容易配置,而它又是多么强大。甚至包括一个HLS服务器,不需要额外费用。这东西太棒了,谢谢你的建议!"。
    Ken H
    Ken H
    发布于 2021-07-07
    0 人赞同

    另一个流媒体命令,我有很好的效果,就是把ffmpeg的输出管道到vlc来创建一个流。 如果你没有安装这些,你可以添加它们。

    sudo apt install vlc ffmpeg
    

    在这个例子中,我使用了http的mpeg传输流(ts),而不是rtsp。 我两种都试过了,但http的ts流在我的播放设备上似乎没有故障。

    我使用的是一个视频采集HDMI>USB设备,它在video4linux2驱动上把自己设置为输入。 通过vlc的管道一定是CPU友好的,因为我的老式双核奔腾CPU能够进行实时编码,而且没有丢帧。 在其他一些方法中,我也遇到过音频同步问题,而这种方法总是有完美的音频同步。

    你将不得不为你的设备或文件调整命令。 如果你使用一个文件作为输入,你就不需要那些v4l2和alsa的东西。 下面是ffmpeg|vlc的命令。

    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}'
    

    例如,假设你的服务器电脑IP是192.168.0.10,那么就可以用这个命令播放流媒体。

    ffplay http://192.168.0.10:8554
    vlc http://192.168.0.10:8554
    

    UPDATE: 这里有一个使用VLC进行rtsp的命令,而不是使用rtsp-simple-server。

    ffmpeg -thread_queue_size 1024 -f video4linux2 -input_format mjpeg -video_size 1280x720 -r 30 -i /dev/video0 -f alsa -thread_queue_size 1024 -i plughw:CARD=MS2109,DEV=0 -acodec mp2 -vcodec libx264 -preset ultrafast -crf 20 -s hd720 -vf format=yuv420p -profile:v main -f mpegts -|vlc -I dummy - --sout='#rtp{sdp=rtsp://:8554/} --sout-all --sout-keep'
    

    如果你的电脑ip是192.168.0.10,那么rtsp流就可以通过这个命令播放。

    vlc rtsp://192.168.0.10:8554/