将udp unix套接字作为输入传递给ffmpeg

5fjcxozz  于 4个月前  发布在  Unix
关注(0)|答案(1)|浏览(43)

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

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

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

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


查看ffmpeg网站上的套接字文档,可以应用以下选项:

*timeout:超时,毫秒
*listen:以监听模式创建Unix套接字。

这与声明套接字类型无关。
将unix套接字配置为SOCK_DGRAM是否可能?

axr492tv

axr492tv1#

文档不完整。在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)。

相关问题