DistroTV Studio

Getting Started Guide

«

Introduction

Welcome to the DistroTV Studio Getting Started Guide.

DistroTV Studio allows you to build a full-suite linear streaming HLS channel equipped with ad markers and accompanying EPG.

The purpose of this document is to provide a complete, hands-on walkthrough for launching your first FAST channel using the sample content provided.

In this guide, you will learn how to:

By the end of this guide, you will have a functional FAST channel with ad break markers and the foundational knowledge to begin building custom channels with your own media. For advanced configurations and detailed instructions on using your own content, please refer to our comprehensive User Guide.

Prerequisites

Before you begin, you should have:

Setting Up the AWS Environment

Creating an S3 Bucket


Edit Bucket Permissions

[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET", "HEAD" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 } ]

Access Management Setup

Create a New IAM Policy

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::bucket name", "arn:aws:s3:::bucket name/*" ] } ] }

Create a New Role

Create a Global Conf File

The global conf file is a configuration file which helps point the DistroTV Studio AMI to access the correct public S3 directories for files.

It takes 4 required parameters:

Create Global Conf File

https://docs.distro.tv/samples/channel-builder/globals/global_1.conf

[General] s3_meta=s3://bucket name/meta/ s3_output=s3://bucket name/ s3_transcode=s3://bucket name/transcode/ channel_list=myfirstchannel_preramp,myfirstchannel

Create globals Folder

Upload Your Global Conf File

Creating S3 Bucket Directories

Create meta Folder

Create transcode Folder

Create content Folder

Create channels Folder

Create schedule Folder

After this chapter, your S3 bucket should have the following structure:

bucket-name/ ├── content/ (Created in Chapter 5) │ ├── globals/ (Created in Chapter 4) │ └── global_1.conf (Uploaded in Chapter 4) │ ├── meta/ (Created in Chapter 5) │ ├── channels/ (Created in Chapter 5) │ └── schedule/ (Created in Chapter 5) │ └── transcode/ (Created in Chapter 5)

Launch a DistroTV Studio Image

globals=s3://bucket name/globals/global_1.conf

Ingest Content

Create a Metadata File

Create a Preramp Conf File

https://docs.distro.tv/samples/channel-builder/meta/channels/myfirstchannel_preramp.conf

myfirstchannel_preramp: no conf file found on current configuration, added... myfirstchannel_preramp (re)started... cronjob started for myfirstchannel_preramp myfirstchannel_preramp: 2 items sent to render farm...

Launch a DistroTV Studio Transcoder Image

globals=s3://bucket name/globals/global_1.conf

Create Channel Schedule

Download a Schedule File

UTC Time Filename Download Link
00:00:00 – 11:59:59 UTC test_schedule_before12.tsv https://docs.distro.tv/samples/channel-builder/meta/schedule/myfirstchannel/test_schedule_before12.tsv
12:00:00 – 23:59:59 UTC test_schedule_after12.tsv https://docs.distro.tv/samples/channel-builder/meta/schedule/myfirstchannel/test_schedule_after12.tsv

Create myfirstchannel Folder

Upload Your Schedule

Launch Your Channel

https://docs.distro.tv/samples/channel-builder/meta/channels/myfirstchannel.conf

cronjob started processing (pgen) name-of-schedule.tsv generating name-of-schedule.tsv coding name-of-schedule.tsv pcode: completed: /data/onramp/runtime/myfirstchannel/schedule/name-of-schedule.done found tsv files: [‘name-of-schedule.tsv’] cronjob finished in n minutes processing /data/onramp/runtime/myfirstchannel/schedule/name-of-schedule.done- start time: YYYY-MM-DD HH:MM:SS master playlist building complete… (timestamp of when the schedule finished being built) cronjob finished in 0.17 minutes watchdog.py process not found, restarting... v1.m3u8 doesnt exist, restarting... cencoder init... playlist changed: /data/onramp/runtime/myfirstchannel/schedule/name-of-schedule.done- start: YYYY-MM-DD HH:MM:SS / endt: YYYY-MM-DD HH:MM:SS watchdog.py process not found, restarting...

s3://bucket name/meta/epg/myfirstchannel/datetimestamp/

After all chapters, your S3 bucket should have the following structure:

bucket-name/ ├── content/ (Created as per Chapter 5) │ └── test_category_metadata.tsv (Uploaded as per Chapter 7) │ ├── globals/ (Created as per Chapter 4) │ └── global_1.conf (Uploaded as per Chapter 4, referenced by EC2 instances) │ ├── meta/ (Created as per Chapter 5) │ ├── channels/ (Created as per Chapter 5) │ │ ├── myfirstchannel.conf (Uploaded as per Chapter 10) │ │ └── myfirstchannel_preramp.conf (Uploaded as per Chapter 7) │ │ │ ├── epg/ (System generated, implied by Chapter 10) │ │ └── myfirstchannel/ (System generated, implied by Chapter 10) │ │ └── datetimestamp/ (System generated, contains EPG files) │ │ │ └── schedule/ (Created as per Chapter 5) │ └── myfirstchannel/ (Created as per Chapter 9) │ └── test_schedule_xxxx.tsv (Uploaded, name depends on UTC time, as per Chapter 9) │ ├── strm/ (System generated, implied by Chapter 10) │ └── channels/ (System generated, implied by Chapter 10) │ └── myfirstchannel/ (System generated, implied by Chapter 10) │ ├── master.m3u8 (System generated, playback URL target in Chapter 10) │ └── *.ts (Video segment files, system generated) │ ├── transcode/ (Created as per Chapter 5) │ └── new/ (System generated, implied by Chapter 8) │ └── (Video files to be processed by DistroTV Studio Transcoder would appear here) │ └── vid/ (System generated, implied by Chapter 8) └── (Transcoded video output from DistroTV Studio Transcoder would appear here)