Difference between revisions of "Documentation:Modules/rtp"

From VideoLAN Wiki
Jump to navigation Jump to search
(Create page, marked up/adapted from program output, with shortcuts and defaults from the source code)
 
(→‎Crypto: New section)
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{Module|name=rtp|type=Access|description=Real-Time Protocol ([[RTP]]) input}}
+
{{See also|Documentation:Modules/live555}}
 +
{{Module|name=rtp|type=Access|first_version=0.7.0|description=Real-Time Protocol ([[RTP]]) input|sc=dccp|sc2=rtptcp|sc3=udplite}}
  
Shortcuts to this module include <code>dccp</code>, <code>rtptcp</code> and <code>udplite</code>. The only supported format for <code>rtp-dynamic-pt</code> is <code>[[theora]]</code>.
+
The only supported format for <code>rtp-dynamic-pt</code> is <code>[[theora]]</code>.
  
 +
== SRTP ==
 +
The module supports RTP with encryption ([[SRTP]]) through {{VLCSourceFile|modules/access/rtp/srtp.c|l=srtp.c}} using [https://directory.fsf.org/wiki/Libgcrypt libgcrypt] ([https://www.gnupg.org/documentation/manuals/gcrypt/ gcrypt manual]). There are no sub-modules or other shortcuts (in particular, <kbd>srtp</kbd> will not work).
 +
 +
Hexadecimal strings are base-16 numbers. Each character is one of <kbd>0123456789abcdef</kbd> (case-insensitive).
 +
 +
=== Crypto ===
 +
Functions of interest (defined in {{VLCSourceFile|modules/access/rtp/srtp.c|l=srtp.c}} and {{VLCSourceFile|modules/access/rtp/srtp.h|l=srtp.h}}) lie in {{VLCSourceFile|modules/access/rtp/rtp.c|l=rtp.c}} between:
 +
<syntaxhighlight lang="c">
 +
#ifdef HAVE_SRTP
 +
</syntaxhighlight>
 +
and
 +
<syntaxhighlight lang="c">
 +
#endif
 +
</syntaxhighlight>
 +
 +
In summary:
 +
* SRTP sessions are one-way and re-keyed periodically
 +
* To set or reset the master key and master salt for an SRTP session <code>int srtp_setkey (srtp_session_t *s, const void *key, size_t keylen, const void *salt, size_t saltlen)</code> is called
 +
* The <code>setkey</code> values are currently hard-coded as [[wikipedia:Advanced Encryption Standard|AES]] in [[wikipedia:Block cipher mode of operation#CTR|counter mode]] authenticated with [[wikipedia:HMAC|HMAC]]-[[wikipedia:SHA1|SHA1]]; the salt with [[wikipedia:Pseudorandom function family|PRF]]-AES-CM. There are code comments suggesting this be improved
 +
** [https://shattered.io/ SHA1 is deprecated] but using it here should be passably secure for now
 +
* There are explanations (for hackers) in the form of code comments in the files
 +
 +
== Options ==
 
{{Option
 
{{Option
 
|name=rtcp-port
 
|name=rtcp-port
Line 8: Line 32:
 
|min=0
 
|min=0
 
|max=65535
 
|max=65535
|description=[[RTCP]] packets will be received on this transport protocol port. If zero, [[multiplex]]ed RTP/RTCP is used
+
|description=[[RTCP]] packets will be received on this transport protocol [[port]]. If zero, [[multiplex]]ed RTP/RTCP is used
 
|default=0
 
|default=0
 
}}
 
}}
Line 19: Line 43:
 
|name=srtp-salt
 
|name=srtp-salt
 
|value=string
 
|value=string
|description=[[SRTP|Secure RTP]] requires a (non-secret) master salt value. This must be a 28-character-long hexadecimal string
+
|description=[[SRTP|Secure RTP]] requires a (non-secret) master [[wikipedia:salt (cryptography)|salt]] value. This must be a 28-character-long hexadecimal string
 
}}
 
}}
 
{{Option
 
{{Option

Latest revision as of 05:02, 25 April 2019

Module: rtp
Type Access
First VLC version 0.7.0
Last VLC version -
Operating system(s) all
Description Real-Time Protocol (RTP) input
Shortcut(s) dccp, rtptcp, udplite

The only supported format for rtp-dynamic-pt is theora.

SRTP

The module supports RTP with encryption (SRTP) through srtp.c using libgcrypt (gcrypt manual). There are no sub-modules or other shortcuts (in particular, srtp will not work).

Hexadecimal strings are base-16 numbers. Each character is one of 0123456789abcdef (case-insensitive).

Crypto

Functions of interest (defined in srtp.c and srtp.h) lie in rtp.c between:

#ifdef HAVE_SRTP

and

#endif

In summary:

  • SRTP sessions are one-way and re-keyed periodically
  • To set or reset the master key and master salt for an SRTP session int srtp_setkey (srtp_session_t *s, const void *key, size_t keylen, const void *salt, size_t saltlen) is called
  • The setkey values are currently hard-coded as AES in counter mode authenticated with HMAC-SHA1; the salt with PRF-AES-CM. There are code comments suggesting this be improved
  • There are explanations (for hackers) in the form of code comments in the files

Options

  • rtcp-port <integer [0 .. 65535]> : RTCP packets will be received on this transport protocol port. If zero, multiplexed RTP/RTCP is used default value: 0
  • srtp-key <string> : RTP packets will be authenticated and deciphered with this Secure RTP master shared secret key. This must be a 32-character-long hexadecimal string
  • srtp-salt <string> : Secure RTP requires a (non-secret) master salt value. This must be a 28-character-long hexadecimal string
  • rtp-max-src <integer [1 .. 255]> : How many distinct active RTP sources are allowed at a time default value: 1
  • rtp-timeout <integer> : How long to wait (in seconds) for any packet before a source is expired default value: 5
  • rtp-max-dropout <integer [0 .. 32767]> : RTP packets will be discarded if they are too much ahead (i.e. in the future) by this many packets from the last received packet default value: 3000
  • rtp-max-misorder <integer [0 .. 32767]> : RTP packets will be discarded if they are too far behind (i.e. in the past) by this many packets from the last received packet default value: 100
  • rtp-dynamic-pt <string> : This payload format will be assumed for dynamic payload types (between 96 and 127) if it can't be determined otherwise with out-of-band mappings (SDP) default value: NULL

Source code

This page is part of official VLC media player Documentation (User GuideStreaming HowToHacker GuideModules)
Please read the Documentation Editing Guidelines before you edit the documentation
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.