【问题标题】:Passing udp unix socket as input to ffmpeg将 udp unix 套接字作为输入传递给 ffmpeg
【发布时间】:2017-09-11 14:58:59
【问题描述】:

我已经知道 ffmpeg 能够从 unix 套接字接收输入:

ffmpeg -i unix://path-to-socket ...

问题是一旦在我的服务器代码中将套接字类型更改为SOCK_DGRAM 而不是SOCK_STREAM,ffmpeg 就无法接收数据并打印错误:

unix://path-to-socket: Protocol wrong type for socket

查看socket documentation on ffmpeg's site 可以应用以下选项:

  • 超时:超时,以毫秒为单位。
  • listen:在监听模式下创建 Unix 套接字。

这与声明套接字类型无关。

是否可以将 unix 套接字配置为 SOCK_DGRAM

谢谢,

乔伊。

【问题讨论】:

    标签: unix ffmpeg udp


    【解决方案1】:

    文档不完整。在ffmpeg/libavformat/unix.c

    static const AVOption unix_options[] = {
        { "listen",    "Open socket for listening",             OFFSET(listen),  AV_OPT_TYPE_BOOL,  { .i64 = 0 },                    0,       1, ED },
        { "timeout",   "Timeout in ms",                         OFFSET(timeout), AV_OPT_TYPE_INT,   { .i64 = -1 },                  -1, INT_MAX, ED },
        { "type",      "Socket type",                           OFFSET(type),    AV_OPT_TYPE_INT,   { .i64 = SOCK_STREAM },    INT_MIN, INT_MAX, ED, "type" },
        { "stream",    "Stream (reliable stream-oriented)",     0,               AV_OPT_TYPE_CONST, { .i64 = SOCK_STREAM },    INT_MIN, INT_MAX, ED, "type" },
        { "datagram",  "Datagram (unreliable packet-oriented)", 0,               AV_OPT_TYPE_CONST, { .i64 = SOCK_DGRAM },     INT_MIN, INT_MAX, ED, "type" },
        { "seqpacket", "Seqpacket (reliable packet-oriented",   0,               AV_OPT_TYPE_CONST, { .i64 = SOCK_SEQPACKET }, INT_MIN, INT_MAX, ED, "type" },
        { NULL }
    };
    

    它处理stream=1datagram=1seqpacket=1type=#,其中#是所需套接字类型的整数值(SOCK_STREAM=1SOCK_DGRAM=2SOCK_SEQPACKET=5)。

    【讨论】:

    • 非常感谢。您能否详细说明如何在命令行中使用这些选项?
    猜你喜欢
    • 2014-02-13
    • 1970-01-01
    • 2019-12-12
    • 2021-02-22
    • 2019-09-04
    • 2021-11-09
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    相关资源
    最近更新 更多