Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
60538758
Commit
60538758
authored
Jul 29, 2013
by
Luca Barbato
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavf: Support unix sockets
parent
bc54c2ae
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
182 additions
and
0 deletions
+182
-0
configure
configure
+4
-0
protocols.texi
doc/protocols.texi
+20
-0
Makefile
libavformat/Makefile
+1
-0
allformats.c
libavformat/allformats.c
+1
-0
unix.c
libavformat/unix.c
+156
-0
No files found.
configure
View file @
60538758
...
...
@@ -1354,6 +1354,7 @@ HAVE_LIST="
sys_select_h
sys_soundcard_h
sys_time_h
sys_un_h
sys_videoio_h
threads
unistd_h
...
...
@@ -1874,6 +1875,8 @@ tcp_protocol_select="network"
tls_protocol_deps_any
=
"openssl gnutls"
tls_protocol_select
=
"tcp_protocol"
udp_protocol_select
=
"network"
unix_protocol_deps
=
"sys_un_h"
unix_protocol_select
=
"network"
# filters
blackframe_filter_deps
=
"gpl"
...
...
@@ -3657,6 +3660,7 @@ check_header sys/param.h
check_header sys/resource.h
check_header sys/select.h
check_header sys/time.h
check_header sys/un.h
check_header unistd.h
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
...
...
doc/protocols.texi
View file @
60538758
...
...
@@ -626,4 +626,24 @@ To receive over UDP from a remote endpoint:
avconv -i udp://[@var{multicast-address}]:@var{port}
@end example
@section unix
Unix local socket
The required syntax for a Unix socket URL is:
@example
unix://@var{filepath}
@end example
The following parameters can be set via command line options
(or in code via @code{AVOption}s):
@table @option
@item timeout
Timeout in ms.
@item listen
Create the Unix socket in listening mode.
@end table
@c man end PROTOCOLS
libavformat/Makefile
View file @
60538758
...
...
@@ -376,6 +376,7 @@ OBJS-$(CONFIG_SRTP_PROTOCOL) += srtpproto.o srtp.o
OBJS-$(CONFIG_TCP_PROTOCOL)
+=
tcp.o
OBJS-$(CONFIG_TLS_PROTOCOL)
+=
tls.o
OBJS-$(CONFIG_UDP_PROTOCOL)
+=
udp.o
OBJS-$(CONFIG_UNIX_PROTOCOL)
+=
unix.o
SKIPHEADERS-$(CONFIG_FFRTMPCRYPT_PROTOCOL)
+=
rtmpdh.h
SKIPHEADERS-$(CONFIG_NETWORK)
+=
network.h
rtsp.h
...
...
libavformat/allformats.c
View file @
60538758
...
...
@@ -281,6 +281,7 @@ void av_register_all(void)
REGISTER_PROTOCOL
(
TCP
,
tcp
);
REGISTER_PROTOCOL
(
TLS
,
tls
);
REGISTER_PROTOCOL
(
UDP
,
udp
);
REGISTER_PROTOCOL
(
UNIX
,
unix
);
/* external libraries */
REGISTER_PROTOCOL
(
LIBRTMP
,
librtmp
);
...
...
libavformat/unix.c
0 → 100644
View file @
60538758
/*
* Unix socket protocol
* Copyright (c) 2013 Luca Barbato
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
*
* Unix socket url_protocol
*
*/
#include <sys/un.h>
#include "libavutil/avstring.h"
#include "libavutil/opt.h"
#include "os_support.h"
#include "network.h"
#include "url.h"
typedef
struct
UnixContext
{
const
AVClass
*
class
;
struct
sockaddr_un
addr
;
int
timeout
;
int
listen
;
int
type
;
int
fd
;
}
UnixContext
;
#define OFFSET(x) offsetof(UnixContext, x)
#define ED AV_OPT_FLAG_DECODING_PARAM|AV_OPT_FLAG_ENCODING_PARAM
static
const
AVOption
unix_options
[]
=
{
{
"listen"
,
"Open socket for listening"
,
OFFSET
(
listen
),
AV_OPT_TYPE_INT
,
{
.
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
}
};
static
const
AVClass
unix_class
=
{
.
class_name
=
"unix"
,
.
item_name
=
av_default_item_name
,
.
option
=
unix_options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
static
int
unix_open
(
URLContext
*
h
,
const
char
*
filename
,
int
flags
)
{
UnixContext
*
s
=
h
->
priv_data
;
int
fd
,
ret
;
av_strstart
(
filename
,
"unix:"
,
&
filename
);
s
->
addr
.
sun_family
=
AF_UNIX
;
av_strlcpy
(
s
->
addr
.
sun_path
,
filename
,
sizeof
(
s
->
addr
.
sun_path
));
if
((
fd
=
socket
(
AF_UNIX
,
s
->
type
,
0
))
<
0
)
return
ff_neterrno
();
if
(
s
->
listen
)
{
fd
=
ff_listen_bind
(
fd
,
(
struct
sockaddr
*
)
&
s
->
addr
,
sizeof
(
s
->
addr
),
s
->
timeout
,
h
);
if
(
fd
<
0
)
{
ret
=
fd
;
goto
fail
;
}
}
else
{
ret
=
ff_listen_connect
(
fd
,
(
struct
sockaddr
*
)
&
s
->
addr
,
sizeof
(
s
->
addr
),
s
->
timeout
,
h
);
if
(
ret
<
0
)
goto
fail
;
}
s
->
fd
=
fd
;
return
0
;
fail:
if
(
s
->
listen
&&
ret
!=
EADDRINUSE
)
unlink
(
s
->
addr
.
sun_path
);
if
(
fd
>=
0
)
closesocket
(
fd
);
return
ret
;
}
static
int
unix_read
(
URLContext
*
h
,
uint8_t
*
buf
,
int
size
)
{
UnixContext
*
s
=
h
->
priv_data
;
int
ret
;
if
(
!
(
h
->
flags
&
AVIO_FLAG_NONBLOCK
))
{
ret
=
ff_network_wait_fd
(
s
->
fd
,
0
);
if
(
ret
<
0
)
return
ret
;
}
ret
=
recv
(
s
->
fd
,
buf
,
size
,
0
);
return
ret
<
0
?
ff_neterrno
()
:
ret
;
}
static
int
unix_write
(
URLContext
*
h
,
const
uint8_t
*
buf
,
int
size
)
{
UnixContext
*
s
=
h
->
priv_data
;
int
ret
;
if
(
!
(
h
->
flags
&
AVIO_FLAG_NONBLOCK
))
{
ret
=
ff_network_wait_fd
(
s
->
fd
,
1
);
if
(
ret
<
0
)
return
ret
;
}
ret
=
send
(
s
->
fd
,
buf
,
size
,
0
);
return
ret
<
0
?
ff_neterrno
()
:
ret
;
}
static
int
unix_close
(
URLContext
*
h
)
{
UnixContext
*
s
=
h
->
priv_data
;
if
(
s
->
listen
)
unlink
(
s
->
addr
.
sun_path
);
closesocket
(
s
->
fd
);
return
0
;
}
static
int
unix_get_file_handle
(
URLContext
*
h
)
{
UnixContext
*
s
=
h
->
priv_data
;
return
s
->
fd
;
}
URLProtocol
ff_unix_protocol
=
{
.
name
=
"unix"
,
.
url_open
=
unix_open
,
.
url_read
=
unix_read
,
.
url_write
=
unix_write
,
.
url_close
=
unix_close
,
.
url_get_file_handle
=
unix_get_file_handle
,
.
priv_data_size
=
sizeof
(
UnixContext
),
.
priv_data_class
=
&
unix_class
,
.
flags
=
URL_PROTOCOL_FLAG_NETWORK
,
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment