igolgi Stream Engine



Getting Started

Stream Engine is a professional video compression transcoder from igolgi who has been making transcoder products for broadcast, cable and internet streaming companies for the past 15 years.  Over 500 companies use igolgi products to serve their customers daily.  Stream Engine is the cloud version of igolgi's iLUX file VoD transcoder which is used primarily for VoD transcoding in large cable TV systems.  Stream Engine has processed millions of video titles and is extremely robust to the varieties of video and audio technologies.

Stream Engine is now the cloud version of this proven technology and igolgi is adding features to it daily to meet the fast paced demands of the industry.   If there is something you would like to see please leave us a comment on the dashboard page.  Our Chicago engineering team will get back to you normally in 2 business days.

To Get Started, Click "Log In" in the upper right hand corner of the home page, or if you have not signed up yet select the "Sign Up" button

image.png

Login with your email address and password or sign up for a free account.

Screenshot from 2024-06-12 14-43-21.png

After you sign in you will be on the dashboard page (yours may look different) the dashboard gives you an overview of the system. 

If you are new, click on documentation, tutorials or jump into the Transcoding page and get started with your first job.  With the trial account you have 14 days of usage and can run 1 minute test files.

new-user-dashboard.png

 

Dashboard

Dashboard is the first page you come to after you login to streamengine, it gives you a starting point to see jobs that you might have run over night depending on your subscription level. 

the main sections are the pages list, in the left hand column.  Days remaining in the banner if you are running in trial mode.  The dashboard section shows the latest jobs that were run.  If you need more information click on the job history page.

image.png

Transcoding

The Transcoding page is where all of the magic happens.  Users can drag and drop files, while power users can link up cloud data storage from (aws, google and oracle clouds), use templates, curl and or API calls to batch their high volume jobs.

Please Note: This page is a dynamic page which changes based on what has been selected, your page may look different.  Choosing cloud resources, separating audio from video, adding multiple audio tracks and using video ladders adds more complexity to this page.  Drag and drop, using temporary storage and video files with embedded audio reduces complexity.

trouble shooting job history with hilights3.png

Transcoding Page Overview

1.) Access other Pages, Home page and Log out

Access any page by clicking on it in the left menu.

2.) Blue Triangle

This page can be very advanced, generally start with the blue triangle pointed down and only expose the options you want to turn on.  Once you get comfortable with this you can use more options by clicking the triangle to the up position.

3.) INPUT LOCATION

Where is the input video file located?  file-upload (default), aws, gcloud, oracle cloud, or any http or https URL.  With file-upload you can drag and drop a video file from your web browser.  As the file is uploading do not close the web browser that you are on.  Open a second browser window if you want to do additional work while you wait for the file to upload. 

To use AWS, google cloud or Oracle cloud see detailed settings in documentation below.

4.) OUTPUT FORMAT

Select output format MP4, TS, DASH, HLS or DASH+HLS.  Separate Audio

5.) COMMON OUTPUT SETTINGS

Save converted file to Igolgi-store or a cloud provider.  Set video codec, h.264 (AVC), h265 (HEVC) or mpeg2. Picture Transform none, deinterlace or detelecine/deinterlace

6.) AUDIO PROFILES

Codec AAC, AC3, MP2; Channels 2 (stereo), 6 (5.1); source stream 1 - 8; Bitrate (kbps) 32 -768; Downmix to Stereo; Dialnorm 0 - 31db and option for up to 3 multiple tracks.

7.) VIDEO PROFILES

Presets or ladders; width x heigh; bitrate; framerate .5x - 2x; and options for up to 5 videos using audio settings above.

8.) Templates  A-Z  Z-A   Save As   Save

When you login for the first time the Default Configuration template should be the current template.  Default Configuration is set up for easy access to drag and drop and convert to help you get started fast.  If you modify the template you can select "Save As" to save it under another name.  Select "Save" if you want to save it under the same name.  If you have a lot of templates you can sort them A-Z or reverse sorting Z-A, this is a toggle so if selected it will stay selected.  The template field is also searchable, just start typing and you will see templates that match the patterns you are typing so you might want to think about names you want to use for your templates. 

 Search templates with "ts" sort A-Z
Search templates with "aws" sort Z-A

 

template search ts A-Z.png

template search aws Z-A.png


9.) CURL COMMAND

Advanced option for power users to submit the job through a command url or curl.

10.) ADVANCED

Insert logo, change audio volume, create tar or tar.gz file instead of single files, video quality good, better or best (only displays when h.264 is selected); IP frame distance; GOP Length; Aspect Ratio and Rotation Options, Passthrough, 4:3, 16:9, Invert Aspect Ratio, Rotate Counterclockwise, Rotate Clockwise, Rotate Counterclockwise & Invert Aspect Ratio, Rotate Clockwise & Invert; Rotation Side Panel Transparency; and Closed Captions

11.) Run Job

Once your job settings are set, click run job to transcode your video


Input Location

Where is the video file that you want to convert? Options: cloud: aws, oracle, google; http(s), or file-upload.  Each option selected will change this section of the form.

transcoding - input w circles.png

1) Clicking on the question mark in the circle will pop up a little more help, although using this manual other documentation or user forums may provide additional help.

input location 1 help.png

2) Click on Supported formats to see what kinds of inputs are supported, please note this list may change.  Theses formats are for input containers and are still subject to codecs we support.

transcoding input supported formats.png

3.) Click on input location dropdown list.  For new users file-upload is the default, after you use stream engine it will remember the last setting.  Please note: selecting a saved template may change this field.  The following options will be explained below.

transcoding input location dropdown without numbers.png

4.) This drop down will show a list of temporary files that have been uploaded, if you have a few of them you can sort them based on the first character of the name in the A-Z or Z-A 

5.) Click on the green arrow if you want o browse for a file to upload.

6.) You can also drag and video files into this box

Input Location - Dropdown list

transcoding input location dropdown with numbers.png


Cloud providers for video input 

If you are using any cloud providers please make sure you save your templates, when you are done configuring them.  All of the fields under the cloud provider are required and will need to be filled in to run properly. Wild cards are not supported at this time, if you want to batch process videos you will need to use scripts either with curl or api.

Please Note: Fields that are required will have a red box around them.  Depending on settings and options you choose different fields may be required.

1.) AWS

AWS - Amazon Web Services one of the oldest and largest cloud providers. AWS offers a free tier and paid tier if you need more resources.  It will require a credit card to signup.  To use with StreamEngine we recommend S3 buckets* (their file system) make sure you have some sort of permissions on your files so that you stay within your budget.   *AWS has many options for file storage that you can use as well.

transcoding input aws with numbers.png

  1. If using Amazon Web Services select AWS in the pull down.  
  2. Use your input file location on AWS starting with S3://   be sure to put the full name of the file with extension. 
  3. Paste your Access Key into the Access Key field.
  4. Paste your Secret Key into the Secret Key field.
  5. Select the Region in the drop down list.

Please Note: Fields that are required will have a red box around them.  Depending on settings and options you choose different fields may be required.  For AWS

2.) Oracle Cloud

Oracle Cloud Infrastructure is provided by Oracle corporation, the makers of the leading database used by corporate America as well as other products.  Oracle cloud is used by StreamEngine for temporary storage.  Oracle cloud has a free tier and limited trial as well.  For use with StreamEngine you will need Oracle File Storage and security to restrict access.

transcoding input location oracle with numbers.png

1.) If using Oracle Cloud Infrastructure (OCI) select oracle in the pull down.  
2.) Use your input file location full path including file extension on oracle starting with oci://
3.) Paste your Access Key into the Access Key field.
4.) Paste your Secret Key into the Secret Key field.
5.) Paste your tenancy ocid into the Tenancy OCID field, it may start with ocid1.tenancy.oc1
6.) Paste your user ocid into the User OCID field, it may start with ocid1.user.oc1
7.) Paste your oci fingerprint into the Fingerprint field, it should have colons (:) inside of it.
8.) Select the Region in the drop down list.
Optional - Save this as a template so it remembers your settings.

3.) Google Cloud

Google Cloud  is provided by Google.  

transcode-input-gcloud-wnumbers-new.png

1.) If using Google Cloud (gcloud) select gcloud in the pull down.  
2.) Use your input file location full path including file extension on gcloud starting with gs://
3.) Paste your secret key into the Secret Key field. 
4.) Paste your project id into the Project Id field, it may start with gcloud
5.) Paste your client email into the Client Email field it may end in gserviceaccount.com
6.) Paste your client id into the Client ID field.
7.) Select the private key id in the Private Key ID field.
Optional - Save this as a template so it remembers your settings.

4.) HTTP(S)

If you want to convert a file on the web that you have permissions to use or if it is a public domain video.  You can use the web video url with StreamEngine to convert the video.   This does not work for YouTube and other videos without file extensions.

transcoding input http with numbers.png
1.) Select http from the drop down list.
2.) Enter the http or https url with the full name of the file including the extension.

5.) File-Upload

The most common is file-upload.  When you click on File-Upload, you'll see a form similar to the one below.  The first time you will see a blank drop down list, after a few conversion you can select files that have been recently uploaded by selecting the drop down menu.  If you want to convert a new file drag and drop it over the green down arrow.  If you click on the green arrow you can browse for the file you want.  If you are on a mobile device or tablet the green arrow is a great option and will even allow you to take a new video from your camera.

input file-upload-newuser-w-5numbers.png

For new users, this is the default for input location and will look like the image above.  Options 2 & 3 do not have any files that were loaded so they can't be picked from the drop down or sorted.

input file-upload-olduser-w-numbers.png

If you have been using the system for a little while it may have a history of files that are in your temporary storage location. In the example above the last file used was a GoPro file and that is the most current file.  If you want to use the file in the drop down list you do not have to do any more.  Or you can select an existing file or upload a new file.  If you have more than one file they can be sorted A-Z or reverse sorted Z-A.  These sorts are based on the first character of the file name only. Files in temporary storage are only available for a limited time.

1.) To upload a file select file-upload from the drop down list.
2.) Existing file list, these files are in your private igolgi temporary storage.  If you want a file already used, you can select it. If you know the file name you can type the first letter to find it faster.
3.) Sort the files in the list.  Sorting is a toggle if its clicked on it will be sorted in that order until reverse search is clicked on.

Sorted A-Z

transcoding-input-location-dropdown-sorted-AZ.png

Sorted Z-A

transcoding-input-location-dropdown-sorted-ZA.png

4.) Click the green arrow to browse for a video file on your local disk or mobile device.

5.) Drag and drop a file from your system into the box and release it here.

transcoding-input-drag-drop-video.png


Output Format

Select the Output Format of the file containers you want to create.  MP4 & TS are a video containers they can contain more than one file, usually a video file and audio file.  StreamEngine allows multiple files within each video container. 

output format with no numbers.png

transcoding onput format with numbers.png

1.) MP4

MP4 (MPEG-4 Part 14) is a digital container format that stores and plays back video and audio content. It's one of the most widely used formats for streaming and playing back videos
online.

2.) TS

Transport Stream file, is a type of digital container format used to store and stream video and audio content. It's a packetized elementary stream (PES) that carries multiple streams of data, including video, audio, and metadata.

DASH, HLS and DASH+HLS

These options will make a bunch of little video files and corresponding audio files, you will be required to select separate audio and should use tar file format which is similar to zip.  If you are on Windows you can download free open source 7-zip program. this allows a standard webserver the ability to stream the video, play it faster with less lag time and allow people playing the videos to quickly jump around or use an index into the video within seconds.   Normal videos still work but they are slower to start and rewind of fastforward until the full video file gets downloaded.  To learn more check out our API section on HTML+DASH+HLS.

3.) MP4+DASH

MP4-DASH (MPEG-4 Dynamic Adaptive Streaming over HTTP) is a digital container format that combines the benefits of MPEG-4 (video and audio encoding) with the adaptive streaming capabilities of DASH (Dynamic Adaptive Streaming over HTTP).

4.) MP4+HLS

MP4+HLS (MPEG-4 + HTTP Live Streaming) is a combination of two popular digital container formats: MPEG-4 for video and audio encoding, and HLS (HTTP Live Streaming) for adaptive streaming over HTTP.


5.) MP4+DASH+HLS

MP4+DASH+HLS (MPEG-4 + Dynamic Adaptive Streaming over HTTP + HTTP Live Streaming) is a combination of three popular digital container formats: MPEG-4 for video and audio encoding, DASH for adaptive streaming over HTTP, and HLS for efficient packaging and segmentation. This format allows for the creation of highly adaptable and efficient streaming experiences.

Separate Audio

image.png

This is set to No by default so the video container will have audio embedded in it, but if you would like to separate audio track from the video and get two separate files select Yes and you will get separated video and audio files.  If you have a lot of videos and audio files you may want to select tar option to bundle all of the files together.  On windows you may need the free 7-zip program to export a tar file. 

Select Yes to separate the video and audio files, you will not be prompted to add audio to the video profiles below.  

Select No to embed audio into the video file container, you will have the option under video profiles to add the audio you want in the source stream location you want.


Common Output Settings

This is where you can specify how your output location, settings and if the picture needs to be transformed.  By default we keep the video in the igolgi-store, which allows you to preview it in a browser (assuming you have the playback codecs) download and save the file.  You can also save your converted video in the cloud using AWS, Oracle or Google Cloud.   You have three different output codecs to use AHC/H.264, mpeg2 or HEVC/H.265.   You also have three choices for Picture Transform, none, deinterlace and deinterlace/detelecine.

transcode-common-output-numbered-1only.png

options 


Temporary Storage (1.)

igolgi-store

Igolgi store is the default setting for Common Output Setting, Cloud Provider.   StreamEngine will save your output files for up to 24 hours giving you time to view, download to save them. 

Cloud Providers (1.)

We are not going to cover cloud settings in great detail because we covered them above.    If you are using different cloud services we would recommend saving a template so you can refer back to them.

transcoding-cos-copy.png

1.) If you are using the same cloud service for input and output you can copy your settings from input to output so you don't have to re-enter your credentials. If you have different clouds for input and output you will not see the copy credentials option.

AWS

transcoding-cos-aws-1-2.png

In the example above aws was used for storage in file input so we can copy our settings without having to re-enter them again.

1.) Select AWS (or the same cloud service you used for file input location).

2.) Select copy credentials to copy settings from the input settings to output setting.

Oracle

transcoding-cos-oracle-numbers.png

The form example above is oracle cloud for file output but since oracle cloud for input was not selected you will not be able to copy oracle settings from input to output and you will need to  enter them in this form.

1.) If using Oracle Cloud Infrastructure (OCI) select oracle in the pull down.  
2.) Paste your Access Key into the Access Key field.
3.) Paste your Secret Key into the Secret Key field.
4.) Paste your tenancy ocid into the Tenancy OCID field, it may start with ocid1.tenancy.oc1
5.) Paste your user ocid into the User OCID field, it may start with ocid1.user.oc1
6.) Paste your oci fingerprint into the Fingerprint field, it should have colons (:) inside of it.
7.) Select the Region in the drop down list.
Optional - Save this as a template so it remembers your settings.

Google Cloud


transcoding-cos-gcloud-numbersv2.png

In the example above gcloud is selected for file input and you could copy credentials from the input to output, but you also have the opportunty to use different cloud accounts on the same cloud provider.  This would be good copying videos from your production house to a vendors cloud account.  In the case above you will need to fill out the information.

1.) If using Google Cloud (gcloud) select gcloud in the pull down.  
2.) Paste your secret key into the Secret Key field. 
3.) Paste your project id into the Project Id field, it may start with gcloud
4.) Paste your client email into the Client Email field it may end in gserviceaccount.com
5.) Paste your client id into the Client ID field.
6.) Select the private key id in the Private Key ID field.
Optional - Save this as a template so it remembers your settings.

Common Output Settings Continued ...

transcode-common-output-numbered-2-3.png

1.) Video Codecs 

transcoding-cos-video-codecs-numbers.png

Video codecs are use to reduce the size and bandwidth of videos.  Raw uncompressed or low compressed videos are great for editing but would be almost impossible to watch on cable and impossible to watch over wireless devices today. Videos need to be compressed. The lower the bandwidth the lower the cost or more people you can support on your hardware.  Lower compressed videos are great for editing but not streaming. Of the three codecs we currently support, hevc / h.265 has the highest compression and lowest bandwidth, h.264 / AVC is good all around widely supported and good compression and low bandwidth.

1.) h.264

H.264 also known as AVC is the default, it is an industry standard video codec for streaming and web based video.  It has a good compression ratio to show high motion, high fidelity audio at low bandwidths.

2.) mpeg2

Is an older standard from the broadcasting industries and is best for live events.  It has a very low latency for linear video but not recommended for nonlinear video applications, indexing and quick search.  For mpeg2 we only support HD jobs, resolution less or equal than 1920x1080. Framerates supported for this codec are:

3.) hevc

Is a newer codec also known as h.265, it may need to be licensed.  It is available on most players, mobile devices and browsers.  It currently allows the best video compression rates.  It does take longer to compress and is slightly rate higher to transcode. 

2.) Picture Transform

transcoding-cos-picture-transform-numbers.png

Picture Transform options are used to convert interlaced or telecined video into progressive video.  

Interlaced video is a technique used in video displays where each frame is divided into two fields: one containing all the odd-numbered lines and the other containing the even-numbered lines. These fields are displayed in rapid succession, with the odd lines shown first, then the even lines, creating the perception of a complete image. This approach effectively doubles the frame rate, making motion appear smoother and reducing flicker, while using the same bandwidth as a non-interlaced signal.

This method was originally developed for analog television to optimize broadcast bandwidth while maintaining image quality. However, in modern digital displays, interlaced video is often converted to progressive scan (where each frame is shown in its entirety) to improve clarity and reduce artifacts, especially for fast-moving content.

1.) none

None is the default setting.   None will not modify the the input video format.  Therefore, if the input video is progressive the output will be progressive,  or if the input is interlaced the output will be interlaced, etc.

2.) deinterlace

This setting will convert interlaced input video into progressive video.  The streamengine algorithm for deinterlacing is an advanced motion compensated, multi-frame solution that minimizes distortions that can occur when deinterlacing. If content is not interlaced streamengine will not perform any conversions.

3.) detelecine/deinterlace

This setting will convert telecine content back to progressive and remove repeated fields.  The streamengine algorithm analyzes the input video first to detect the telecine pattern and find the repeated fields.  In a second pass the algorithm removes those fields.  

In the case that the input video does not have telecine, the algorithm will deinterlace the content.

The input telecine cadence (3:2, 5:4, etc) will be automatically detected (even in the case there are mixed cadences).

The output framerate will be reduced back to the original progressive frame rate.  A typical example is a 29.97 fps input video with 3:2 telecine will be reduced to 24 fps progressive.

The benefits of detelecine your video is that the video sequence will have fewer artifacts, and also will require 20% or fewer bits to encode since repeated fields are removed.

See an example of the streamengine detelecine algorithm here  https://streamengine.igolgi.com/#detelecine

If content is not interlaced or telecined streamengine will not perform any conversions.

Audio Profiles

The first pull down selection is setting the codec for the audio.  AAC is the default.

transcode-audio-profiles-codec-numbers-dialnorm2b.png

Choose a Codec

1.) AAC

AAC or advanced audio coding is the standard for streaming video replacing mp3 format.  For more information see you can visit Wikipedia Advanced Audio Coding (AAC).

2.) AC3 & Dialnorm

AC3 & Dialnorm is the standard codec for Dolby Audio.  If you select AC3 you will need to set a Dialnorm as well.  Dialnorm stands for dialog normalization is a decibel range for changing dialog audio signal between 0 and -31 dB.  If you are not an audio engineer with a target dB range, you can play around with setting starting with 0 dB for no change or visit Dolby.com. Please note that you need to have a license to rebroadcast Dolby content. More information is also available on Wikipedia Dolby Digital AC-3 or Wikipedia dialnorm

3.) MP2

MP2 is a codec used with mpeg and ts video formats which is used by the television and broadcasting industries.

transcode-audio-profiles-channels-numbers-w-downmix.png

Channels and Downmix to Stereo

1.) 2 channels

Two channels are the default for stereo, left and right channel.

2.) 6 channels

Six channels are for surround sound or 5.1 audio (Front: right, center, left; Rear: right, left; and a subwoofer).   This will not

3.) Downmix to Stereo

If your input video is 5.1 audio, you can convert it to 2 channel stereo by selecting 2 channels and setting Downmix to Stereo to Yes.

Note: If your input is 2 channel audio it will not automatically convert your audio to 5.1 channel audio if you set it to 6 channels.  You must remix the audio in an audio or video editor first.   If you have 5.1 audio and set to 2 channels without setting downmix to stereo to Yes, it will put the right channel on the center channel instead.

transcode-audio-profiles-source-stream.png

Source Stream 

Most videos only have one source of audio so 1 is the default.  However, professional videos can have to 8 separate audio tracks that can be at different formats or different languages.  StreamEngine allows professionals the ability to setup different audio profiles - 8 

transcode-audio-profiles-bitrate.png

Bitrate kbps

Bitrates vary from 32 kbps - 768 kbps, depending on audio codec selected this list may be different as some codecs do not have the fidelity of AAC.  MP2 and AE3 have a bitrate range between 64 kbps - 448 kbps. 

Add or delete profiles 

transcode-audio-profiles-add-delete-numbers.png

1.) Click the blue Audio Profile link to add a new audio profile, you can add up to 3 profiles.

2.) Click the garbage can to delete a profile. 


Video Profiles

Depending on options selected above the video profile selection options may vary.

transcode-video-profile-w-numbers.png

1.) Video Defaults

transcode-video-profiles-video-defaults.png

This setting allows you to select presets with defined resolutions.  You can settings if you need to, and if you want to reset them just choose a different option then choose the one you want.

1.)  Video Defaults is the default, you can manually configure your video using the form
2.) Passthrough keeps the incoming video resolution allowing you to add additional features, this is great for changing bandwidth, converting video codec, dash, hls, dash+hls, adding a logo or changing other advanced settings.
3.) PC1 small size, PC2 medium or PC3 or larger size videos for small display screens.
4.) SD1 or SD2 Standard Definition presets, Prior to High Def or HD TV SD was the standard.
5.) HD1 or HD2 High Definition preset, 720 and 1080
6.) 2K standard setting for 1440
7.) 4K standard setting for 4K output 2160

Ladders are presets that allow multiple video outputs. you can always modify these settings and delete profiles you do not need.

8.) SD Ladder - has 3 Standard Definition settings.
9.) HD Ladder - has 5 High Definition settings
10.) 2K Ladder - has 5 settings 2 PC, SD, HD, & 2K
11.) 4K Ladder - has 5 settings 2 PC, SD, HD & 4K

2.) Blue Pencil icon

Click this icon to see a list of common preset sizes you can choose from.  Eight (8) sizes from small screens to 4K. Selecting a larger resolution might require a higher bandwidth to be selected in the Bitrate field, if you need to increase the bitrate you will get a message prompting you to set at least a minimum bitrate speed.

3.) Width

Horizontal resolution of the video.  If the video is being played back in landscape this number is generally larger than height. If the video is being played back in portrait this number is generally smaller than height. 

4.) Height

Vertical resolution of the video.  If the video is being played back in landscape this number is generally smaller than height. If the video is being played back in portrait this number is generally larger than height.

5.) Bitrate in kbps

Bitrate is the video, is the total bandwidth of the video.  In general a higher number will be a higher quality video, but it will use a higher bandwidth than a lower bitrate video.  Higher resolution and action videos usually need a higher bandwidth than lower resolution and less action videos.  Note: audio bitrate is in addition to video bitrate settings.

6.) Framerate

This setting will not adjust the speed of how a video plays it only changes the frame rate. 

7.) Audio Profiles

Each video can have up to 3 audio profiles added to it.  These can be set in the audio profile setting above.  Specify what audio you want to use with the video configured above.   The first audio track is the default.

8.) Add Video Profile

Click on this to add another video profile.  You can have up to five (5) videos per submission.  You can also delete profiles by clicking on the garbage can icon at the end of the line although you must have at least one video profile.

transcode-video-profiles.png

If you selected to separate your audio from the video container you will see a simpler video profile (above) that will only ask settings about the video.

image.png

If you selected to embed the audio profile into each video container then you will have to specify which audio profile to add to which video (above).

video-profile-save-to-cloud.png

If you selected to embed the audio into the video container and use a cloud provider to save your output you will be prompted to give the output location of the video (above).   i.e. on aws s3://igolgi-se-out/filename   if you selected tar as an advanced output option you will nee

Each video profile has a corresponding audio profile (above in the audio profiles section).


Complex Audio and Video Settings 

When you are using multiple audio profiles and generating multiple videos in the UI it might be best to choose the create .tar file option which should zip all of these files together for one download file.  On windows you may need to use free 7-zip to extract the videos.

transcode-complex-audio-video-settings.png

Video Ladders Table

pulldown name

horizontal

vertical

h264 bitrate

hevc bitrate

fps

PC1

416

234

600

400

1x

PC2

640

360

800

500

1x

PC3

640

480

1000

750

1x

SD1

720

480

2000

1500

1x

SD2

960

540

2200

1700

1x

HD1

1280

720

3500

2500

1x

HD2

1920

1080

5500

4000

1x

2K

2560

1440

NA

8500

1x

4K

3840

2160

NA

18000

1x

 

 

 

 

 

 

SD ladder

416

234

600

400

1x

 

640

360

800

500

1x

 

720

480

2000

1500

1x

 

 

 

 

 

 

HD Ladder

416

234

600

400

1x

 

640

360

800

500

1x

 

720

480

2000

1500

1x

 

960

540

2200

1700

1x

 

1280

720

3500

2500

1x

 

1920

1080

5500

4000

1x

 

 

 

 

 

 

2K Ladder

416

234

600

400

1x

 

640

360

800

500

1x

 

720

480

2000

1500

1x

 

960

540

2200

1700

1x

 

1280

720

3500

2500

1x

 

1920

1080

5500

4000

1x

 

2560

1440

NA

8500

1x

 

 

 

 

 

 

4K ladder

416

234

600

400

1x

 

640

360

800

500

1x

 

720

480

2000

1500

1x

 

960

540

2200

1700

1x

 

1280

720

3500

2500

1x

 

1920

1080

5500

4000

1x

 

2560

1440

NA

8500

1x

 

3840

2160

NA

18000

1x

Curl Command

For advanced users we include a curl command option, click on curl command to expand it and click on copy to copy the curl command to a clip board.  Curl can be used in Windows command shell, windows PowerShell or Linux.  Once you configure what you want in the StreamEngine Transcoding page and copy the curl, you can paste it an run it in curl.  With a little scripting skills you can automate curl calls to convert your videos, but it helps to build a few templates on the ui and download them to modify on your windows, mac or linux pc.  We do have some curl examples in the API section of this document.

image.png

Advanced Settings

Click the Advanced drop down

transcode-advanced-num-w-goodbetterbest.png

1.) Logo URL

If you are a professional user and not a trial user you can add your own logo to your videos.  File must be .jpg or .png format, logo will be scaled and put in lower right hand corner.  url needs to be publicly available image, i.e. http://localhost/logo.jpg will not work.

2.) Audio Volume

Decrease volume to 0 or increase volume to 200, default is 100.

3.) Create .tar file

default is no, depending on the number of videos or using external you are creating you might want to bundle your job into one file.  If you are using cloud storage specify the file output name.  i.e. on aws s3://output-directory/videofilename and .tar or .tar.gz should be appended to your videofilename.

Video Coding Options


4.) Video Quality  (Only available if h.264 video codec is selected)

Good, Better, Best.  This allows you to adjust the video quality these changes have subtle differences on most video files.  If you are looking for lower bandwidth choose good if you need the best quality at highest bandwidth choose best.

5.) IP Distance 

Distance between i/P frames 2 is two seconds, faster action videos could be lower and slower action could be longer.

6.) GOP Length

GOP Group of Pictures default is 2   To learn more about setting GOP lengths click here.

7.) Aspect Ratio

Common resolutions and aspect ratios, 8K is currently not supported.

Resolution Common Name Aspect Ratio Pixel Size
SD 480p 4:3 640x480
HD 720p 16:9 1280x720
FHD 1080p 16:9 1920x1080
QHD 1440p or 2K 16:9 2560x1440
UHD 2160p or 4K 16:9 3840x2160
FUHD 4320p or 8K 16:9 7680x4320

transcode-advanced-aspect-ratio-1-8v2.png

1.) Passthrough 

Passthrough is the default it keeps aspect ratio and video orientation the same as the input video.

Changes to aspect ratios should have Video Profile, video settings set to Passthrough (see below) 

image.png

2.) Force 4:3

Force the aspect ratio to 4:3 which is the SD stand definition standard on older TV and CRTs as well as older computer monitors and some smaller displays.  640x480 is 4:3 while HD and higher is generally 16:9 or 1920x1080.  If a video was recorded in 16:9 it may look distorted when resized to 4:3.  If you are processing a lot of videos do a test first.

3.) Force 16:9

Force the aspect ratio to 16:9 which is HD 720p or 1280x720 and higher resolution on newer TV and monitors. If a video was recorded in 4:3 it may look distorted when resized to 16:9.  If you are processing a lot of videos do a test first.

4.) Invert Aspect Ratio

This will switch the aspect ratio from 16:9 to 4:3 or visa versa.

The settings below are usually for video recorded with mobile devices.  Either in portrait or landscape modes.  These settings may be changed in the future. 

5.) Rotate Counterclockwise

Rotate the video 90 degrees counterclockwise.    Holding a phone in portrait mode converting it to landscape mode.  This may make the video upside down, if so use clockwise instead.

6.) Rotate Clockwise

Rotate the video 90 degrees clockwise.  Holding a phone in portrait mode converting it to landscape mode.  This may make the video upside down, if so use counterclockwise instead.

7.) Rotate Counterclockwise & invert Aspect Ratio

Rotate the video 90 degrees counterclockwise and change the aspect ratio.

8.) Rotate Clockwise & Invert Aspect Ratio

Rotate the video 90 degrees clockwise and change the aspect ratio.

8.) Rotation Side Panel Transparency

When converting a portrait video to landscape side panels can be added to show.

9.) Closed captions

No (default) yes if video has closed captions.

Run Job 

Once all of your settings are set click the blue "Run Job" button, if there are any mistakes, a red message will appear above the button and the parts of the form that need to be filled will have a red box around them.  You might want to click the blue triangle at the top of the page to open all dialog boxes if you can't find the missing fields.

run-job.png

After you submit your job, you can disconnect, log out if you want and the project will continue to run unless it has an error.  After you submit a job you might see a brief message below in the lower left hand corner near the igolgi logo.  this lets you know that your job is being transcoded.

job is submitted.png

The first step is transferring your job from the server to the worker which will do the encoding, at this step about 25% of the bar will be used.

run status uploading and finding backend server.png

At this step the worker is transcoding your job, depending on jobs in the queue and size of your video this could be short or take a while.

transcoding-job.png

Once the transcoding is done your job will be transferred to igolgi-store (temporary storage) or a cloud resource if you used one.

3.png

Sometimes your job might seem to hang at 99% this usually with large dash, hls or dash+hls where their are lots of little files that need to be packaged together in a tar file.

Once your job has completed you might see that your job has completed.  It is possible in rare occasions when using tar files you may get a completed before the job has been fully uploaded.  In these cases look to make sure your job has finished and has a finishing time on the job history page. If the job does not have a time stamp it is still copying the tar file to the output location.

job completed.png

Job History

Overview

The job history page will keep track of all of the jobs you have run and the state of the jobs.  Its hard to estimate how long a job will take to run, sometimes they are fast and other times they are slow.  It depends on the size of the video and what needs to be done as well as other jobs in the queue.  Once you submit a job you don't have to stick around, you can disconnect or log off from StreamEngine

image.png

Job Id

This is the front end job id of the job that was run.  If you submit a job with our UI or CURL this is the only Job_Id you need.  If you are a developer using our API there are two Job_Id's one for front end and one for back end and both can be different, you will use the front end Job_ID to access the back end Job_ID.

State

This shows the current state of the job, it may be orange - ongoing, green -success, red - error or gray - abort

Progress

Progress jumps in large segments, initially it copies your video to the server at about 25%, then finds a back end server and moves it to the proper back end server this is about 1/2 done and is being transcoded, then it is about 95% done it copies the finished file to the location specified.

Started

This is the time stamp when you hit the run job button on the transcoding page. 

Finished

This is the time stamp when the job has been copied to the location you specify in on the transcoding page.

Seconds

This is the playing time of the video that was encoded in seconds.  A 90 minute video is  5400 seconds.  We bill on seconds depending on options you choose.  You will not be billed if your job does not run for some reason.

Charge

This shows how much it costs to process the video.  The prices shown may not be the same prices you get charged.  Pricing is subject to change at any time. 

Config 

The config section shows all of the options below:

Errors

If you get an error message you can hover over it to see what it might be and 

image.png

Abort Jobs that get stuck

Job-History-Killing-hung-jobs-num.png

1.) Click Abort to kill jobs that seem stuck.  
If a job is taking too long to finish give it some time but if you are sure its stuck you can click on abort.  Sometimes if a job is hanging for a long period of time you can click on the Contact Us then scroll to the bottom of the page and look at the status of the job.

Contacting Support

image.png

If you need support or have a question click on Contact us.  An email message should popup if email has been configured on your pc.  If you don't have email setup on your computer you can access support by emailing support@igolgi.com send us your job id number and what the issue was.  

job-history-contact-us-email-num.png

1.) If an email message pops up please ask your question here

Job History on Dashboard Page

A subset of the job history can also be seen on the dashboard page.

image.png

Export to CSV

You can download a copy of your job history in csv format by clicking on the CSV field at the bottom of the page.

job-history-export-csv.png

1.) Click Download as CSV 
1.5.) (Not Shown) Click the browser download button to see files downloaded.
2.) Click on the data.csv file to open it up. 

The csv report should look similar to this:

image.png

Documentation

The documentation page will change over time but currently has our api training.  You can jump to any spot by clicking on any of the clickable links below the contents. This is a live document it can change, new things can be added, new videos, new tutorials so you might want to check it frequently.

1.) Quick Search our documentation to find what you are looking for.
2.) Click the section you are interested in
3.) Clicking on a these sections expand to show more pages, in this case Tutorials has 4 pages. 
4.) Click on the igolgi logo to go back to StreamEngine

documentation-page-tutorials-num.png

1.) Clicking on tutorial, opens up the tutorials section.
2.) Click on Videos to see our latest videos.

documentation-page-tutorials-zoom-num.png

1.) Click to play the video.

documentation-page-tutorials-video-num.png


The transcoding page is the largest page and most complicated. 

1.) Click on section of page you are interested in, Transcoding Page Overview is at the top.
2., 3., 4.) Click on the section or subsection you are interested in learning more about.
5.) Search for topics.
6.) Use the browser scroll bar to scroll down the page to the section you want to learn more about.

documentation-page-transcoding-3-blured.png

 

API Keys


If you are a programmer using our API or curl you will need an API key.  Every account gets at least one API key by default.  If you are paying for StreamEngine you should be extra careful about not letting your API keys in the wrong hands.  You can always delete and regenerate API keys when ever you need.   Select and copy the API key and save it for use with your code or curl commands. 

api-key-page-num.png

1.) New Key - click here to get a new API key.
2.) Delete Key - click on the red x to delete the selected API key.

 

If you want to use our API you can visit our API help document.

Please keep in mind after the demo mode you will be responsible for all charges to your account charged to your API key, so keep it safe and regenerate it from time to time. 

If you have any issues please contact our support team.

Billing

1.) Select a plan.

After your trial you can choose from any of our plans.  When you subscribe enter a credit card and will bill you at the end of the month for time used or in increments of $20 which ever is first.  You can cancel at any time and any balance you have used at the time of cancellation will be charged to your credit card.  Secure, credit card processing, billing and payments are handled by industry leader stripe.com. If you have any questions or issues billing please contact us and we will respond within one business day.

2.) Billing - After your first month as a subscriber you will see summaries of your usage and cost on a month to month basis.  You can also get a running total of expenses by downloading a csv file from the Job History page.

billing-page-num.png


API


API

API Documentation


Contents

    Parameters
    Cloud Credentials
    Cloud Credentials Input/Output
    Audio Profiles
    Video Profiles
    Supported Containers and Codecs
    Creating Jobs
    Using the API from within Python
    Retrieving a Sent Job



Parameters

input

or not to use this input. This will be an object key if using a cloud provider, or a regular URL otherwise.

Type Required Default
string Yes  

videoProfiles


An array containing at least one video profile.

Type Required Default
array Yes  

audioProfiles


An array containing zero or more audio profiles.

Type Required Default
array Yes  

output_container


Output container to be used. Supported values are tsmp4hls, and silverlight .

Type Required Default
string No mp4

ts_mode_input_audio_source_stream_count


Audio stream count (in TS mode only).

Type Required Default
number No  

audio_output_path


The cloud location where audio should be stored.

Type Required Default
string No  

bucket_output_path


The location, within a cloud bucket, where the output should be stored in segmented mode.

Type Required Default
string No  

master_variant_mode


Whether or not to use separate audio.

Type Required Default
boolean No false

segmented_output_hls


Whether to use HLS in segmented output.

Type Required Default
boolean No false

segmented_output_dash


Whether to use DASH in segmented output.

Type Required Default
boolean No false

segment_length


The segment length in segmented output.

Type Required Default
number No  

video_codec


Output video encoder. Supported values are h.264mpeg2, and hevc.

Type Required Default
string No h.264

ip_distance


Target I/P frame distance.

Type Required Default
number No  

gop_length


Target GOP length in seconds.

Type Required Default
number No 1

scte35_passthough


Use SCTE35 passthrough?

Type Required Default
boolean No false

scte35_pid_remap


PID Remap.

Type Required Default
number No  

create_tar_file


In segmented output, whether to tar the resulting directory and store it in the same bucket specified by the bucket_output_path parameter. Note that this will take up more space in your bucket.

Type Required Default
boolean No  

audio_volume

Target audio volume (0-200).

Type Required Default
number No 100

h264_quality


Output quality. Accepted values are 'good', 'better', and 'best'. Supported values are goodbetter , and best.

Type Required Default
string No good

video_aspect_ratio


Output video aspect ratio. Supported values are passthroughforce_4:3force_16:9invert_aspect_ratiorotate_counterclockwise , rotate_clockwise, and rotate_counterclockwise + invert_aspect_ratio.

Type Required Default
string No passthrough

rotation_blackness


... .

Type Required Default
number No  

closed_captions


Write CC to output?

Type Required Default
boolean No  

force_progressive


Force progressive?

Type Required Default
boolean No false

keep_fps


Preserve the framerate?

Type Required Default
boolean No true

logo_url


URL to an image file to use as a watermark.

Type Required Default
string No  

cloud_credentials


See Below

Type Required Default
object Yes

Cloud Credentials

input


Type Required Default
object
Yes

output


Type Required Default
object
Yes

Cloud Credentials Input/Output

cloud_provider

The cloud provider to use

Supported values are awsoracle, gcloud, http, file-upload, igolgi-store .

Type Required Default
string Yes oracle

access_key

Account access key.

Type Required Default
string No

secret_key

Account secret key.

Type Required Default
string No

region

The region within which your target bucket is located.

Type Required Default
string No

------

tenancy_ocid


Tenancy OCID (for oracle only)

Type Required Default
string No

user_ocid


User OCID (for oracle only)

Type Required Default
string No  

oci_fingerprint


User Fingerprint (for oracle only)

Type Required Default
string No

project_id


Project ID (for google only)

Type Required Default
string No

client_email


Client email (for google only)

Type Required Default
string No

client_id


Client ID (for google only)

Type Required Default
string No

private_key_id


Private Key ID (for google only)

Type Required Default
string No


Audio Profiles

audio_codec


Audio codec to be used during transcode. Supported values are aac ac3 or mp2.

Type Required Default
string No aac

audio_channels


Number of audio channels on the output. Use 2 for stereo and 6 for 5.1. Supported values are 2 or 6.

Type Required Default
string No 2

audio_bitrate


Output audio bitrate. Supported values are 32, 40, 64, 96, 128, 192, 256, 384, 448 or 768.

Type Required Default
string No 256

primary_audio_downmix_to_stereo


Downmix primary audio from 5.1 to stereo.

Type Required Default
boolean No

source_stream


The index of the source stream. Supported values are 1 , 234567 or 8.

Type Required Default
string No

dolby_digital_dialnorm


The dialnorm. Values range from 0 to 31 inclusive. Use 0 for passthrough.

Type Required Default
number No


Video Profiles

output


The location, including the file name, where the output is to be sent.

Type Required Default
string No

width


The output width in pixels.

Type Required Default
number Yes

height


The output height in pixels

Type Required Default
number Yes

video_bitrate_mode


Output video bitrate mode. Supported values are cbr or vbr.

Type Required Default
string No

video_bitrate


The video bitrate in kbps.

Type Required Default
number Yes

video_framerate


The video framerate. Supported values are 1x, 1/2x or 2x.

Type Required Default
string No 1x

audio_profiles


Type Required Default
string No


Supported Containers and Codecs


Creating Jobs


Using the API from within Python


Retrieving a Sent Job

Job Status: {'job_id': '4765', 'tcode_progress': '100', 'state': 'ready', 'tcode_time': '57.89', 'tcode_speed': '0.0', 'job_completed': True, 'xfer_speed': '337.88', 'xfer_time': '0.67', 'xfer_progress': '100'}

Job Config: {'input': 'https://streamengine.igolgi.com/uploads/659d9ac25dc7bf7b1a7c487a971a98e8', 'videoProfiles': [{'output': 'oci://yzwhip2gci7s/igolgi-public/80d8cc2a_bdab_442b_bc19_21fe00267a34.mp4', 'width': 0, 'height': 0, 'video_bitrate': 6000, 'video_framerate': '1x'}], 'audioProfiles': [{'audio_codec': 'aac', 'audio_channels': 2, 'audio_bitrate': 128, 'primary_audio_downmix_to_stereo': False, 'source_stream': 1}], 'output_container': 'mp4', 'audio_output_path': 'oci://yzwhip2gci7s/igolgi-public/96dbafd7_bf4f_45a8_bd06_627a4684e45b.mp4', 'separate_audio': True, 'segmented_output_hls': False, 'segmented_output_dash': False, 'video_codec': 'hevc', 'ip_distance': 3, 'gop_length': 2, 'scte35_passthough': False, 'scte35_pid_remap': -1, 'create_tar_file': False, 'audio_volume': 100, 'h264_quality': 'good', 'video_aspect_ratio': 'rotate_counterclockwise + invert_aspect_ratio', 'rotation_blackness': 0, 'closed_captions': False, 'picture_transform': 'none', 'logo_url': None}

API

Creating cURL Jobs

Creating Jobs


To create a job, use your API key along with a JSON payload matching the schema described in the tables above, and make an HTTP GET request like the following:

curl https://streamengine.igolgi.com/api/v0/job \
  -k \
  --request POST \
  -u 8e6f7a5bf90821a175338ce08be4b7ca:a \
  --header 'Content-Type: application/json' \
  -d '{
  "videoProfiles": [
    {
      "output": "",
      "width": 1024,
      "height": 768,
      "video_bitrate": 3500,
      "video_bitrate_mode": "cbr",
      "video_framerate": "1x"
    }
  ],
  "audioProfiles": [
    {
      "audio_bitrate": 256,
      "audio_channels": 2,
      "audio_codec": "aac"
    }
  ],
  "output_container": "mp4",
  "video_codec": "h.264",
  "input": "oci://yzwhip2gci7s/jey_test_bucket2/test_dir/moana_30_seconds.ts",
  "cloud_credentials": {
    "input": {
      "cloud_provider": "oracle",
      "access_key": "...",
      "secret_key": "...",
      "region": "ca-toronto-1"
    }
  }
}'

Retrieving a Sent Job

To retrieve a job, use your API key to make a GET request to the /api/v0/job/id endpoint, replacing id with the id of the job you wish to retrieve:

curl https://streamengine.igolgi.com/api/v0/job/1 \
  -u 8e6f7a5bf90821a175338ce08be4b7ca:

The response will look something like this:

{
    "status": {
        "tcode_progress": "0",
        "state": "ready",
        ... # additional fields
    },
    "config": {
        ... # your job configuration
    },
}

This allows you to retrieve the original configuration for your job, as well as check on its progress using the tcode_progress field.

API

Go Examples

This is an example in Go, please modify it to fit your environment, be sure to change the video input and output paths as well as the API_KEY and AWS_ACCESS and AWS_SECRET keys.

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	url := "https://streamengine.igolgi.com/api/v0/job"

	// Authentication credentials
	username := "INSERT_YOUR_API_KEY"
	password := "a"

	// Data to be sent in the POST request
	data := map[string]interface{}{
		"videoProfiles": []map[string]interface{}{
			{
				"output":              "s3://igolgi-se-out/go-testcwaudio3f.mp4",
				"width":               1920,
				"height":              1080,
				"video_bitrate_mode":  "cbr",
				"video_bitrate":       2301,
				"video_format":        "progressive",
				"video_framerate":     "1x",
				"audio_profiles":      "1",
			},
		},
		"audioProfiles": []map[string]interface{}{
			{
				"audio_bitrate":   256,
				"audio_channels":  2,
				"audio_codec":     "aac",
				"source_stream":   1,
			},
		},
		"master_variant_mode": false,
		"output_container":    "mp4",
		"video_codec":         "h.264",
		"input":               "s3://igolgi-se-in/GOPR8297-2.7K-30-fps.MP4",
		"auto_detelecine_flag": false,
		"cloud_credentials": map[string]interface{}{
			"input": map[string]string{
				"cloud_provider": "aws",
				"access_key":     "INSERT_YOUR_AWS_ACCESS_KEY",
				"secret_key":     "INSERT_YOUR_AWS_SECRET_KEY",
				"region":         "us-east-2",
			},
			"output": map[string]string{
				"cloud_provider": "aws",
				"access_key":     "INSERT_YOUR_AWS_ACCESS_KEY",
				"secret_key":     "INSERT_YOUR_AWS_SECRET_KEY",
				"region":         "us-east-2",
			},
		},
	}

	jsonData, err := json.Marshal(data)
	if err != nil {
		fmt.Println("Error marshalling JSON:", err)
		return
	}

	req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
	if err != nil {
		fmt.Println("Error creating request:", err)
		return
	}

	req.Header.Set("Content-Type", "application/json")
	req.SetBasicAuth(username, password)

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error sending request:", err)
		return
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("Error reading response:", err)
		return
	}

	fmt.Println("Response:", string(body))
}

save the script above as se_api_aws.go or similar

run
  go run se_api_aws.go

it will give print something like:
Response: {"_auto_generated_id_":13455,"cloud":"aws" ....

Remember your job number above and use it with the following script to check the status.

package main

import (
	"encoding/base64"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
	"os"
)

func main() {
	if len(os.Args) < 2 {
		fmt.Println("Please provide a job ID as an argument.")
		os.Exit(1)
	}

	jobID := os.Args[1]
	url := fmt.Sprintf("https://streamengine.igolgi.com/api/v0/job/%s", jobID)
	apiKey := "INSERT_YOUR_API_KEY" // Replace with your actual API key

	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		fmt.Println("Error creating request:", err)
		return
	}

	// Set Authorization header
	authHeader := base64.StdEncoding.EncodeToString([]byte(apiKey + ":"))
	req.Header.Set("Authorization", "Basic "+authHeader)

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error sending request:", err)
		return
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("Error reading response:", err)
		return
	}

	if resp.StatusCode == 200 {
		var data map[string]interface{}
		err = json.Unmarshal(body, &data)
		if err != nil {
			fmt.Println("Error parsing JSON:", err)
			return
		}

		fmt.Println("Job Status:")
		fmt.Println("------------------------")
		status := data["status"].(map[string]interface{})
		fmt.Printf("Job ID: %s\n", status["job_id"])
		fmt.Printf("State: %s\n", status["state"])
		fmt.Println("Progress:")
		fmt.Printf("  Transcode: %v%%\n", status["tcode_progress"])
		fmt.Printf("  Transfer: %v%%\n", status["xfer_progress"])
		fmt.Println("Time:")
		fmt.Printf("  Transcode: %v seconds\n", status["tcode_time"])
		fmt.Printf("  Transfer: %v seconds\n", status["xfer_time"])
		fmt.Println("Speed:")
		fmt.Printf("  Transcode: %v x\n", status["tcode_speed"])
		fmt.Printf("  Transfer: %v MB/s\n", status["xfer_speed"])
		fmt.Printf("Job Completed: %v\n", status["job_completed"])

		fmt.Println("\nJob Config:")
		fmt.Println("------------------------")
		config, err := json.MarshalIndent(data["config"], "", "  ")
		if err != nil {
			fmt.Println("Error formatting config:", err)
		} else {
			fmt.Println(string(config))
		}
	} else {
		fmt.Printf("Failed to retrieve job. Status code: %d\n", resp.StatusCode)
		fmt.Printf("Response: %s\n", string(body))
	}
}

Save the script above as se-api-status.go or similar.

Run
   go run se-api-status.go 13455

You'll see a result similar to the one below.  The job ID of status will be different than the submit job id. You can rerun the status until you see Job Completed: true. 

Job Status:
------------------------
Job ID: 4920
State: ready
Progress:
  Transcode: 0%
  Transfer: 0%
Time:
  Transcode: <nil> seconds
  Transfer: 78460.45 seconds
Speed:
  Transcode: -1 x
  Transfer: -1.0 MB/s
Job Completed: false

Job Config:
------------------------
{
  "audioProfiles": [
    {
      "audio_bitrate": 256,
      "audio_channels": 2,
      "audio_codec": "aac",
      "source_stream": 1
    }
  ],
  "audio_volume": 100,
  "gop_length": 1,
  "h264_quality": "good",
  "input": "s3://igolgi-se-in/GOPR8297-2.7K-30-fps.MP4",
  "output_container": "mp4",
  "picture_transform": "none",
  "scte35_passthough": false,
  "segmented_output_dash": false,
  "segmented_output_hls": false,
  "separate_audio": false,
  "videoProfiles": [
    {
      "audio_profiles": "1",
      "height": 1080,
      "output": "s3://igolgi-se-out/go-testcwaudio3f.mp4",
      "video_bitrate": 2301,
      "video_bitrate_mode": "cbr",
      "video_framerate": "1x",
      "width": 1920
    }
  ],
  "video_aspect_ratio": "passthrough",
  "video_codec": "h.264"
}

On linux/Ubuntu if you have never used go.

You can run:

$ sudo apt update
$ sudo apt install golang-go
    

API

Javascript Examples

The following code sample was written in java using the fetch method. 

It requires an API_KEY and FILE_NUMBER_OF_UPLOADED_VIDEO

Depending on your operating system you will need node.js loaded https://nodejs.org/en 
and this code can be run:

node se-localfile.mjs  
node --experimental-modules  se-localfile.mjs 

se-localfile.mjs

import fetch from 'node-fetch';

const url = 'https://streamengine.igolgi.com/api/v0/job';
const username = 'API_KEY';
const password = 'a';

const headers = {
  'Authorization': 'Basic ' + Buffer.from(username + ":" + password).toString('base64'),
  'Content-Type': 'application/json'
};

const data = {
  videoProfiles: [
    {
      width: 960,
      height: 544,
      video_bitrate: 2500,
      video_framerate: "1x",
      audio_profiles: "0"
    }
  ],
  separate_audio: false,
  segmented_output_dash: false,
  output_container: "mp4",
  picture_transform: "none",
  logo_url: null,
  audio_volume: 100,
  closed_captions: false,
  create_tar_file: false,
  gop_length: 2,
  h264_quality: "good",
  scte35_pid_remap: -1,
  video_aspect_ratio: "rotate_counterclockwise + invert_aspect_ratio",
  rotation_blackness: 0,
  scte35_passthough: false,
  segmented_output_hls: false,
  ip_distance: 2,
  audioProfiles: [
    {
      audio_codec: "aac",
      audio_channels: 2,
      audio_bitrate: 256,
      primary_audio_downmix_to_stereo: false,
      source_stream: 1
    }
  ],
  input: "https://streamengine.igolgi.com/uploads/FILE_NUMBER_OF_UPLOADED_VIDEO",
  cloud_credentials: {
    input: {
      cloud_provider: "file-upload",
      access_key: null,
      secret_key: null,
      region: "ca-toronto-1",
      tenancy_ocid: null,
      user_ocid: null,
      oci_fingerprint: null
    },
    output: {
      cloud_provider: "igolgi-store",
      access_key: null,
      secret_key: null,
      region: "ca-toronto-1",
      tenancy_ocid: null,
      user_ocid: null,
      oci_fingerprint: null
    }
  },
  master_variant_mode: false,
  video_codec: "h.264"
};

fetch(url, {
  method: 'POST',
  headers: headers,
  body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));


se-job-status.mjs 
$node se-job-status.mjs  job-id
This sample script will run every 10 seconds to see if a job is still running, when its finished it will display finished, feel free to modify this.

import fetch from 'node-fetch';

const checkJobStatus = async (jobId) => {
  const url = `https://streamengine.igolgi.com/api/v0/job/${jobId}`;  // Adjust this URL as needed
  const username = 'API_KEY';
  const password = 'a';

  const headers = {
    'Authorization': 'Basic ' + Buffer.from(username + ":" + password).toString('base64'),
    'Content-Type': 'application/json'
  };

  try {
    const response = await fetch(url, {
      method: 'GET',
      headers: headers
    });

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    const data = await response.json();
    console.log('Job status:', data);
    return data;
  } catch (error) {
    console.error('Error checking job status:', error);
  }
};

const checkUntilComplete = async (jobId) => {
  let status;
  do {
    const result = await checkJobStatus(jobId);
    status = result.status;  // Adjust this based on the actual API response structure
    if (status !== 'completed') {
      console.log('Job still in progress. Waiting 10 seconds before checking again...');
      await new Promise(resolve => setTimeout(resolve, 10000));  // Wait for 10 seconds
    }
  } while (status !== 'completed');
  console.log('Job completed!');
};

// Get job ID from command line argument
const jobId = process.argv[2];

if (!jobId) {
  console.error('Please provide a job ID as a command-line argument.');
  console.error('Usage: node se-job-status.mjs <job_id>');
  process.exit(1);
}

console.log(`Checking status for job ID: ${jobId}`);
checkUntilComplete(jobId);

API

Ruby Examples

Feel free to modify the following script for your environment.  To process the video, this script below assumes your job is on aws in an S3 bucket for input and output. 

require 'net/http'
require 'uri'
require 'json'

url = URI.parse("https://streamengine.igolgi.com/api/v0/job")

headers = {
  'Content-Type' => 'application/json'
}

# Authentication credentials (username and password)
auth = ['INSERT_YOUR_API_KEY', 'a']

# Data to be sent in the POST request
data = {
  videoProfiles: [
    {
      output: 's3://igolgi-se-out/rb-testcwaudio3e.mp4',
      width: 1920,
      height: 1080,
      video_bitrate_mode: 'cbr',
      video_bitrate: 2400,
      video_format: 'progressive',
      video_framerate: '1x',
      audio_profiles: '1'
    }
  ],
  audioProfiles: [
    {
      audio_bitrate: 256,
      audio_channels: 2,
      audio_codec: 'aac',
      source_stream: 1
    }
  ],
  master_variant_mode: false,
  output_container: "mp4",
  video_codec: "h.264",
  input: "s3://igolgi-se-in/GOPR8297-2.7K-30-fps.MP4",
  auto_detelecine_flag: false,
  cloud_credentials: {
    input: {
      cloud_provider: "aws",
      access_key: "INSERT_YOUR_AWS_ACCESS_KEY",
      secret_key: "INSERT_YOUR_AWS_SECRET_KEY",
      region: "us-east-2"
    },
    output: {
      cloud_provider: "aws",
      access_key: "INSERT_YOUR_AWS_ACCESS_KEY",
      secret_key: "INSERT_YOUR_AWS_SECRET_KEY",
      region: "us-east-2"
    }
  }
}

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE # Not recommended for production

request = Net::HTTP::Post.new(url.path, headers)
request.basic_auth(auth[0], auth[1])
request.body = data.to_json

response = http.request(request)

# Print the response content
puts response.body

Save the file as se-api-aws.rb or similar.

Run: 
ruby se-api-aws.rb

You may notice an error like this:
...error ... message: "The video bitrate for this profile and codec should set at a minimum of 2300."...

The error above means the video_bitrate variable in the code should be higher than 2300, it was already changed in the code above, but used as an example of the messages you might see.

When it runs correctly you might see something similar to this:
{"_auto_generated_id_":13453,..."updated_at":"2024-07-16T18:49:57.000Z"}

The Id number can also be found on the Job History page. 

image.png

If you want to see the status of the job from ruby you can use this code:

require 'net/http'
require 'uri'
require 'json'

# Check if an argument was provided
if ARGV.length > 0
  external_var = ARGV[0]
else
  puts "Please provide a job ID as an argument."
  exit
end

# Define the URL and API key
url = URI.parse("https://streamengine.igolgi.com/api/v0/job/#{external_var}")
api_key = "1a944b985b09c14b5001ba5cc1a1f585"

# Set up the HTTP request
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url.request_uri)
request.basic_auth(api_key, '')

# Make the GET request
response = http.request(request)

# Check for a successful response
if response.code == '200'
  puts "Job Status:"
  puts "------------------------"
  puts "Job ID: #{data['status']['job_id']}"
  puts "State: #{data['status']['state']}"
  puts "Progress:"
  puts "  Transcode: #{data['status']['tcode_progress']}%"
  puts "  Transfer: #{data['status']['xfer_progress']}%"
  puts "Time:"
  puts "  Transcode: #{data['status']['tcode_time']} seconds"
  puts "  Transfer: #{data['status']['xfer_time']} seconds"
  puts "Speed:"
  puts "  Transcode: #{data['status']['tcode_speed']} x"
  puts "  Transfer: #{data['status']['xfer_speed']} MB/s"
  puts "Job Completed: #{data['status']['job_completed']}"
  
  puts "\nJob Config:"
  puts "------------------------"
  puts JSON.pretty_generate(data['config'])
else
  puts "Failed to retrieve job. Status code: #{response.code}"
  puts "Response: #{response.body}"
end

Save the file above as se_api_status.rb or similar

Run
    ruby se_api_status.rb  13453      where 13453 is the job number

Job Status:
------------------------
Job ID: 4918
State: ready
Progress:
  Transcode: 100%
  Transfer: 0%
Time:
  Transcode: 19.06 seconds
  Transfer: 28.29 seconds
Speed:
  Transcode: 0.0 x
  Transfer: 0.0 MB/s
Job Completed: true

Job Config:
------------------------
{
  "input": "s3://igolgi-se-in/GOPR8297-2.7K-30-fps.MP4",
  "videoProfiles": [
    {
      "output": "s3://igolgi-se-out/py2-testcwaudio3e.mp4",
      "width": 1920,
      "height": 1080,
      "video_bitrate_mode": "cbr",
      "video_bitrate": 2400,
      "video_framerate": "1x",
      "audio_profiles": "1"
    }
  ],
  "audioProfiles": [
    {
      "audio_codec": "aac",
      "audio_channels": 2,
      "audio_bitrate": 256,
      "source_stream": 1
    }
  ],
  "output_container": "mp4",
  "separate_audio": false,
  "segmented_output_hls": false,
  "segmented_output_dash": false,
  "video_codec": "h.264",
  "gop_length": 1,
  "scte35_passthough": false,
  "audio_volume": 100,
  "h264_quality": "good",
  "video_aspect_ratio": "passthrough",
  "picture_transform": "none"
}

API

Python Examples

The following example uses video files on AWS in an S3 bucket and writes files out to a different AWS S3 Bucket.

 

import requests

url = "https://streamengine.igolgi.com/api/v0/job"

headers = {
    'Content-Type': 'application/json',
}

# Authentication credentials (username and password)
auth = ('INSERT_YOUR_API_KEY', 'a')

# Data to be sent in the POST request
data = {
    'videoProfiles': [
        {
            'output': 's3://igolgi-se-out/py2-testcwaudio3d.mp4',
            'width': 1920,
            'height': 1080,
            'video_bitrate_mode': 'cbr',
            'video_bitrate': 2250,  # there are minimum bitrates see tables
            'video_format': 'progressive',
            'video_framerate': '1x',    
            'audio_profiles': '1'   # required if you want audio 0 - 7
        }],
    'audioProfiles': [
        {
            'audio_bitrate': 256,
            'audio_channels': 2,
            'audio_codec': 'aac',
            'source_stream': 1   # required if you want audio 1 - 8
        }],
    "master_variant_mode": False,
    "output_container": "mp4",
    "video_codec": "h.264",
    "input": "s3://igolgi-se-in/GOPR8297-2.7K-30-fps.MP4",
    "auto_detelecine_flag": False,
    "cloud_credentials": {
      "input": {
        "cloud_provider": "aws",
        "access_key": "INSERT_YOUR_AWS_ACCESS_KEY",
        "secret_key": "INSERT_YOUR_AWS_SECRET_KEY",
        "region": "us-east-2"
      },
       "output": {
        "cloud_provider": "aws",
        "access_key": "INSERT_YOUR_AWS_ACCESS_KEY",
        "secret_key": "INSERT_YOUR_AWS_SECRET_KEY",
        "region": "us-east-2"
      }
    }
}

# Disable SSL verification (not recommended for production)
response = requests.post(url, json=data, headers=headers, auth=auth)

# Print the response content
print(response.content.decode('utf-8'))

 

import requests
import sys
import json
from requests.auth import HTTPBasicAuth

if len(sys.argv) > 1:
    external_var = sys.argv[1]
else:
    print("Please provide a job ID as an argument.")
    sys.exit(1)

# Define the URL and API key
url = f"https://streamengine.igolgi.com/api/v0/job/{external_var}"
api_key = "INSERT_YOUR_API_KEY"

# Make the GET request
response = requests.get(url, auth=HTTPBasicAuth(api_key, ''))

# Check for a successful response
if response.status_code == 200:
    data = response.json()
    status = data.get("status", {})
    config = data.get("config", {})

    print("Job Status:")
    print("------------------------")
    print(f"Job ID: {status.get('job_id')}")
    print(f"State: {status.get('state')}")
    print("Progress:")
    print(f"  Transcode: {status.get('tcode_progress')}%")
    print(f"  Transfer: {status.get('xfer_progress')}%")
    print("Time:")
    print(f"  Transcode: {status.get('tcode_time')} seconds")
    print(f"  Transfer: {status.get('xfer_time')} seconds")
    print("Speed:")
    print(f"  Transcode: {status.get('tcode_speed')} x")
    print(f"  Transfer: {status.get('xfer_speed')} MB/s")
    print(f"Job Completed: {status.get('job_completed')}")

    print("\nJob Config:")
    print("------------------------")
    print(json.dumps(config, indent=2))

else:
    print(f"Failed to retrieve job. Status code: {response.status_code}")
    print("Response:", response.text)

 

Job Status:
------------------------
Job ID: 4920
State: ready
Progress:
  Transcode: 100%
  Transfer: 0%
Time:
  Transcode: 19.94 seconds
  Transfer: 27.87 seconds
Speed:
  Transcode: 0.0 x
  Transfer: 0.0 MB/s
Job Completed: True

Job Config:
------------------------
{
  "input": "s3://igolgi-se-in/GOPR8297-2.7K-30-fps.MP4",
  "videoProfiles": [
    {
      "output": "s3://igolgi-se-out/go-testcwaudio3f.mp4",
      "width": 1920,
      "height": 1080,
      "video_bitrate_mode": "cbr",
      "video_bitrate": 2301,
      "video_framerate": "1x",
      "audio_profiles": "1"
    }
  ],
  "audioProfiles": [
    {
      "audio_codec": "aac",
      "audio_channels": 2,
      "audio_bitrate": 256,
      "source_stream": 1
    }
  ],
  "output_container": "mp4",
  "separate_audio": false,
  "segmented_output_hls": false,
  "segmented_output_dash": false,
  "video_codec": "h.264",
  "gop_length": 1,
  "scte35_passthough": false,
  "audio_volume": 100,
  "h264_quality": "good",
  "video_aspect_ratio": "passthrough",
  "picture_transform": "none"
}

 

 

API

Stream videos with HTML-DASH and HLS

Why would I want to use hls or dash?
Dash and Hls are great for streaming large files and give the user the ability to jump around in the video, fast forward, rewind or jump to an index.  In the past you needed expensive streaming servers and serve videos using rtsp: or mms:

In StreamEngine convert a file you want to stream from a website to mp4-hls, mp4-dash or mp4-hls+dash.  This will create a tar or tar.gz file
DASH - Dynamic  Adaptive Streaming over HTTP

then copy the file to your webserver and name it playlist.m3u8 or modify the <source src = "playlist.m3u8" ... line below.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HLS-DASH Player</title>
    <link href="https://vjs.zencdn.net/7.20.3/video-js.min.css" rel="stylesheet">
    <script src="https://vjs.zencdn.net/7.20.3/video.min.js"></script>
</head>
<body>
    <video-js id="my-video" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto" width="640" height="360">
        <source src="playlist.m3u8" type="application/x-mpegURL">
    </video-js>

    <script>
        var player = videojs('my-video');
        player.play();
    </script>
</body>
</html>

This HTML file does the following:

  1. It includes the video.js CSS and JavaScript files from a CDN.
  2. It creates a video player using the video-js tag.
  3. It sets the source of the video to your playlist.m3u8 file.
  4. It initializes the video.js player and attempts to start playback.

To use this:

  1. Save this HTML code to a file (e.g., player.html) on your web server.
  2. Make sure your playlist.m3u8 file is in the same directory as the HTML file, or update the src attribute with the correct path to your playlist file.
  3. Access the HTML file through your web server (e.g., https://yourserver.com/player.html).

Note:

API

Curl - Check Job Status

When you submit a curl job you should get a response back from the StreamEngine server with the job id on it.  

Curl - Linux and Windows 

curl -u API_KEY:a -H "Content-Type: application/json" https://streamengine.igolgi.com/api/v0/job/<JOB_ID>

replace API_KEY with your StreamEngine API Key

replace <JOB_ID>

If you only want to see job status and have jq installed on linux you can run

curl -u API_KEY:a -H "Content-Type: application/json" https://streamengine.igolgi.com/api/v0/job/<JOB_ID> | jq ".status" 

$ curl -u API_KEY:a -H "Content-Type: application/json" https://streamengine.igolgi.com/api/v0/job/<JOB_ID> | jq ".status"

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1079  100  1079    0     0   9989      0 --:--:-- --:--:-- --:--:-- 10084
{
  "job_id": "5087",
  "tcode_progress": "100",
  "state": "ready",
  "tcode_time": "36.84",
  "tcode_speed": "0.0",
  "job_completed": true,
  "xfer_speed": "0.0",
  "xfer_time": "86398.93",
  "xfer_progress": "100"
}

Note the job_id above (backend) will be different than is the  <JOB_ID> submitted which is the id of the frontend,

or

$ curl -u API_KEY:a -H "Content-Type: application/json" https://streamengine.igolgi.com/api/v0/job/<JOB_ID> | jq ".status.job_completed"

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1079  100  1079    0     0   9099      0 --:--:-- --:--:-- --:--:--  9144

true

jq is available for Windows, use at your own risk, it's a separate install, AMD64 executable should work with intel. 

Windows cmd, note API_KEY blurred out.

curl - powershell-check-jobstatus.png

On Windows with PowerShell.  PowerShell is a little different curl works but -u option does not so we will need to write a program.

param(
    [Parameter(Mandatory=$true)]
    [string]$JobId
)

$url = "https://streamengine.igolgi.com/api/v0/job/$JobId"
$username = "API_KEY"
$password = "a"

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))

$headers = @{
    Authorization = "Basic $base64AuthInfo"
    "Content-Type" = "application/json"
}

try {
    $response = Invoke-RestMethod -Uri $url -Headers $headers -Method Get

    Write-Host "Status for Job ID: $JobId"
    Write-Host "Full status:"
    $response.status | ConvertTo-Json

    Write-Host "`nKey status fields:"
    Write-Host "State: $($response.status.state)"
    Write-Host "Job Completed: $($response.status.job_completed)"
    Write-Host "Tcode Progress: $($response.status.tcode_progress)%"
    Write-Host "Xfer Progress: $($response.status.xfer_progress)%"
}
catch {
    Write-Host "Error checking job status: $_"
}

save it to a file for example CheckJobStatus.ps1

Then you can run the script above.

.\CheckJobStatus.ps1 -JobID <JOB_ID>

Linux shell script if you want to store your API key an reuse it with a script.

#!/bin/bash

JOB_ID=$1

if [ -z "$JOB_ID" ]; then
    echo "Please provide a job ID as an argument."
    echo "Usage: ./check_job_status.sh <job_id>"
    exit 1
fi

echo "Checking status for job ID: $JOB_ID"

while true; do
    response=$(curl -s -u API_KEY:a -H "Content-Type: application/json" https://streamengine.igolgi.com/api/v0/job/$JOB_ID)
    status=$(echo $response | jq -r '.status')
    
    echo "Job status: $status"
    
    if [ "$status" = "completed" ]; then
        echo "Job completed!"
        break
    else
        echo "Job still in progress. Waiting 10 seconds before checking again..."
        sleep 10
    fi
done

Curl - Windows PowerShell

Here is another example on Windows in PowerShell

 .\CheckJobStatus.ps1 -JobId <Your-Job-ID>

param(
    [Parameter(Mandatory=$true)]
    [string]$JobId
)

$url = "https://streamengine.igolgi.com/api/v0/job/$JobId"
$username = "API_KEY"
$password = "a"

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))

$headers = @{
    Authorization = "Basic $base64AuthInfo"
    "Content-Type" = "application/json"
}

function Check-JobStatus {
    try {
        $response = Invoke-RestMethod -Uri $url -Headers $headers -Method Get
        return $response
    }
    catch {
        Write-Host "Error checking job status: $_"
        return $null
    }
}

Write-Host "Checking status for job ID: $JobId"

do {
    $result = Check-JobStatus
    if ($result -ne $null) {
        $status = $result.status  # Adjust this if the API response structure is different
        Write-Host "Job status: $status"
        
        if ($status -ne "completed") {
            Write-Host "Job still in progress. Waiting 10 seconds before checking again..."
            Start-Sleep -Seconds 10
        }
    }
    else {
        Write-Host "Failed to get job status. Retrying in 10 seconds..."
        Start-Sleep -Seconds 10
    }
} while ($status -ne "completed")

Write-Host "Job completed!"

Tutorials


Tutorials

Quick Start 1 (drag and drop)

Prerequisites: 

After you login you should go to the Dashboard page

dashboard new.png

Click "Transcode a Video" on right side under getting started or the "Transcoding" link on the left side of the screen.  This should open the Start a Transcoding Job page

transcoding.png

Click on Input Location
Under Cloud Provider. click the drop down and select file-upload

Input location cloud provider file upload.png

Find an mp4 file and drag and drop it into the Drop here or click on the Green Arrow to browse for the file.

drag and drop a video.png

Wait a few seconds or minutes depending on the size of the file and speed of your network. 
    Note: Demo Users are limited to ???25MB??? file sizes.

You will see a message when the file has successfully been uploaded,

Once your job has been loaded, click the blue Run Job bar at the bottom of the screen

quick start run job.png

You should see your job get transferred into the job queue and transcoded by watching a slider at the bottom of the screen.  After a minute or so depending on the size of the file you should see a message in the lower right hand corner that says your job has successfully been completed.  If you miss the message the run job bar will changed from dark blue to blue.

Screenshot from 2024-06-19 18-57-21.png

Now let's save our job as a template so we can come back and modify it later.

Click on Save As in the upper right hand corner.

save template click save as.png

You can name it anything you want then click OK.

save template - quickstart1.png

Now let's take a look at your job.

Click on the Job History link in the upper left hand corner.

job history.png

Find the last job you created and click on Watch.  Please Note: it is possible to create a video that will not run on your local computer or mobile device if you don't have the proper codecs to play the video.

image.png

A video player should popup and play your video.   You can also download the video to your local computer.  Please Note: download name is a random name, you may want to rename it to whatever name you want.

image.png

Now you might what to go back to the transcode page and play around with other settings.  To learn more about other options, see our transcoding page documentation.

Tutorials

Quick Start 2 (mobile or tablet)

Prerequisites: 

MODIFY for mobile

After you login you should go to the Dashboard page

dashboard new.png

Click "Transcode a Video" on right side under getting started or the "Transcoding" link on the left side of the screen.  This should open the Start a Transcoding Job page

transcoding.png

Click on Input Location
Under Cloud Provider. click the drop down and select file-upload

Input location cloud provider file upload.png

Find an mp4 file and drag and drop it into the Drop here or click on the Green Arrow to browse for the file.

drag and drop a video.png

Wait a few seconds or minutes depending on the size of the file and speed of your network. 
    Note: Demo Users are limited to ???25MB??? file sizes.

You will see a message when the file has successfully been uploaded,

Once your job has been loaded, click the blue Run Job bar at the bottom of the screen

quick start run job.png

You should see your job get transferred into the job queue and transcoded by watching a slider at the bottom of the screen.  After a minute or so depending on the size of the file you should see a message in the lower right hand corner that says your job has successfully been completed.  If you miss the message the run job bar will changed from dark blue to blue.

Screenshot from 2024-06-19 18-57-21.png

Now let's save our job as a template so we can come back and modify it later.

Click on Save As in the upper right hand corner.

save template click save as.png

You can name it anything you want then click OK.

save template - quickstart1.png

Now let's take a look at your job.

Click on the Job History link in the upper left hand corner.

job history.png

Find the last job you created and click on Watch.  Please Note: it is possible to create a video that will not run on your local computer or mobile device if you don't have the proper codecs to play the video.

image.png

A video player should popup and play your video.   You can also download the video to your local computer.  Please Note: download name is a random name, you may want to rename it to whatever name you want.

image.png

Now you might what to go back to the transcode page and play around with other settings.  To learn more about other options, see our transcoding page documentation.

Tutorials

Videos

Getting Started with Drag and Drop

Tutorials

Anatomy of a Video

When you look behind the scenes of a video on YouTube you will notice that each video has more than one video (in the example below, YouTube has 24 videos). Streaming video companies like YouTube, Netflix, Apple, Pluto and others need to support different devices with different bandwidths and screen resolutions.  If the internet gets too bogged down, video providers will step down to the next video at a lower bandwidth until a higher bandwidth is available.   

image.png

Most video files are actually containers.  mp4, avi, mov, mkv and flv are containers.  Containers can hold a lot of information, audio tracks in different languages, video, closed caption text files etc. 

Codecs are different from containers as they compress and decompress different file.  The word codec was even taken from compress and decompress.  Most popular codecs are h.264, h.265 or hevc, aac, mp3 and others vp9 is a youtube codec.

Tools like ffprobe and mediainfo allow you to see inside of a video container.  Most containers contain a compressed video and at least 1 audio track.

StreamEngine allows you to convert up to 8 audio tracks inside of a container.

Below is a video from the united nations with many different language tracks.

image.png

Here is what a .mov video container looks like with mediainfo, the following example has 4 - two channel audio tracks as well as 1 video track and 1 other track.

$ mediainfo 1080i60_SMPTE_8CH_audible.mov 
General
Complete name                            : 1080i60_SMPTE_8CH_audible.mov
Format                                   : MPEG-4
Format profile                           : QuickTime
Codec ID                                 : qt   2005.03 (qt  )
File size                                : 63.8 MiB
Duration                                 : 14 s 181 ms
Overall bit rate mode                    : Variable
Overall bit rate                         : 37.7 Mb/s
Encoded date                             : UTC 2021-03-04 16:00:20
Tagged date                              : UTC 2021-03-04 16:00:22
Writing library                          : Apple QuickTime
TIM                                      : 00;00;00;00
TSC                                      : 60000
TSZ                                      : 1001

Video
ID                                       : 1
Format                                   : ProRes
Format version                           : Version 0
Format profile                           : 422 LT
Codec ID                                 : apcs
Duration                                 : 14 s 181 ms
Bit rate mode                            : Variable
Bit rate                                 : 31.0 Mb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 59.940 (60000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:2
Scan type                                : Interlaced
Scan type, store method                  : Interleaved fields
Scan order                               : Top Field First
Bits/(Pixel*Frame)                       : 0.249
Stream size                              : 52.4 MiB (82%)
Writing library                          : adb0
Language                                 : English
Encoded date                             : UTC 2021-03-04 16:00:20
Tagged date                              : UTC 2021-03-04 16:00:20
Color primaries                          : BT.709
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.709

Audio #1
ID                                       : 2
Format                                   : PCM
Format settings                          : Little / Signed
Codec ID                                 : sowt
Duration                                 : 14 s 181 ms
Bit rate mode                            : Constant
Bit rate                                 : 1 536 kb/s
Channel(s)                               : 2 channels
Channel layout                           : M M
Sampling rate                            : 48.0 kHz
Bit depth                                : 16 bits
Stream size                              : 2.60 MiB (4%)
Language                                 : English
Encoded date                             : UTC 2021-03-04 16:00:20
Tagged date                              : UTC 2021-03-04 16:00:20

Audio #2
ID                                       : 3
Format                                   : PCM
Format settings                          : Little / Signed
Codec ID                                 : sowt
Duration                                 : 14 s 181 ms
Bit rate mode                            : Constant
Bit rate                                 : 1 536 kb/s
Channel(s)                               : 2 channels
Channel layout                           : M M
Sampling rate                            : 48.0 kHz
Bit depth                                : 16 bits
Stream size                              : 2.60 MiB (4%)
Language                                 : English
Encoded date                             : UTC 2021-03-04 16:00:20
Tagged date                              : UTC 2021-03-04 16:00:20

Audio #3
ID                                       : 4
Format                                   : PCM
Format settings                          : Little / Signed
Codec ID                                 : sowt
Duration                                 : 14 s 181 ms
Bit rate mode                            : Constant
Bit rate                                 : 1 536 kb/s
Channel(s)                               : 2 channels
Channel layout                           : M M
Sampling rate                            : 48.0 kHz
Bit depth                                : 16 bits
Stream size                              : 2.60 MiB (4%)
Language                                 : English
Encoded date                             : UTC 2021-03-04 16:00:20
Tagged date                              : UTC 2021-03-04 16:00:20

Audio #4
ID                                       : 5
Format                                   : PCM
Format settings                          : Little / Signed
Codec ID                                 : sowt
Duration                                 : 14 s 181 ms
Bit rate mode                            : Constant
Bit rate                                 : 1 536 kb/s
Channel(s)                               : 2 channels
Channel layout                           : M M
Sampling rate                            : 48.0 kHz
Bit depth                                : 16 bits
Stream size                              : 2.60 MiB (4%)
Language                                 : English
Encoded date                             : UTC 2021-03-04 16:00:20
Tagged date                              : UTC 2021-03-04 16:00:20

Other
ID                                       : 6
Type                                     : Time code
Format                                   : QuickTime TC
Duration                                 : 14 s 181 ms
Frame rate                               : 59.940 (60000/1001) FPS
Time code of first frame                 : 00:00:00;00
Time code, striped                       : Yes
Language                                 : English
Encoded date                             : UTC 2021-03-04 16:00:20
Tagged date                              : UTC 2021-03-04 16:00:20


G

Trial vs Paid

Demo/Trial accounts are limited to 14 days, one concurrent job, up to 25 videos, only 1 minute of video will be processed with a watermark. 

If you decide to add a credit card, we will charge you monthly or when your total cost exceeds $20 whichever comes first.   At the end of your billing term we will round any fees up to the nearest cent $0.01.  All prices are in United States Dollar or USD.

We  have three options, billed monthly based on what you use.  Billed annually at $10 per month get a 25% discount.  

Industry standard Stripe.com handles all of our billing and payments.   Industry standard auth0.com handles all user account  information.

Minimum cost is $0.01 per video. 
Videos that fail to get processed will not be charged.

  Trial/Demo Starter Pro Plan Enterprise Plan
Monthly Fee   $0.00 $10.00 >500 hours per month
discount vs starter     25% discount
Call Us
Standard        
Audio per track(AAC, stereo/5.1)   $0.0016 $0.0012  
H264 SD less than 1280x720   $0.0038 $0.0028  
H264 HD less than 2048x1080   $0.0075 $0.0056  
H264 2K (2560 x1440)   $0.0150 $0.0113  
H264 4K less than 3840 x 2160   $0.0150 $0.0113  
# Concurrent Jobs 1 5 10  
Content Length 1 minute max unlimited unlimited unlimited
igolgi watermarked yes no no no
# total jobs 25 unlimited unlimited unlimited
         
Feature Extras(additive to Standard)        
Dolby Codecs(AC3, stereo or 5.1)   $0.001 extra $0.001 extra  
De Telecine   50% delta 50% delta  
H265/AV1   25% delta 25% delta  
Input files larger than 25 Mbps   25% delta 25% delta

Delta is an additional cost that will be added to the video size and format above.   If your video bandwidth is higher than 25,000Kbps there will be an additional fee, although 20,000Kbps is good for 4K with 5.1 surround.  Please note setting video bandwidth to 25,000 and audio to 256kbps would exceed 25,000.  A better setting would be to top out video at 24,000Kbps and use any audio setting. 

Beyond the Enterprise Plan you might want to consider igolgi hardware solutions for your organization.  Streamengine is based on iLux File and Blazar products.

While we can compress videos to Dolby format audio you will need a separate license from Dolby to broadcast or stream Dolby content.  Click to learn more about Dolby Audio Licensing

Using Tar

Some of the professional options of StreamEngine allow you to create several to thousands of video files, for these options we recommend using tar (tape archive) or adding all files to one big file which can be compressed. tar.gz is the compressed version of tar tar.gz which is similar to windows .zip files.  Most versions of Windows support tar and newer versions support tar.gz, however, windows tar is only accessible in from the command line.   There is a free open source tool called 7 zip which can be downloaded as well.

Selecting Tar as an options

Save as tar, tar is a compressed file similar to zip but for Linux, macOS and Windows 11 update 23H2 or higher.  You can open a tar file in Windows 10 using command line or you can use a third party app like free opensource 7-zip found at https://www.7-zip.com

Tar on Windows

On Windows 10 & 11
1.) Search for cmd
2.) Select Run as Administrator

tar-windows-10-cmd-administrator.png

You may get a popup windows asking "Do you want to allow this app to make changes to your device?", if so click Yes.

A command window will popup, navigate to the directory where the tar file is.

image.png

Then run tar -xf  tarfilename.tar and it will extract the file into the current directory.
In the example in the image above we ran tar -xf test.tar and it extracted 3 files from the tar file and put them in the current directory.

7-Zip on Windows 

1.) Search for 7-zip
2.) Click to download it
3.) Optional - Read more about 7-zip

tar-windows-10-7-zip.png

Troubleshooting

If you get an error

image.png

On the job history page you may see this error ....  It is possible to use a video codec with streamengine that you do not have loaded on your computer, its also possible that your browser does not know how to play the video.  It's usually HEVC/H.265 that may be causing this issue.  HEVC/H.265 may require licensing some operating systems license it and some 3rd party player or video editors may license it as well. Use a Google or your favorite AI tool to search on how to get HEVC installed on your computer or browser.  When searching for errors it is best to be as specific as possible I can't play an H.265 video in Firefox v128 on Ubuntu 22.04. 

Also clicking on "Config" might give you clues as to what might be causing the playback problem.   The project was a success but the video won't play in the browser.  So the video file is good and you can click to download it and play it in a video player that supports the codec.  Although the video does not play in the browser so let's look for trouble shooting clues.  The video is on oci which is the oracle cloud and igolgi's temporary storage.  The audio codec is 'aac' which is pretty standard, the output container is mp4, but the video codec is HEVC which needs to be licensed.  Some computers and some browsers may be licensed and most mobile devices.

trouble shooting job history with hilights2.png

About Us

image.png

igolgi History - About Us

Founded in 2008 by Jeff Cooper and Dr. Kumar Ramaswamy

igolgi is an engineering and development company.  Our engineering staff has years of experience in every type of compression encoding and transcoding technology, and we are experts in software control and interface.  Our principal engineers hold over 200 patents in compression related projects.  For over a decade we have provided innovative, flexible, and high-quality solutions for the broadcast, cable, LPTV and government markets.

From HDTV, social media streaming, smart devices, and interface to cloud and third-party applications, igolgi provides the most innovative, flexible, and robust solutions available today, with easy expansion and upgrade capabilities for the future.

igolgi serves customers world-wide with all design, manufacturing, and support facilities located in the USA.

Any other wiz bangey facts, products, customers etc?

Offices in Princeton, NJ, Barrington, IL, Barcelona, SP


StreamEngine is based on igolgi custom iLux File hardware

As your StreamEngine use grows at some point you might want to consider adding iLux File to your local network.


Effortlessly convert studio masters with igolgi’s iLux File processing platform, designed for superior video quality and minimal bandwidth usage. Integrated with asset management and storage solutions, iLux File ensures seamless, scalable, and reliable file-based video processing and publishing. Experience unmatched efficiency with robust failsafe mechanisms, flexible scheduling, and comprehensive management tools for uninterrupted operations.

image.png


iLux | Broadcast - Advanced ATSC 1.0 Encoding Platform 


Experience unparalleled broadcast quality with igolgi’s iLux | Broadcast, the ultimate ATSC 1.0 encoding solution. Featuring top-tier MPEG2 Encoding and flexible interface support, iLux effortlessly scales to meet your HD and SD channel needs. With comprehensive features like EAS integration, CALM audio control, and dynamic PSIP, iLux ensures superior video quality and reliability at the best price.

image.png

iLux | ATSC 3.0 - NextGen Pro Encoding Platform

Simplify ATSC 3.0 deployment with igolgi’s iLux Broadcast NexGen Studio Platform, integrating encoding, signaling, delivery services, and broadcast gateway. Support up to 8 HD streams, deliver DASH-packaged streams, and integrate essential services like Electronic Service Guide and emergency announcements. With exceptional video processing, advanced algorithms, and a unified user interface, iLux offers the highest quality, most flexible solutions at the best price, all designed and supported in the USA.

image.png

Unlock double the channel capacity with igolgi’s iLux ATSC 1.0 XScale, a versatile encoder supporting H.264 and MPEG2. Seamlessly mix and match MPEG2/H.264 channels for unparalleled video quality and expanded channel support. XScale ensures effortless configuration and superior performance, offering complete ATSC 1.0 broadcast solutions at the best price point.

image.png

Experience exceptional low-power TV broadcasting with igolgi’s iLux | Broadcast Mini, a compact, high-quality, and cost-effective ATSC 1.0 encoding solution. Designed for the ATSC Repack, it supports up to four HD/SD programs with superb MPEG2 encoding and flexible interface options. Featuring complete broadcast station solutions, including Program Guide, EAS integration, and dynamic audio control, iLux Mini ensures optimal video quality and seamless scalability at the best price.

image.png

Simplify live video encoding and transcoding with igolgi’s iLux-LIVE, offering top-notch video quality and ultra-dense, low-power hardware. Supporting up to 160 HD channels per 1 RU and the latest codecs (H.264, HEVC, AV1), iLux-LIVE ensures outstanding video at minimal bit rates. Trusted for over 15 years, this versatile, software-defined platform features easy setup, advanced encoding technology, and seamless integration with third-party packagers for a future-proof, cost-effective solution.

image.png

Streamline your transcoding workflows with igolgi Blazar, designed for high-speed bulk transcoding, just-in-time transcoding, and live dynamic ad insertion. Blazar offers exceptional speed, converting a two-hour movie in just one minute, and supports on-the-fly ABR profile generation. Its scalable architecture and proprietary software ensure unmatched video processing and flexibility, making it perfect for SVOD and cloud DVR applications.

image.png