Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
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