【问题标题】:What is ffmpeg's UDP protocol?ffmpeg的UDP协议是什么?
【发布时间】:2016-04-17 00:44:06
【问题描述】:

ffmpeg的UDP协议是什么?

这是来自另一个question的示例

ffmpeg -i udp://localhost:1234 -vcodec copy output.mp4
Or try:

ffmpeg -i rtp://localhost:1234 -vcodec copy output.mp4

RTP 和 UDP 流是相似的协议还是 UDP 数据包包含我可以使用 -f segement 选项创建的相同文件?

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:
    ffmpeg 中的

    udp:// 表示它将直接将视频/音频内容(例如 H.264)流式传输/解析到 UDP 网络数据包中/从 UDP 网络数据包中提取,而无需中间协议。

    rtp:// 另一方面,又增加了一层封装,视频/音频内容会被封装成一个RTP包,而RTP包又会被封装成UDP包。

    RTP 更适合媒体流,因为它包含时间戳和序列信息。原始 UDP 数据包缺少该信息,更容易出现乱序和丢包,从而导致视频/音频伪影。

    【讨论】:

    • 对于原始媒体,tcp:// 是比 udp:// 更好的选择,因为它可以确保可靠的有序数据。
    • @AleksandrDubinsky tcp 的延迟比 udp 高,因此不太适合直播。这就是 rtp 存在的原因。
    • @IanB RTP 的存在有多种原因,它与 TCP 执行相同的数据包排序工作。如果没有排序(即使用原始 UDP),如果您通过 Internet 发送并且数据包被重新排序,您将得到乱码视频。 TCP 确实会增加延迟,但它会执行 RTP 执行的关键任务,同时是一个更简单的协议。
    • 我认为默认情况下 ffmpeg 将“检查”传入的流以查看它是什么(RTP?MPEG?)并尝试以这种方式弄清楚......
    【解决方案2】:

    用户数据报协议。

    UDP URL 所需的语法是:

    udp://hostname:port[?options]
    

    options 包含一个 & 分隔的选项列表,格式为 key=val。

    如果系统上启用了线程,则使用循环缓冲区来存储传入的数据,这可以减少由于 UDP 套接字缓冲区溢出而导致的数据丢失。 fifo_size 和 overrun_nonfatal 选项与此缓冲区相关。

    支持的选项列表如下。

    使用 ffmpeg 通过 UDP 流式传输到远程端点:

    ffmpeg -i input -f format udp://hostname:port
    

    使用 ffmpeg 在 UDP 上以 mpegts 格式流式传输,使用 188 个大小的 UDP 数据包,使用大输入缓冲区:

    ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
    

    使用 ffmpeg 通过 UDP 从远程端点接收:

    ffmpeg -i udp://[multicast-address]:port ...
    

    你可以在 man commande 中找到一些提示!

    【讨论】:

    【解决方案3】:

    ffmpeg 可以监听 UDP 端口并从该端口接收数据。 数据可以来自发送封装在 UDP 中的 RTP 数据包的摄像机。 所以把相机想象成一个发送者,他只是将一个端口上的 udp 包发送到一个 ip,ffmpeg 在同一个端口上监听该 ip 并处理相机发送给它的内容 它们只是您的数据的输入,您可以使用 -f 选项,无论输入是来自 udp 端口​​还是来自电影,您都可以这样做

    ffmpeg -i movie.mp4 -c copy -f flv a.flv

    或者做

    ffmpeg -i udp://localhost:1234 -c copy -f flv a.flv 
    

    ,对于 ffmpeg dnt 来说,只是一个输入

    【讨论】:

    • 其实我找到了UDP这样的例子。但我找不到任何描述该协议的参考资料。
    • 是的,它不是为 ffmpeg 设计的。 UDP也是windows操作系统使用的协议,linux,max os等。ffmpeg实用程序只是使用这个协议来发送数据。
    【解决方案4】:

    显然是RTSP,见源码中的libavformat/rtsp.clibavformat/udp.c

    【讨论】:

    • 这是错误的。 RTSP 将包括标题。这是一个协议。使用 UDP 只会发送原始数据,没有任何有用的协议。
    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 2011-08-20
    • 1970-01-01
    • 2017-08-06
    • 2016-05-30
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多