### Example License Service Container Startup Logs Source: https://docs.axinom.com/services/drm/onboard/onboard-deployment This snippet shows an example output of the License Service container logs, indicating successful startup, configuration overrides, and the service listening on a specific port. ```text docker logs 3bc85e55c Overriding the app's configuration... Done. Overriding the app's logging configuration... Done. Overriding the hosts configuration... Done. Overriding the Nginx configuration... Done. The setup has been successfully completed. 2019-05-21 10:48:12,702 CRIT Supervisor running as root (no user in config file) 2019-05-21 10:48:12,703 INFO Supervisor started with pid 12 2019-05-21 10:48:13,705 INFO spawned: 'nginx' with pid 15 2019-05-21 10:48:13,706 INFO spawned: 'app' with pid 16 [2019-05-21T10:48:14.3959460+00:00] Listening on: http://127.0.0.1:8089 Press Ctrl+C to quit. 2019-05-21 10:48:15,398 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2019-05-21 10:48:15,398 INFO success: app entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) ``` -------------------------------- ### Basic Shell Echo Command Example Source: https://docs.axinom.com/services/drm/onboard/onboard-deployment This snippet demonstrates a simple `echo` command used to print text to the console. It serves as an example of how commands and their output are represented throughout this documentation, indicating the format for command-line instructions. ```Shell echo "Text" ``` -------------------------------- ### Setup FMP4 Muxing Source: https://docs.axinom.com/services/drm/encoders/bitmovin-intro Setup the muxing. For this example, we are only using fmp4 muxing. ```javascript const segmentLength = 4; const segmentNaming = 'seg_%number%.m4s'; const initSegmentName = 'init.mp4'; const fmp4Muxing = await bitmovinApi.encoding.encodings.muxings.fmp4.create(encoding.id, new Fmp4Muxing({ segmentLength: segmentLength, segmentNaming: segmentNaming, initSegmentName: initSegmentName, streams: [new MuxingStream({ streamId: inputStream.id })] }) ); ``` -------------------------------- ### Run Widevine API Application Source: https://docs.axinom.com/services/drm/onboard/onboard-widevine-non-docker These commands start the Widevine API application using `mono`. The `LD_LIBRARY_PATH` is set to the current directory to locate necessary libraries. The first example runs it with the default localhost listener, while the second demonstrates how to specify a custom listening URL and port. ```bash $ sudo su axdrm -c "LD_LIBRARY_PATH=. mono /opt/axdrm/WidevineApi/WidevineApi.exe" ``` ```bash $ sudo su axdrm -c "LD_LIBRARY_PATH=. mono /opt/axdrm/WidevineApi/WidevineApi.exe http://192.168.2.15:8080" ``` -------------------------------- ### Example PlayReady Server Certificate XML Source: https://docs.axinom.com/services/drm/onboard/onboard-deployment Illustrates the structure of a PlayReady Server Certificate XML file, containing certificate data, private key, public key, and curve information. This file is required for PlayReady DRM. ```xml Qblablabla[...]blablablaQpP6xas= 7LX1IrfLsjE6V8CXNGviGSP5U9M3OYKD0PyKqm+igUQ= 2cxfn1WIGXwpL1kCa5t48D64GueK0cf2c+yQQbNqafc= 1 ``` -------------------------------- ### JSON Example for Multi-Media Type Ingest Source: https://docs.axinom.com/services/media/ingest/start-ingest This JSON payload demonstrates a full ingest example for the Media Service, encompassing a Movie and an Episode. It illustrates the structure for defining content metadata, video and image assets, licensing information, and multi-language localizations for different media types within a single ingest file. ```JSON { "name": "Full Ingest Example", "items": [ { "type": "MOVIE", "external_id": "avatar", "data": { "title": "Avatar", "original_title": "James Cameron's Avatar", "description": "Avatar is a 2009 American epic science fiction film...", "synopsis": "In 2154, humans have depleted Earth's natural resources...", "released": "2009-12-10", "studio": "20th Century Fox", "tags": ["3D", "SciFi", "Highlight"], "cast": ["Sam Worthington", "Zoe Saldana", "Sigourney Weaver"], "production_countries": [ "United States of America", "Estonia", "Germany", "COL", "ESP" ], "genres": ["Sci-Fi", "Drama"], "licenses": [ { "start": "2020-08-01T00:00:00.000+00:00", "end": "2020-08-30T23:59:59.999+00:00", "countries": ["AW", "AT", "FI"] } ], "main_video": { "source": "example_videos/videos/avatar", "profile": "DEFAULT" }, "trailers": [ { "source": "example_videos/trailers/avatar_1", "profile": "DEFAULT" }, { "source": "example_videos/trailers/avatar_2", "profile": "DEFAULT" } ], "images": [ { "path": "example_images/covers/avatar_1.jpg", "type": "COVER" }, { "path": "example_images/teasers/avatar_1.jpg", "type": "TEASER" } ], "localizations": [ { "language_tag": "de-DE", "title": "Avatar – Aufbruch nach Pandora", "description": "Avatar ist ein US-amerikanischer Science-Fiction-Epos aus dem Jahr 2009...", "synopsis": "Im Jahr 2154 haben die Menschen die natürlichen Ressourcen der Erde erschöpft..." }, { "language_tag": "et-EE", "title": "Avatar", "description": "Avatar on 2009. aasta Ameerika eepiline ulmefilm...", "synopsis": "Aastal 2154 on inimesed ammendanud Maa loodusvarad..." } ] } }, { "type": "EPISODE", "external_id": "mandalorian_s2_e1", "data": { "index": 1, "parent_external_id": "mandalorian_s2", "title": "The Marshal", "original_title": "Chapter 9: The Marshal", "description": "After the stories of Jango and Boba Fett, another warrior emerges in the Star Wars universe...", "synopsis": "The Mandalorian is drawn to the Outer Rim in search of others of his kind.", "released": "2020-10-30", "studio": "Lucasfilm", "tags": ["star wars", "mandalorian", "bounty hunter"], "genres": ["Action", "Sci-Fi"], "cast": ["Pedro Pascal", "Carl Weathers", "Gina Carano"], "production_countries": ["USA"], "licenses": [ { "start": "2020-08-01T00:00:00.000+00:00", "end": "2020-08-30T23:59:59.999+00:00", "countries": ["AW", "AT", "FI"] } ], "main_video": { "source": "example_videos/videos/mandalorian_s2_e1", "profile": "DEFAULT" }, "trailers": [ { "source": "example_videos/trailers/mandalorian_s2_e1_t1", "profile": "DEFAULT" }, { "source": "example_videos/trailers/mandalorian_s2_e1_t2", "profile": "DEFAULT" } ], "images": [ { "path": "example_images/covers/mandalorian_s2_e1_t1.jpg", "type": "COVER" }, { "path": "example_images/teasers/mandalorian_s2_e1_t1.jpg", "type": "TEASER" } ], "localizations": [ { "language_tag": "de-DE", "title": "The Mandalorian", "description": "Nach den Geschichten von Jango und Boba Fett taucht ein weiterer Krieger im Star Wars-Universum auf...", "synopsis": "Der Mandalorianer zieht es auf der Suche nach Artgenossen in den Outer Rim." }, { "language_tag": "et-EE", "title": "The Mandalorian" } ] } } ] } ``` -------------------------------- ### Enable Supervisor on Ubuntu 16.04 Source: https://docs.axinom.com/services/drm/onboard/onboard-widevine-non-docker Configures Supervisor to start automatically with the operating system, specifically addressing an issue on Ubuntu 16.04 where it is disabled by default. ```Bash $ sudo systemctl enable supervisor ``` -------------------------------- ### Initialize Messaging Broker with setupMessagingBroker Source: https://docs.axinom.com/platform/packages/mosaic-message-bus This example demonstrates the basic usage of the `setupMessagingBroker` function to initialize the messaging broker. It shows how to register `RascalConfigBuilder` instances for sending and receiving events/commands, and how to pass configuration, application context, and components like a message counter. ```JavaScript // general setup (plus database pools and other setup-related work) const app = express(); const config = getFullConfig(); const counter = initMessagingCounter(getOwnerPgPool(app)); // register all your builders to send or receive events/commands: const builders = [ new RascalConfigBuilder(MediaServiceMessagingSettings.StartIngest, config) .sendCommand() .subscribeForCommand< StartIngestCommand>( (broker: Broker) => new IngestHandler(broker, getLoginPgPool(app), config) ), // ... ]; const broker = await setupMessagingBroker({ app, config, builders, components: { counters: { postgresCounter: counter } }, // ... }); ``` -------------------------------- ### Bootstrap a New Project with Mosaic CLI Source: https://docs.axinom.com/platform/media-template This command initializes a new project based on the Mosaic Media Template. It guides the user through the setup process and creates a new project structure. For more details on this command and its available options, refer to the Mosaic CLI documentation. ```bash npx -p @axinom/mosaic-cli@latest mosaic create ``` -------------------------------- ### Get Axinom Mosaic CLI Command Help Source: https://docs.axinom.com/platform/packages/mosaic-cli Learn how to list all available commands for the `@axinom/mosaic-cli` utility and how to retrieve detailed information, including parameters and examples, for a specific command. ```Shell npx mosaic --help ``` ```Shell npx mosaic --help ``` -------------------------------- ### Ingest Movie with Localizations JSON Example Source: https://docs.axinom.com/services/media/ingest/start-ingest This JSON example demonstrates how to ingest a movie asset including localized titles, descriptions, and synopses for multiple languages (e.g., 'de-DE' and 'et-EE'). It requires the specified locales to be defined in the Localization Service settings. ```JSON { "name": "Movie with Localizations", "items": [ { "type": "MOVIE", "external_id": "avatar_external_id", "data": { "title": "Avatar", "description": "Avatar is a 2009 American epic science fiction film...", "synopsis": "In 2154, humans have depleted Earth's natural resources...", "localizations": [ { "language_tag": "de-DE", "title": "Avatar – Aufbruch nach Pandora", "description": "Avatar ist ein US-amerikanischer Science-Fiction-Epos aus dem Jahr 2009...", "synopsis": "Im Jahr 2154 haben die Menschen die natürlichen Ressourcen der Erde erschöpft..." }, { "language_tag": "et-EE", "title": "Avatar", "description": "Avatar on 2009. aasta Ameerika eepiline ulmefilm...", "synopsis": "Aastal 2154 on inimesed ammendanud Maa loodusvarad..." } ] } } ] } ``` -------------------------------- ### Install Supervisor Source: https://docs.axinom.com/services/drm/onboard/onboard-widevine-non-docker Installs the Supervisor process control system on the operating system using the apt package manager. ```Bash $ sudo apt install supervisor ``` -------------------------------- ### Install Core Software Packages Source: https://docs.axinom.com/services/drm/onboard/onboard-widevine-non-docker This command installs essential software packages including `unzip` for archive extraction, `tzdata` for timezone information, and `mono-complete` for the full Mono runtime and development tools on a Debian-based system. ```bash $ sudo apt -y install unzip tzdata mono-complete ``` -------------------------------- ### Check License Service Container Logs Source: https://docs.axinom.com/services/drm/onboard/onboard-deployment This command displays the logs of a running Docker container, identified by its ID, to verify that the License Service started successfully and is operating as expected. ```bash sudo docker logs {container_id} ``` -------------------------------- ### Complete Shaka Player with Axinom DRM Integration Example Source: https://docs.axinom.com/services/drm/players/shaka A full HTML page demonstrating the end-to-end integration of Shaka Player with Axinom DRM. It includes script and stylesheet imports, video element setup, player initialization, DRM configuration, token passing, and video loading. ```HTML Shaka Player with Axinom DRM ``` -------------------------------- ### Example Format for Axinom Stream Map File Source: https://docs.axinom.com/services/drm/encoders/wowza This plain text snippet illustrates the expected format for the StreamMapFile.txt, which associates video filenames with their unique content key IDs. Each line represents a single entry, allowing manual specification of content key IDs for specific videos. ```Text video1.mp4:20fc67d5-917e-42e8-a391-25115734f9d9 video2.mp4:0c00e59a-3c7d-4896-aca2-bed46fc4e554 video3.mp4:47064333-a1db-4bf8-8a2b-48ff1993f8ea ``` -------------------------------- ### Install Nginx on Debian/Ubuntu Source: https://docs.axinom.com/services/drm/onboard/onboard-widevine-non-docker Command to install the Nginx web server package using the apt package manager on Debian or Ubuntu systems. ```bash $ sudo apt install nginx ``` -------------------------------- ### Examples of Valid Axinom-Compatible FairPlay Key URIs Source: https://docs.axinom.com/services/drm/license-service/fairplay/preparing-fps Illustrates various valid formats for the FairPlay Key URI expected by Axinom DRM, showing cases with and without the 'skd://' prefix and the Key IV. These examples demonstrate the flexibility in specifying the Key URI. ```Text sdk://72ea9ec1-abb4-40d8-b3a9-e0bd1833bd58:0123456789ABCDEF0123456789ABCDEF ``` ```Text sdk://72ea9ec1-abb4-40d8-b3a9-e0bd1833bd58 ``` ```Text 72ea9ec1-abb4-40d8-b3a9-e0bd1833bd58:0123456789ABCDEF0123456789ABCDEF ``` ```Text 72ea9ec1-abb4-40d8-b3a9-e0bd1833bd58 ``` -------------------------------- ### Combined Movie Ingestion JSON Example with Full Metadata Source: https://docs.axinom.com/services/media/ingest/start-ingest This comprehensive JSON example illustrates the ingestion of a movie asset with extensive metadata, including original title, release date, studio, tags, cast, production countries, genres, licenses, main video, trailers, images, and localizations. It combines various aspects of movie relations and metadata into a single structure. ```JSON { "name": "Full Movie", "items": [ { "type": "MOVIE", "external_id": "avatar_external_id", "data": { "title": "Avatar", "original_title": "James Cameron's Avatar", "description": "Avatar is a 2009 American epic science fiction film...", "synopsis": "In 2154, humans have depleted Earth's natural resources...", "released": "2009-12-10", "studio": "20th Century Fox", "tags": ["3D", "SciFi", "Highlight"], "cast": ["Sam Worthington", "Zoe Saldana", "Sigourney Weaver"], "production_countries": [ "United States of America", "Estonia", "Germany", "COL", "ESP" ], "genres": ["Sci-Fi", "Drama"], "licenses": [ { "start": "2020-08-01T00:00:00.000+00:00", "end": "2020-08-30T23:59:59.999+00:00", "countries": ["AW", "AT", "FI"] } ], "main_video": { "source": "test_video", "profile": "DEFAULT" }, "trailers": [ { "source": "trailers/test_video_1", "profile": "DEFAULT" }, { "source": "trailers/test_video_2", "profile": "DEFAULT" } ], "images": [ { "path": "avatar_1.jpg", "type": "COVER" }, { "path": "avatar_2.jpg", "type": "TEASER" } ], "localizations": [ { "language_tag": "de-DE", "title": "Avatar – Aufbruch nach Pandora", "description": "Avatar ist ein US-amerikanischer Science-Fiction-Epos aus dem Jahr 2009...", "synopsis": "Im Jahr 2154 haben die Menschen die natürlichen Ressourcen der Erde erschöpft..." }, { "language_tag": "et-EE", "title": "Avatar", "description": "Avatar on 2009. aasta Ameerika eepiline ulmefilm...", "synopsis": "Aastal 2154 on inimesed ammendanud Maa loodusvarad..." } ] } } ] } ``` -------------------------------- ### Complete HTML example for Radiant Media Player integration Source: https://docs.axinom.com/services/drm/players/radiant A full HTML document demonstrating the integration of Radiant Media Player with Axinom DRM, including script embedding, container setup, and player configuration with media source and DRM settings. ```HTML RMP
``` -------------------------------- ### Open Nginx Main Configuration File Source: https://docs.axinom.com/services/drm/onboard/onboard-widevine-non-docker Command to open the main Nginx configuration file (`nginx.conf`) for editing using the nano text editor. ```bash $ sudo nano /etc/nginx/nginx.conf ```