[vlc-devel] [PATCH v2 4/4] access_output: srt: add support stream encryption
Justin Kim
justin.kim at collabora.com
Sat Nov 25 16:27:42 CET 2017
For encrypted transmitting, `passphrase` and `key-length`
properties are added.
Signed-off-by: Justin Kim <justin.kim at collabora.com>
---
modules/access_output/srt.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/modules/access_output/srt.c b/modules/access_output/srt.c
index 1b4fb7b394..0c36c4931e 100644
--- a/modules/access_output/srt.c
+++ b/modules/access_output/srt.c
@@ -47,6 +47,16 @@
/* The default latency is 125
* which uses srt library internally */
#define SRT_DEFAULT_LATENCY 125
+/* Crypto key length in bytes. */
+#define SRT_KEY_LENGTH_TEXT N_("Crypto key length in bytes")
+#define SRT_DEFAULT_KEY_LENGTH 16
+static const int srt_key_lengths[] = {
+ 16, 24, 32,
+};
+
+static const char *const srt_key_length_names[] = {
+ N_("16 bytes"), N_("24 bytes"), N_("32 bytes"),
+};
struct sout_access_out_sys_t
{
@@ -168,6 +178,7 @@ static int Open( vlc_object_t *p_this )
char *psz_dst_addr = NULL;
int i_dst_port;
int stat;
+ char *psz_passphrase = NULL;
struct addrinfo hints = {
.ai_socktype = SOCK_DGRAM,
@@ -193,6 +204,8 @@ static int Open( vlc_object_t *p_this )
p_access->p_sys = p_sys;
+ psz_passphrase = var_InheritString( p_access, "passphrase" );
+
i_dst_port = SRT_DEFAULT_PORT;
char *psz_parser = psz_dst_addr = strdup( p_access->psz_path );
if( !psz_dst_addr )
@@ -244,6 +257,15 @@ static int Open( vlc_object_t *p_this )
/* Set latency */
srt_setsockopt( p_sys->sock, 0, SRTO_TSBPDDELAY, &p_sys->i_latency, sizeof( int ) );
+ if ( psz_passphrase != NULL && psz_passphrase[0] != '\0')
+ {
+ int i_key_length = var_InheritInteger( p_access, "key-length" );
+ srt_setsockopt( p_sys->sock, 0, SRTO_PASSPHRASE,
+ psz_passphrase, strlen( psz_passphrase ) );
+ srt_setsockopt( p_sys->sock, 0, SRTO_PBKEYLEN,
+ &i_key_length, sizeof( int ) );
+ }
+
p_sys->i_poll_id = srt_epoll_create();
if ( p_sys->i_poll_id == -1 )
{
@@ -270,12 +292,15 @@ static int Open( vlc_object_t *p_this )
p_access->pf_write = Write;
p_access->pf_control = Control;
+ free( psz_passphrase );
free( psz_dst_addr );
freeaddrinfo( res );
return VLC_SUCCESS;
failed:
+ free( psz_passphrase );
+
if ( psz_dst_addr != NULL)
free( psz_dst_addr );
@@ -323,6 +348,10 @@ vlc_module_begin()
add_integer( "poll-timeout", SRT_DEFAULT_POLL_TIMEOUT,
N_("Return poll wait after timeout miliseconds (-1 = infinite)"), NULL, true )
add_integer( "latency", SRT_DEFAULT_LATENCY, N_("SRT latency (ms)"), NULL, true )
+ add_password( "passphrase", "", N_("Password for stream encryption"), NULL, false )
+ add_integer( "key-length", SRT_DEFAULT_KEY_LENGTH,
+ SRT_KEY_LENGTH_TEXT, SRT_KEY_LENGTH_TEXT, false )
+ change_integer_list( srt_key_lengths, srt_key_length_names )
set_capability( "sout access", 0 )
add_shortcut( "srt" )
--
2.15.0
More information about the vlc-devel
mailing list