Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
getroot committed Feb 21, 2025
2 parents ac69bea + fcceee1 commit 4f53111
Show file tree
Hide file tree
Showing 30 changed files with 166 additions and 44 deletions.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/.gitbook/assets/image (1) (1) (1) (1).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/.gitbook/assets/image (1) (1) (1).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/.gitbook/assets/image (1) (1).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/.gitbook/assets/image (1).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (2) (1) (1) (1).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/.gitbook/assets/image (2) (1) (1).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/.gitbook/assets/image (2) (1).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/.gitbook/assets/image (2).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (3) (1) (1).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/.gitbook/assets/image (3) (1).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/.gitbook/assets/image (3).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (4) (2) (1).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/.gitbook/assets/image (4) (2).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/.gitbook/assets/image (4).png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/.gitbook/assets/image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion docs/configuration/ipv6.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ The `IceCandidate` settings for Providers and Publishers are the same.

By setting up as above, OME is ready to use ICE Candidates for IPv6 as well as IPv4. The ICE Candidate generated here can be viewed in the signaling step of the web browser.

<figure><img src="../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>

## 3. Configuration for `<Origin>`

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

The OME Docker Launcher is a tool that simplifies the process of deploying and managing the OvenMediaEngine (OME) application using Docker containers. This tool can be used by developers and system administrators who want to quickly deploy and test the OME application in a Docker environment.

<figure><img src="../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>

The OME Docker Launcher provides a set of commands that allow users to easily manage the OME Docker container. These commands include:

Expand Down
2 changes: 1 addition & 1 deletion docs/live-source/rtmp.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ Also, `<App name>` and `<Stream name>` can be changed and used as desired in the

If you use the default configuration, set the OBS as follows:

![](<../.gitbook/assets/image (2) (1) (1).png>)
![](<../.gitbook/assets/image (2) (1) (1) (1).png>)

You can set the Stream Key to any name you like at any time.

41 changes: 38 additions & 3 deletions docs/live-source/scheduled-channel.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Scheduled Channel that allows you to create a live channel by scheduling pre-recorded files has been added to OvenMediaEngine. Other services or software call this Pre-recorded Live or File Live, but OvenMediaEngine plans to expand the function to organize live channels as a source, so we named it Scheduled Channel.

### Getting Started
## Getting Started

To use this feature, activate Schedule Provider as follows.

Expand All @@ -23,7 +23,7 @@ Root path where media files are located. If you specify a relative path, the dir
`ScheduleFileDir`\
Root path where the schedule file is located. If you specify a relative path, the directory where the config file is located is root.

### Schedule Files
## Schedule Files

Scheduled Channel creates/updates/deletes streams by creating/editing/deleting files with the .sch extension in the ScheduleFileDir path. Schedule files (.sch) use the following XML format. When a `<Stream Name>.sch` file is created in ScheduleFileDir, OvenMediaEngine analyzes the file and creates a Schedule Channel with `<Stream Name>`. If the contents of `<Stream Name>.sch` are changed, the Schedule Channel is updated, and if the file is deleted, the stream is deleted.

Expand Down Expand Up @@ -99,7 +99,42 @@ For 'file' cases, the `start` attribute can be set in milliseconds to indicate w
`duration` indicates the playback time of that item in milliseconds. After the duration ends, it moves to the next item.\
Both 'start' and 'duration' are optional. If not set, `start` defaults to 0, and `duration` defaults to the file's duration; if not specified, the media file will be played until its full duration.

### Application : Persistent Live Channel
## Multiple Audio Track

The Scheduled Channel supports multiple audio tracks. This is automatically applied to the LLHLS Publisher. You can configure the **AudioMap** settings as follows to prepare multiple audio tracks in a Scheduled Channel.

```xml
<?xml version="1.0"?>
<Schedule>
<Stream>
<Name>today</Name>
<BypassTranscoder>false</BypassTranscoder>
<VideoTrack>true</VideoTrack>
<AudioTrack>true</AudioTrack>
<AudioMap>
<Item>
<Name>English</Name>
<Language>en</Language> <!-- Optioanl, RFC 5646 -->
<Characteristics>public.accessibility.describes-video</Characteristics> <!-- Optional -->
</Item>
<Item>
<Name>Korean</Name>
<Language>ko</Language> <!-- Optioanl, RFC 5646 -->
<Characteristics>public.alternate</Characteristics> <!-- Optional -->
</Item>
<Item>
<Name>Japanese</Name>
<Language>ja</Language> <!-- Optioanl, RFC 5646 -->
<Characteristics>public.alternate</Characteristics> <!-- Optional -->
</Item>
</AudioMap>
```

{% hint style="warning" %}
A Scheduled Channel creates streams in advance and copies tracks from files or other streams. Therefore, all source content used in a Scheduled Channel with multiple audio tracks must provide at least the same number of audio tracks. Otherwise, the content will not be scheduled.
{% endhint %}

## Application : Persistent Live Channel

This function is a scheduling channel, but it can be used for applications such as creating a permanent stream as follows.

Expand Down
30 changes: 30 additions & 0 deletions docs/live-source/srt.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,36 @@ Key: <PERCENT_ENCODED_STREAM_ID>

The default streaming profiles work well, and there are more advanced configuration options available if you [edit the streaming.xml settings file](https://airensoft.gitbook.io/ovenmediaengine/v/0.16.4/live-source/srt-beta#blackmagic-web-presenter)

## Multiple Audio Track

The SRT Provider supports multiple audio track inputs. This is automatically applied to the LLHLS Publisher.

If you want to label the input audio tracks, configure them as follows. This affects the player's audio selection UI when playing LLHLS.

```xml
<Application>
<Providers>
<SRT>
<AudioMap>
<Item>
<Name>English</Name>
<Language>en</Language> <!-- Optioanl, RFC 5646 -->
<Characteristics>public.accessibility.describes-video</Characteristics> <!-- Optional -->
</Item>
<Item>
<Name>Korean</Name>
<Language>ko</Language> <!-- Optioanl, RFC 5646 -->
<Characteristics>public.alternate</Characteristics> <!-- Optional -->
</Item>
<Item>
<Name>Japanese</Name>
<Language>ja</Language> <!-- Optioanl, RFC 5646 -->
<Characteristics>public.alternate</Characteristics> <!-- Optional -->
</Item>
</AudioMap>
...
```

## SRT Socket Options

You can configure SRT's socket options of the OvenMediaEngine server using `<Options>`. This is particularly useful when setting the encryption for SRT, and you can specify a passphrase by configuring as follows:
Expand Down
2 changes: 1 addition & 1 deletion docs/origin-edge-clustering.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ If a user requests [http://edge.com/edge\_app/stream](http://edge.com/edge_app/s

## OriginMapStore

<figure><img src=".gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src=".gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>

OriginMapStore is designed to make it easier to support autoscaling within a cluster. All Origin Servers and Edge Servers in the cluster share stream information and origin OVT URLs through Redis. That is, when a stream is created on the Origin server, the Origin server sets the app/stream name and OVT url to access the stream to the Redis server. Edge gets the OVT url corresponding to the app/stream from the Redis server when the user's playback request comes in.

Expand Down
4 changes: 2 additions & 2 deletions docs/quick-start/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ The settings below are recommended for ultra-low latency.&#x20;
| Profile | baseline |
| Tune | zerolatency |

<figure><img src="../.gitbook/assets/image (4) (2).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (4) (2) (1).png" alt=""><figcaption></figcaption></figure>

## Playback

Expand All @@ -107,5 +107,5 @@ Add `ws://Your.Docker.Host.IP:3333/app/stream` to the Playback URL and click the

Add `http://Your.Docker.Host.IP:3333/app/stream/llhls.m3u8` to the Playback URL and click the ADD SOURCE and LOAD PLAYER button to play the live stream with LLHLS.

<figure><img src="../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>

75 changes: 74 additions & 1 deletion docs/streaming/low-latency-hls.md
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,80 @@ The folder to output to. In the OutputPath you can use the macros shown in the t
| ${z} | UTC offset (ex: +0900) |
| ${ISO8601} | Current time in ISO8601 format |

## DRM (beta)
## Multiple Audio Track (Multilingual Audio)

OvenMediaEngine supports Multiple Audio Tracks in LLHLS. When multiple audio signals are input through a Provider, the LLHLS Publisher can utilize them to provide multiple audio tracks.

<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>

By simply sending multiple audio signals through SRT or Scheduled Channel, the LLHLS Publisher can provide multiple audio tracks. For example, to send multiple audio signals via SRT from OBS, you need to select multiple Audio Tracks and configure the Advanced Audio Properties to assign the appropriate audio to each track.

<figure><img src="../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>

<figure><img src="../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>

Since the incoming audio signals do not have labels, you can enhance usability by assigning labels to each audio signal as follows.

### Labeling in SRT Provider

To assign labels to audio signals in the SRT Provider, configure the AudioMap as shown below:

```xml
<Application>
<Providers>
<SRT>
<AudioMap>
<Item>
<Name>English</Name>
<Language>en</Language> <!-- Optioanl, RFC 5646 -->
<Characteristics>public.accessibility.describes-video</Characteristics> <!-- Optional -->
</Item>
<Item>
<Name>Korean</Name>
<Language>ko</Language> <!-- Optioanl, RFC 5646 -->
<Characteristics>public.alternate</Characteristics> <!-- Optional -->
</Item>
<Item>
<Name>Japanese</Name>
<Language>ja</Language> <!-- Optioanl, RFC 5646 -->
<Characteristics>public.alternate</Characteristics> <!-- Optional -->
</Item>
</AudioMap>
...
```

### Labeling in Scheduled Channel

```xml
<?xml version="1.0"?>
<Schedule>
<Stream>
<Name>today</Name>
<BypassTranscoder>false</BypassTranscoder>
<VideoTrack>true</VideoTrack>
<AudioTrack>true</AudioTrack>
<AudioMap>
<Item>
<Name>English</Name>
<Language>en</Language> <!-- Optioanl, RFC 5646 -->
<Characteristics>public.accessibility.describes-video</Characteristics> <!-- Optional -->
</Item>
<Item>
<Name>Korean</Name>
<Language>ko</Language> <!-- Optioanl, RFC 5646 -->
<Characteristics>public.alternate</Characteristics> <!-- Optional -->
</Item>
<Item>
<Name>Japanese</Name>
<Language>ja</Language> <!-- Optioanl, RFC 5646 -->
<Characteristics>public.alternate</Characteristics> <!-- Optional -->
</Item>
</AudioMap>
```



## DRM

OvenMediaEngine supports Widevine and Fairplay in LLHLS with simple setup since version 0.16.0.

Expand Down
6 changes: 3 additions & 3 deletions docs/streaming/srt.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ The SRT URL to be used in the player is structured as follows:
srt://<OME Host>:<SRT Publisher Port>?streamid=<vhost name>/<app name>/<stream name>/<playlist name>
```

SRT Publisher creates a default playlist named `playlist` with the first track from each of the audio tracks, video tracks, and data tracks.
SRT Publisher creates a default playlist named `playlist` with the first track from each of the audio tracks and video tracks, and all data tracks.

For example, to playback the `default/app/stream` stream with the default playlist from OME listening on port `9998` at `192.168.0.160`, use the following SRT URL:

Expand Down Expand Up @@ -155,7 +155,7 @@ Since SRT is packaged in the MPEG-TS, the `EnableTsPackaging` option must be set
</Video>
</Encodes>

<!-- SRT URL: srt://host/app/stream/360p -->
<!-- SRT URL: srt://<host>:<port>?streamid=default/app/stream/360p -->
<Playlist>
<Name>Low</Name>
<FileName>360p</FileName>
Expand All @@ -179,7 +179,7 @@ Since SRT is packaged in the MPEG-TS, the `EnableTsPackaging` option must be set
</Rendition>
</Playlist>

<!-- SRT URL: srt://host/app/stream/1080p -->
<!-- SRT URL: srt://<host>:<port>?streamid=default/app/stream/1080p -->
<Playlist>
<Name>High</Name>
<FileName>1080p</FileName>
Expand Down
4 changes: 2 additions & 2 deletions docs/streaming/webrtc-publishing.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ If you want to change the signaling port, change the value of `<Ports><WebRTC><S

The Signalling protocol is defined in a simple way:

![](<../.gitbook/assets/image (3) (1).png>)
![](<../.gitbook/assets/image (3) (1) (1).png>)

If you want to use a player other than OvenPlayer, you need to develop the signalling protocol as shown above and can integrate OvenMediaEngine.

Expand Down Expand Up @@ -364,7 +364,7 @@ If \* is used as the IP of TcpRelay and IceCandidate, all available candidates a

### WebRTC over TCP with OvenPlayer

WebRTC players can configure the TURN server through the [iceServers ](https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer/urls#a\_single\_ice\_server\_with\_authentication)setting.
WebRTC players can configure the TURN server through the [iceServers ](https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer/urls#a_single_ice_server_with_authentication)setting.

You can play the WebRTC stream over TCP by attaching the query `transport=tcp` to the existing WebRTC play URL as follows.

Expand Down
2 changes: 1 addition & 1 deletion docs/transcoding/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ OvenMediaEngine supports Live Transcoding for Adaptive Bitrate(ABR) streaming an

This document explains how to configure encoding settings, set up playlists.

<figure><img src="../.gitbook/assets/image.png" alt=""><figcaption><p>Transcoding and Adaptive Streaming Architecture</p></figcaption></figure>
<figure><img src="../.gitbook/assets/image (4).png" alt=""><figcaption><p>Transcoding and Adaptive Streaming Architecture</p></figcaption></figure>

### Transcoding

Expand Down
2 changes: 1 addition & 1 deletion docs/transcoding/transcodewebhook.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
\


<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>

## Configuration

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,17 +124,7 @@ namespace cfg
void MakeList() override
{
Register<Optional>("Name", &_name);
Register("FileName", &_file_name, nullptr, // Required
[=]() -> std::shared_ptr<ConfigError> {

if (_file_name.IndexOf("playlist") > 0 || _file_name.IndexOf("chunklist") > 0)
{
return CreateConfigErrorPtr("Playlist's FileName cannot contain 'playlist' or 'chunklist'");
}

return nullptr;
}
);
Register("FileName", &_file_name);
Register<Optional>("Options", &_options);

Register<Optional>({"Rendition", "renditions"}, &_renditions, nullptr,
Expand Down
26 changes: 10 additions & 16 deletions src/projects/publishers/srt/srt_stream.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,16 +68,13 @@ namespace pub

if (playlist != nullptr)
{
// The playlist is already created
logaw("The playlist %s is already created", default_playlist_info->file_name.CStr());
OV_ASSERT2(false);
// The playlist is already created - user has created it manually
return playlist;
}

// Pick the first track of each media type
std::shared_ptr<MediaTrack> first_video_track = nullptr;
std::shared_ptr<MediaTrack> first_audio_track = nullptr;
std::shared_ptr<MediaTrack> first_data_track = nullptr;

for (const auto &[id, track] : GetSupportedTracks(GetTracks()))
{
Expand All @@ -93,10 +90,6 @@ namespace pub
first_audio_track = (first_audio_track == nullptr) ? track : first_audio_track;
break;

case cmn::MediaType::Data:
first_data_track = (first_data_track == nullptr) ? track : first_data_track;
break;

default:
logad("SrtStream - Ignore unsupported media type: %s", GetMediaTypeString(track->GetMediaType()).CStr());
break;
Expand Down Expand Up @@ -262,7 +255,11 @@ namespace pub

for (const auto &[file_name, playlist] : GetPlaylists())
{
bool is_default_playlist = playlist->IsDefault();
if ((playlist->IsDefault() == false) && (playlist->IsTsPackagingEnabled() == false))
{
continue;
}

auto &rendition_list = playlist->GetRenditionList();

auto srt_playlist = GetSrtPlaylistInternal(file_name);
Expand Down Expand Up @@ -335,14 +332,11 @@ namespace pub
}
srt_playlist->AddTracks(audio_tracks);

if (is_default_playlist)
// Add data tracks to the default playlist
for (const auto &[id, track] : data_tracks)
{
// Add data tracks to the default playlist
for (const auto &[id, track] : data_tracks)
{
_srt_playlist_map_by_track_id[track->GetId()].push_back(srt_playlist);
srt_playlist->AddTrack(track);
}
_srt_playlist_map_by_track_id[track->GetId()].push_back(srt_playlist);
srt_playlist->AddTrack(track);
}

first_supported_rendition_found = true;
Expand Down

0 comments on commit 4f53111

Please sign in to comment.