@astronautlabs/rtp
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

@/rtp

📜 IETF RFC 3550
RTP: A Transport Protocol for Real-Time Applications

📘 Attribution
Based on JRTPLIB by Jori Liesenborgs, originally developed at the Expertise Centre for Digital Media (EDM), a research institute of the Hasselt University

📺 Part of the Astronaut Labs Broadcast Suite
@/is04 | @/rfc8331 | @/rtp | @/scte104 | @/scte35 | @/st2010 | @/st291

Release Quality
This package is ready for production


An RTP implementation in C++ based on JRTPLib. Native bindings for Node.js coming soon.

Installing

You must have cmake available to build this package (even at runtime):

choco install cmake  # windows
apt install cmake    # linux
brew install cmake   # mac

Then, add a dependency to it:

npm install @astronautlabs/rtp

Contributing

We welcome contributions, feel free to raise issues or file pull requests. Make sure to review and abide by the Code of Conduct.

Development

C++ Defines

  • RTP_HAVE_SYS_FILIO: Set if <sys/filio.h> exists.
  • RTP_HAVE_SYS_SOCKIO: Set if <sys/sockio.h> exists.
  • RTP_BIG_ENDIAN: If set, assume big-endian byte ordering.
  • RTP_SOCKLENTYPE_UINT: Indicates that getsockname used an unsigned int as its third parameter.
  • RTP_HAVE_SOCKADDR_LEN: Indicates that struct sockaddr has an sa_len field.
  • RTP_SUPPORT_IPV4MULTICAST: Enables support for IPv4 multicasting.
  • RTP_SUPPORT_THREAD: Enables support for JThread.
  • RTP_SUPPORT_SDESPRIV: Enables support for RTCP SDES private items.
  • RTP_SUPPORT_PROBATION: If set, a few consecutive RTP packets are needed to validate a member.
  • RTP_SUPPORT_GETLOGINR: If set, the library will use getlogin_r instead of getlogin.
  • RTP_SUPPORT_IPV6: If set, IPv6 support is enabled.
  • RTP_SUPPORT_IPV6MULTICAST: If set, IPv6 multicasting support is enabled.
  • RTP_SUPPORT_SENDAPP: If set, sending of RTCP app packets is enabled.
  • RTP_SUPPORT_MEMORYMANAGEMENT: If set, the memory management system is enabled.
  • RTP_SUPPORT_RTCPUNKNOWN: If set, sending of unknown RTCP packets is enabled.
  • RTPDEBUG: Enables some memory tracking functions and some debug routines.

Cross-compilation of JThread & JRTPLIB for Android

Warning: When cross-compiling, the configuration defaults to big-endian. But since most Android systems are little-endian, you should probably change this setting in the CMake configuration.

The approach I follow for cross-compiling these libraries for the Android platform is sketched below. The following lines are stored in a file called toolchain.cmake (for example):

set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 21) # API level
set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a)
set(CMAKE_ANDROID_NDK /path/to/ndk-bundle/)
set(CMAKE_ANDROID_STL_TYPE gnustl_static)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

When starting CMake, first for JThread and afterwards for JRTPLIB, I then manually add the following entries:

CMAKE_TOOLCHAIN_FILE /path/to/toolchain.cmake
CMAKE_INSTALL_PREFIX /path/to/installation/directory
CMAKE_FIND_ROOT_PATH /path/to/installation/directory

For example, I like to use the ccmake program, which would yield the following command line:

ccmake -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchain.cmake \
       -DCMAKE_INSTALL_PREFIX=/path/to/installation/directory \
       -DCMAKE_FIND_ROOT_PATH=/path/to/installation/directory \
       /path/to/main/CMakeLists.txt

After configuring JThread this way, just build and install it. The same CMake procedure for JRTPLIB should then automatically detect the correct JThread (so the one that's installed in your cross-compilation installation directory), after which you can again build and install the RTP library.

Readme

Keywords

Package Sidebar

Install

npm i @astronautlabs/rtp

Weekly Downloads

0

Version

1.0.1

License

MIT

Unpacked Size

1.23 MB

Total Files

180

Last publish

Collaborators

  • rezonant