2017-09-11 1 views
1

Je sais déjà que ffmpeg est en mesure de recevoir les commentaires d'une prise unix:passage unix socket udp comme entrée à FFmpeg

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

Le problème est que le changement une fois le type de socket à SOCK_DGRAM au lieu de SOCK_STREAM dans mon code serveur , ffmpeg ne peut pas recevoir les données et une erreur est imprimé:

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

regardant la socket documentation on ffmpeg's site les options suivantes peuvent être appliquées:

  • timeout: Délai d'attente en ms.
  • écoutez: Créez le socket Unix en mode écoute.

qui ne sont pas pertinentes pour la déclaration du type de socket.

La configuration du socket unix en SOCK_DGRAM est-elle possible?

Merci,

Joey.

Répondre

0

La documentation est incomplète. Dans 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 } 
}; 

il gère stream=1, datagram=1, seqpacket=1 ou type=## est la valeur entière de type socket souhaité (SOCK_STREAM=1, SOCK_DGRAM=2, SOCK_SEQPACKET=5).

+1

Merci beaucoup. Pourriez-vous développer sur la façon d'utiliser ces options sur la ligne de commande? – Joey