Hydrar's mistserver dev branch
Find a file
Alex Henrie a1fbb9e186 Allow any RTP/AVP payload type to be dynamically assigned
The Bosch FLEXIDOME 4000i camera sets the RTP payload type to 35 for
H264, which causes MistServer to output "FAIL: Payload type 35 not
supported!"

The camera probably uses 35 for H264 because the ATSC standard requires
it. A/153 Part 7 states: [1]

> In addition, for RTP packets that carry AVC video elementary stream,
> the payload_type field in the RTP header shall have value 35.

The camera also sends "a=rtpmap:35 H264/90000" to explicitly map the
value 35 to H264. This is perfectly valid; although payload types 96
through 127 are recommended for dynamic use, the RTP protocol allows any
AVP payload type to be dynamically reassigned. The relevant section of
RFC 3551 states: [2]

> This profile reserves payload type numbers in the range 96-127
> exclusively for dynamic assignment.  Applications SHOULD first use
> values in this range for dynamic payload types.  Those applications
> which need to define more than 32 dynamic payload types MAY bind
> codes below 96, in which case it is RECOMMENDED that unassigned
> payload type numbers be used first.  However, the statically assigned
> payload types are default bindings and MAY be dynamically bound to
> new encodings if needed.  Redefining payload types below 96 may cause
> incorrect operation if an attempt is made to join a session without
> obtaining session description information that defines the dynamic
> payload types.

If the payload type is not recognized, assume that an rtpmap line will
follow that defines it. If in the end there is no rtpmap line, error out
in the same way whether the payload type is between 96 and 127 inclusive
or whether it is outside of that range.

[1] https://prdatsc.wpenginepowered.com/wp-content/uploads/2021/04/A153-Part-7-2012.pdf#page=14
[2] https://datatracker.ietf.org/doc/html/rfc3551#page-6
2024-05-16 16:39:13 +02:00
api Updated bash API with unicode support and better usability 2017-12-06 16:59:27 +01:00
embed Embed: webrtc metadatasocket: fixed race condition if metadata isn't immediately activated 2024-04-25 10:07:42 +02:00
generated Add building via meson, remove outdated options 2022-12-17 03:36:59 +01:00
lib Allow any RTP/AVP payload type to be dynamically assigned 2024-05-16 16:39:13 +02:00
lsp LSP: Edit stream: settings that aren't compatible with the input are now sanitized before submitting 2023-12-14 09:51:39 +01:00
mist Add building via meson, remove outdated options 2022-12-17 03:36:59 +01:00
scripts Updated load testing script 2021-10-19 22:29:40 +02:00
src Fix JPG compile after rebase 2024-05-16 16:19:15 +02:00
subprojects Fix Cygwin compilation: 2024-04-25 12:44:38 +02:00
test Added some HTTP parser unit tests, fixed HTTP support for zero content length, added gcovr file for coverage reports 2023-07-17 18:22:03 +02:00
.gitignore update .gitignore 2023-01-03 20:18:15 +01:00
.mailmap Added mailmap with all contributors. 2013-04-04 00:55:08 +02:00
CMakeLists.txt refactor: capitalize Input classes, rename srt to subrip in source as well 2024-05-16 16:07:49 +02:00
CMakeServHtml.txt Fixed lots of CMake nastiness 2017-01-10 10:12:07 +01:00
COPYING.md Update COPYING and README to markdown versions with new license + help text. 2022-02-12 00:55:15 +01:00
createhooks.sh Changed buildsystem from automake to plain make. 2014-01-04 22:28:09 +01:00
Doxyfile.in Add building via meson, remove outdated options 2022-12-17 03:36:59 +01:00
DoxygenLayout.xml Added API documentation, updated doxygen configuration. 2014-05-02 12:19:54 +02:00
flow_input Fully implemented DTSC pull support 2016-05-05 16:05:12 +02:00
gcovr.cfg Added some HTTP parser unit tests, fixed HTTP support for zero content length, added gcovr file for coverage reports 2023-07-17 18:22:03 +02:00
meson.build Fix Cygwin compilation: 2024-04-25 12:44:38 +02:00
meson_options.txt Fix Cygwin compilation: 2024-04-25 12:44:38 +02:00
mistserver.init Updated init file 2016-06-20 12:37:36 +02:00
mistserver.service Improved systemd service file: added reload command and improved logging integration 2021-10-19 22:29:42 +02:00
README.md Updated README.md with meson compile instructions and new documentation URL 2023-12-20 11:35:13 +01:00
UNLICENSE Update COPYING and README to markdown versions with new license + help text. 2022-02-12 00:55:15 +01:00

MistServer

MistServer is an open source, public domain, full-featured, next-generation streaming media toolkit for OTT (internet streaming), designed to be ideal for developers and system integrators.

For full documentation, see: https://docs.mistserver.org

For support and assistance, please look on our website at: https://mistserver.org

Getting MistServer onto your system

We provide pre-compiled binaries for most common operating systems here: https://mistserver.org/download

Using the "Copy install cmd" button will give you a command you can paste into a terminal to set up MistServer running as root under your system's init daemon (systemd recommended, but not required).

You can also manually install, full instructions can be found in our manual: https://docs.mistserver.org/category/installation

Compile instructions

The recommended build system for compiling MistServer is Meson.

The project makes full use of Meson's support for "wraps" and all dependencies can be automatically fulfilled through this system. If a system-wide library is available (and compatible), that one will be preferred.

The following command will create a subdirectory named build and set it up for compiling MistServer (assuming meson is installed on your system):

meson setup build

The default options should suffice in most cases, but a full list of possible compile options can be found by running meson configure.

Then, to actually build:

cd build
ninja

That should compile MistServer to your build directory, and it can then be ran by running:

./MistController

See the "Usage" chapter below for more details on actually running MistServer. MistServer can be in any directory, as long as all its binaries (that you want/need) are in one directory together. You can (optionally) install system-wide (usually requires you to be root user or using sudo) by running:

ninja install

Usage

MistServer is booted by starting the MistController binary, which then scans the directory it is stored in for further Mist* binaries and runs them to discover what inputs/outputs/processes are available. (Yes, this means you can delete any binary you don't want/need and it will just do what you expect/want.)

Running the controller in a terminal will walk you through a brief first-time setup, and then listen on port 4242 for API connections. Accessing port 4242 from a web browser will bring up a web interface capable of easily running most API commands for human-friendly configuration. If there is no interactive terminal when MistServer is first started, the first-time setup can be completed using the web interface instead.

Full usage instructions and API specifications can be found in the online manual: https://docs.mistserver.org/

Contributing

If you're interested in contributing to MistServer development, please reach out to us through info@mistserver.org. Full contribution guidelines will be made available soon.