PHP SDK

Learn how to use the FastPix PHP SDK to upload media, stream live, manage playback, and handle media operations in PHP applications.

FastPix PHP SDK

The FastPix PHP SDK provides a powerful, developer-friendly way to build video capabilities into your PHP applications. You get support for media uploads, live streaming, simulcasting, playback management, DRM configurations, signing keys, and more, so you can build sophisticated video-based applications for your use case.



Prerequisites

Before you start using the SDK, make sure you have the following:

  • PHP 8.2 or later: This SDK is compatible with PHP 8.2 or higher
  • Composer: Required for dependency management
  • cURL extension: Required for HTTP requests
  • JSON extension: Required for JSON processing
  • FastPix API credentials: You’ll need an Access Token and a Secret Key. You can generate these credentials by following the steps in the Authentication with Access Tokens guide
  • Basic understanding of PHP and REST APIs: Familiarity with PHP development and API integration concepts

Installation

The SDK is available through Composer and can be installed using one of the following methods:

  • Using the Composer
  • From Source

Using Composer

Add this to your composer.json file:

{
  "repositories": [
    {
      "type": "vcs",
      "url":"https://github.com/FastPix/fastpix-php.git"
    }
  ],
  "require": {
    "fastpix/sdk": "*"
  }
}


Then install the dependencies: composer install

Learning environment For development or testing purposes, you can install the SDK in development mode:

composer require fastpix/sdk:dev-main

Production environment For production applications, consider using environment variables for credentials:

$sdk = SDK::builder()
    ->setSecurity(
        new Components\Security(
            username: $_ENV['FASTPIX_ACCESS_TOKEN'],
            password: $_ENV['FASTPIX_SECRET_KEY'],
        )
    )
    ->build();


From Source

git clone [https://github.com/FastPix/fastpix-php.git](https://github.com/FastPix/fastpix-php.git)  
cd fastpix-php  
composer install

Import the SDK

Add the necessary import statements to your PHP files:

<?php
declare(strict_types=1);

require 'vendor/autoload.php';

use FastPix\Sdk;
use FastPix\Sdk\Models\Components;
use FastPix\Sdk\Models\Operations;
use FastPix\Sdk\Models\Errors;
use FastPix\Sdk\Utils\Retry\RetryConfigBackoff;


Initialization

You can set the security parameters through the builder when initializing the SDK client instance. The SDK uses different server URLs for different operations:

For Media Operations

Use the base FastPix server URL:

$sdk = SDK::builder()
    ->setSecurity(
        new Components\Security(
            username: 'your-access-token',
            password: 'your-secret-key',
        )
    )
    ->setServerURL('https://api.fastpix.io/v1/')
    ->build();

For Live Stream Operations

Use the live streaming specific server URL:

$sdk = SDK::builder()
    ->setSecurity(
        new Components\Security(
            username: 'your-access-token',
            password: 'your-secret-key',
        )
    )
    ->setServerURL('https://api.fastpix.io/v1/')
    ->build();


Perform Media Operations

Create Media from URL

Create media by providing a URL to an existing video file. This is useful when you have videos hosted on external platforms like AWS S3, Google Cloud Storage, or any publicly accessible URL.

$request = new Components\CreateMediaRequest(
    inputs: [
        new Components\VideoInput(
            type: 'video',
            url: 'https://static.fastpix.io/sample.mp4',
        ),
    ],
    metadata: [
        'title' => 'My Video',
        'description' => 'Video created from URL',
    ],
    accessPolicy: Components\CreateMediaRequestAccessPolicy::Public,
);

$response = $sdk->inputVideo->createMedia(request: $request);

if ($response->createMediaSuccessResponse !== null) {
    echo "Media created successfully!";
    echo "Media ID: " . $response->createMediaSuccessResponse->id;
}

Direct Upload Media from Device

Upload media files directly from your local device or server using the direct upload endpoint:

$request = new Components\DirectUploadRequest(
    corsOrigin: '*',
    pushMediaSettings: new Components\PushMediaSettings(
        accessPolicy: Components\BasicAccessPolicy::Public,
        metadata: [
            'title' => 'Uploaded Video',
            'category' => 'user-generated',
        ],
    ),
);

$response = $sdk->inputVideo->directUpload(request: $request);

if ($response->directUploadSuccessResponse !== null) {
    echo "Direct upload initiated successfully!";
    echo "Upload ID: " . $response->directUploadSuccessResponse->data->uploadId;
    echo "Upload URL: " . $response->directUploadSuccessResponse->data->url;
}

List All Media

Retrieve a list of all media in your workspace with pagination support:

$response = $sdk->manageVideos->listMedia(
    limit: 10,
    offset: 1
);

if ($response->object !== null) {
    $videos = $response->object->data;
    foreach ($videos as $video) {
        echo "Video ID: " . $video->id . "\n";
        echo "Title: " . ($video->metadata['title'] ?? 'No title') . "\n";
    }
}

Get Media by ID

Retrieve detailed information about a specific media item:

$mediaId = 'your-media-id';

$response = $sdk->manageVideos->getMedia(
    mediaId: $mediaId
);

if ($response->getMediaSuccessResponse !== null) {
    $video = $response->getMediaSuccessResponse->data;
    echo "Video ID: " . $video->id . "\n";
    echo "Status: " . $video->status . "\n";
    echo "Created At: " . $video->createdAt->format('Y-m-d H:i:s') . "\n";
}

Update Media

Update metadata and settings for an existing media item:

$mediaId = 'your-media-id';

$request = new Components\UpdateVideoRequest(
    metadata: [
        'title' => 'Updated Video Title',
        'description' => 'Updated description',
        'category' => 'updated-category',
    ],
    accessPolicy: Components\UpdateVideoRequestAccessPolicy::Public,
);

$response = $sdk->manageVideos->updatedMedia(
    mediaId: $mediaId,
    request: $request
);

if ($response->updatedMediaSuccessResponse !== null) {
    echo "Media updated successfully!";
}


Media Configuration Operations

Update Source Access

Update the source access policy for a media item:

$mediaId = 'your-media-id';
$request = new Components\UpdateSourceAccessRequest(
    accessPolicy: Components\UpdateSourceAccessRequestAccessPolicy::Private,
);
$response = $sdk->manageVideos->updatedSourceAccess(
    mediaId: $mediaId,
    request: $request
);
if ($response->updatedSourceAccessSuccessResponse !== null) {
    echo "Source access updated successfully!";
}

Update MP4 Support

Enable or disable MP4 support for a media item:

$mediaId = 'your-media-id';
$request = new Components\UpdateMp4SupportRequest(
    mp4Support: true,
);
$response = $sdk->manageVideos->updatedMp4Support(
    mediaId: $mediaId,
    request: $request
);
if ($response->updatedMp4SupportSuccessResponse !== null) {
    echo "MP4 support updated successfully!";
}

Get Media Input Info

Retrieve input information for a media item:

$mediaId = 'your-media-id';
$response = $sdk->manageVideos->retrieveMediaInputInfo(
    mediaId: $mediaId
);
if ($response->retrieveMediaInputInfoSuccessResponse !== null) {
    $inputInfo = $response->retrieveMediaInputInfoSuccessResponse->data;
    echo "Input URL: " . $inputInfo->inputUrl . "\n";
    echo "Input Type: " . $inputInfo->inputType . "\n";
    echo "File Size: " . $inputInfo->fileSize . "\n";
}

Delete Media

Remove a media item from your workspace:

$mediaId = 'your-media-id';
$response = $sdk->manageVideos->deleteMedia(
    mediaId: $mediaId
);
if ($response->statusCode === 204) {
    echo "Media deleted successfully!";
}


Playback Operations

Create Media Playback ID

Generate a playback ID for secure video access:

$mediaId = 'your-media-id';

$request = new Components\CreatePlaybackIdRequest(
    accessPolicy: Components\CreatePlaybackIdRequestAccessPolicy::Public,
);
$response = $sdk->playback->createPlaybackId(
    mediaId: $mediaId,
    request: $request
);
if ($response->createPlaybackIdSuccessResponse !== null) {
    $playbackId = $response->createPlaybackIdSuccessResponse->data->id;
    echo "Playback ID created: " . $playbackId;
}

Get Playback ID

Retrieve details of a specific playback ID:

$mediaId = 'your-media-id';
$playbackId = 'your-playback-id';
$response = $sdk->playback->getPlaybackId(
    mediaId: $mediaId,
    playbackId: $playbackId
);
if ($response->getPlaybackIdSuccessResponse !== null) {
    $playback = $response->getPlaybackIdSuccessResponse->data;
    echo "Playback ID: " . $playback->id . "\n";
    echo "Access Policy: " . $playback->accessPolicy . "\n";
}

Delete Media Playback ID

Remove a playback ID:

$mediaId = 'your-media-id';
$playbackId = 'your-playback-id';

$response = $sdk->playback->deleteMediaPlaybackId(
    mediaId: $mediaId,
    playbackId: $playbackId
);

if ($response->statusCode === 204) {
    echo "Playback ID deleted successfully!";
}


AI-Powered Media Features

The FastPix SDK includes powerful AI features for media enhancement and analysis.

Generate Video Summary

Generate an AI-powered summary of your video content:

$mediaId = 'your-media-id';
$requestBody = new Operations\UpdateMediaSummaryRequestBody(
    generate: true,
    summaryLength: 120, // Optional: specify word count
);
$response = $sdk->inVideoAIFeatures->updateMediaSummary(
    mediaId: $mediaId,
    requestBody: $requestBody
);
if ($response->updateMediaSummarySuccessResponse !== null) {
    echo "Video summary generation initiated successfully!";
}

Generate Video Chapters

Automatically generate chapters for your video:

$mediaId = 'your-media-id';

$requestBody = new Operations\UpdateMediaChaptersRequestBody(
    chapters: true,
);

$response = $sdk->inVideoAIFeatures->updateMediaChapters(
    mediaId: $mediaId,
    requestBody: $requestBody
);

if ($response->updateMediaChaptersSuccessResponse !== null) {
    echo "Video chapters generation initiated successfully!";
}

Extract Named Entities

Extract named entities (people, places, organizations) from your video:

$mediaId = 'your-media-id';

$requestBody = new Operations\UpdateMediaNamedEntitiesRequestBody(
    namedEntities: true,
);

$response = $sdk->inVideoAIFeatures->updateMediaNamedEntities(
    mediaId: $mediaId,
    requestBody: $requestBody
);

if ($response->updateMediaNamedEntitiesSuccessResponse !== null) {
    echo "Named entities extraction initiated successfully!";
}

Content Moderation

Enable AI-powered content moderation for inappropriate content:

$mediaId = 'your-media-id';

$requestBody = new Operations\UpdateMediaModerationRequestBody(
    moderation: new Operations\UpdateMediaModerationModeration(
        type: Components\MediaType::Video,
    ),
);

$response = $sdk->inVideoAIFeatures->updateMediaModeration(
    mediaId: $mediaId,
    requestBody: $requestBody
);

if ($response->updateMediaModerationSuccessResponse !== null) {
    echo "Content moderation enabled successfully!";
}


Media Tracks Management

Manage audio and subtitle tracks for your media.

Add Media Track

Add an audio or subtitle track to your media:

$mediaId = 'your-media-id';

$request = new Components\AddTrackRequest(
    type: Components\AddTrackRequestType::Audio,
    language: 'en',
    url: 'https://example.com/audio-track.mp3',
);

$response = $sdk->manageVideos->addMediaTrack(
    mediaId: $mediaId,
    request: $request
);

if ($response->addMediaTrackSuccessResponse !== null) {
    echo "Media track added successfully!";
}

Update Media Track

Update an existing media track:

$mediaId = 'your-media-id';
$trackId = 'your-track-id';

$request = new Components\UpdateTrackRequest(
    language: 'es',
    url: 'https://example.com/updated-track.mp3',
);

$response = $sdk->manageVideos->updateMediaTrack(
    mediaId: $mediaId,
    trackId: $trackId,
    request: $request
);

if ($response->updateMediaTrackSuccessResponse !== null) {
    echo "Media track updated successfully!";
}

Delete Media Track

Remove a media track:

$mediaId = 'your-media-id';
$trackId = 'your-track-id';
$response = $sdk->manageVideos->deleteMediaTrack(
    mediaId: $mediaId,
    trackId: $trackId
);
if ($response->statusCode === 204) {
    echo "Media track deleted successfully!";
}

Generate Subtitle Track

Generate subtitles for your media:

$mediaId = 'your-media-id';
$trackId = 'your-track-id';
$response = $sdk->manageVideos->generateSubtitleTrack(
    mediaId: $mediaId,
    trackId: $trackId
);
if ($response->generateSubtitleTrackSuccessResponse !== null) {
    echo "Subtitle generation initiated successfully!";
}

Upload Management

Manage uploads and track their status.

List Uploads

Get all unused upload URLs:

$response = $sdk->manageVideos->listUploads(
    limit: 10,
    offset: 1
);
if ($response->object !== null) {
    $uploads = $response->object->data;
    foreach ($uploads as $upload) {
        echo "Upload ID: " . $upload->id . "\n";
        echo "Status: " . $upload->status . "\n";
    }
}

Cancel Upload

Cancel an ongoing upload:

$uploadId = 'your-upload-id';
$response = $sdk->manageVideos->cancelUpload(
    uploadId: $uploadId
);
if ($response->statusCode === 200) {
    echo "Upload cancelled successfully!";
}


Media Clips

Work with media clips and live stream clips.

Get Media Clips

Retrieve all clips of a media file:

$sourceMediaId = 'your-source-media-id';
$response = $sdk->manageVideos->getMediaClips(
    sourceMediaId: $sourceMediaId
);
if ($response->mediaClipsResponse !== null) {
    $clips = $response->mediaClipsResponse->data;
    foreach ($clips as $clip) {
        echo "Clip ID: " . $clip->id . "\n";
        echo "Start Time: " . $clip->startTime . "\n";
        echo "End Time: " . $clip->endTime . "\n";
    }
}

Get Live Clips

Retrieve all clips of a live stream:

$livestreamId = 'your-livestream-id';
$response = $sdk->manageVideos->listLiveClips(
    livestreamId: $livestreamId
);
if ($response->object !== null) {
    $clips = $response->object->data;
    foreach ($clips as $clip) {
        echo "Clip ID: " . $clip->id . "\n";
        echo "Duration: " . $clip->duration . "\n";
    }
}


Playlist Management

Create and manage playlists for organizing your media content.

Create Playlist

Create a new playlist:

$request = new Components\CreatePlaylistRequest(
    name: 'My Video Playlist',
    referenceId: 'playlist-001',
    type: Components\CreatePlaylistRequestType::Manual,
    description: 'A collection of my favorite videos',
);
$response = $sdk->playlist->createAPlaylist(
    request: $request
);
if ($response->playlistCreatedResponse !== null) {
    echo "Playlist created successfully!";
    echo "Playlist ID: " . $response->playlistCreatedResponse->data->id;
}


Playlist Management

Create and manage playlists for organizing your media content.

Create Playlist

Create a new playlist:

$request = new Components\CreatePlaylistRequest(
    name: 'My Video Playlist',
    referenceId: 'playlist-001',
    type: Components\CreatePlaylistRequestType::Manual,
    description: 'A collection of my favorite videos',
);
$response = $sdk->playlist->createAPlaylist(
    request: $request
);
if ($response->playlistCreatedResponse !== null) {
    echo "Playlist created successfully!";
    echo "Playlist ID: " . $response->playlistCreatedResponse->data->id;
}

List All Playlists

Retrieve all playlists in your workspace:

$response = $sdk->playlist->getAllPlaylists(
    limit: 10,
    offset: 1
);
if ($response->getAllPlaylistsResponse !== null) {
    $playlists = $response->getAllPlaylistsResponse->data;
    foreach ($playlists as $playlist) {
        echo "Playlist ID: " . $playlist->id . "\n";
        echo "Name: " . $playlist->name . "\n";
        echo "Media Count: " . count($playlist->media) . "\n";
    }
}


Get Playlist by ID

Retrieve details of a specific playlist:

$playlistId = 'your-playlist-id';
$response = $sdk->playlist->getPlaylistById(
    playlistId: $playlistId
);
if ($response->playlistByIdResponse !== null) {
    $playlist = $response->playlistByIdResponse->data;
    echo "Playlist Name: " . $playlist->name . "\n";
    echo "Description: " . $playlist->description . "\n";
    echo "Media Count: " . count($playlist->media) . "\n";
}

Update Playlist

Update playlist details:

$playlistId = 'your-playlist-id';
$request = new Components\UpdatePlaylistRequest(
    name: 'Updated Playlist Name',
    description: 'Updated description',
    order: Components\UpdatePlaylistRequestOrder::Desc,
);
$response = $sdk->playlist->updateAPlaylist(
    playlistId: $playlistId,
    request: $request
);
if ($response->playlistCreatedResponse !== null) {
    echo "Playlist updated successfully!";
}

Add Media to Playlist

Add media items to a playlist:

$playlistId = 'your-playlist-id';
$request = new Components\UpdatePlaylistMediaRequest(
    media: [
        new Components\PlaylistItem(
            mediaId: 'media-id-1',
            order: 1,
        ),
        new Components\PlaylistItem(
            mediaId: 'media-id-2',
            order: 2,
        ),
    ],
);
$response = $sdk->playlist->addMediaToPlaylist(
    playlistId: $playlistId,
    request: $request
);
if ($response->playlistByIdResponse !== null) {
    echo "Media added to playlist successfully!";
}

Replace Playlist Media

Replace all media in a playlist:

$playlistId = 'your-playlist-id';
$request = new Components\ReplacePlaylistMediaRequest(
    media: [
        new Components\PlaylistItem(
            mediaId: 'new-media-id-1',
            order: 1,
        ),
        new Components\PlaylistItem(
            mediaId: 'new-media-id-2',
            order: 2,
        ),
    ],
);
$response = $sdk->playlist->replacePlaylistMedia(
    playlistId: $playlistId,
    request: $request
);
if ($response->playlistMediaReplacedResponse !== null) {
    echo "Playlist media replaced successfully!";
}

Delete Media from Playlist

Remove specific media from a playlist:

$playlistId = 'your-playlist-id';
$request = new Components\DeletePlaylistMediaRequest(
    mediaIds: ['media-id-to-remove'],
);
$response = $sdk->playlist->deleteMediaFromPlaylist(
    playlistId: $playlistId,
    request: $request
);
if ($response->playlistByIdResponse !== null) {
    echo "Media removed from playlist successfully!";
}

Delete Playlist

Remove an entire playlist:

$playlistId = 'your-playlist-id';
$response = $sdk->playlist->deleteAPlaylist(
    playlistId: $playlistId
);
if ($response->statusCode === 204) {
    echo "Playlist deleted successfully!";
}


Live Stream Operations

Create Live Stream

Create a new live stream for broadcasting:

$request = new Components\CreateLiveStreamRequest(
    playbackSettings: new Components\PlaybackSettings(
        accessPolicy: Components\BasicAccessPolicy::Public,
    ),
    inputMediaSettings: new Components\InputMediaSettings(
        mediaPolicy: Components\BasicAccessPolicy::Public,
        metadata: [
            'title' => 'Live Event',
            'description' => 'Live streaming event',
        ],
    ),
);
$response = $sdk->startLiveStream->createNewStream(
    request: $request
);
if ($response->liveStreamResponseDTO !== null) {
    $streamId = $response->liveStreamResponseDTO->data->streamId;
    echo "Live stream created successfully!";
    echo "Stream ID: " . $streamId;
}

List All Live Streams

Retrieve all live streams in your workspace:

$response = $sdk->manageLiveStream->getAllStreams(
    limit: 10,
    offset: 1
);
if ($response->getStreamsResponse !== null) {
    $streams = $response->getStreamsResponse->data;
    foreach ($streams as $stream) {
        echo "Stream ID: " . $stream->streamId . "\n";
        echo "Name: " . $stream->name . "\n";
        echo "Status: " . $stream->status . "\n";
    }
}

Get Live Stream by ID

Retrieve details of a specific live stream:

$streamId = 'your-stream-id';

$response = $sdk->manageLiveStream->getLiveStreamById(
    streamId: $streamId
);
if ($response->liveStreamByIdResponse !== null) {
    $stream = $response->liveStreamByIdResponse->data;
    echo "Stream ID: " . $stream->streamId . "\n";
    echo "Name: " . $stream->name . "\n";
    echo "Status: " . $stream->status . "\n";
    echo "Stream URL: " . $stream->streamUrl . "\n";
}

Update Live Stream

Update live stream settings and metadata:

$streamId = 'your-stream-id';
$request = new Components\UpdateLiveStreamRequest(
    name: 'Updated Stream Name',
    metadata: [
        'title' => 'Updated Live Event',
        'description' => 'Updated description',
    ],
    accessPolicy: Components\UpdateLiveStreamRequestAccessPolicy::Private,
);
$response = $sdk->manageLiveStream->updateLiveStream(
    streamId: $streamId,
    request: $request
);
if ($response->liveStreamUpdatedResponse !== null) {
    echo "Live stream updated successfully!";
}

Delete Live Stream

Remove a live stream:

$streamId = 'your-stream-id';
$response = $sdk->manageLiveStream->deleteLiveStream(
    streamId: $streamId
);
if ($response->statusCode === 204) {
    echo "Live stream deleted successfully!";
}

Create Live Stream Playback ID

Generate a playback ID for live stream access:

$streamId = 'your-stream-id';

$request = new Components\CreateLiveStreamPlaybackIdRequest(
    accessPolicy: Components\CreateLiveStreamPlaybackIdRequestAccessPolicy::Public,
);
$response = $sdk->livePlayback->createPlaybackIdOfStream(
    streamId: $streamId,
    request: $request
);
if ($response->playbackIdCreatedResponse !== null) {
    $playbackId = $response->playbackIdCreatedResponse->data->id;
    echo "Live stream playback ID created: " . $playbackId;
}

Delete Live Stream Playback ID

Remove a live stream playback ID:

$streamId = 'your-stream-id';
$playbackId = 'your-playback-id';

$response = $sdk->livePlayback->deletePlaybackIdOfStream(
    streamId: $streamId,
    playbackId: $playbackId
);
if ($response->statusCode === 204) {
    echo "Live stream playback ID deleted successfully!";
}

Get Live Stream Playback ID

Retrieve playback details for a live stream:

$streamId = 'your-stream-id';
$playbackId = 'your-playback-id';
$response = $sdk->livePlayback->getLiveStreamPlaybackId(
    streamId: $streamId,
    playbackId: $playbackId
);
if ($response->liveStreamPlaybackIdResponse !== null) {
    $playback = $response->liveStreamPlaybackIdResponse->data;
    echo "Playback Policy: " . $playback->accessPolicy;
}

Create Simulcast

Create a simulcast for broadcasting to multiple platforms simultaneously:

$streamId = 'your-stream-id';
$request = new Components\SimulcastRequest(
    url: 'rtmp://your-rtmp-url',
    streamKey: 'your-stream-key',
    metadata: [
        'platform' => 'fastpix',
    ],
);
$response = $sdk->simulcastStream->createSimulcastOfStream(
    streamId: $streamId,
    request: $request
);
if ($response->simulcastCreatedResponse !== null) {
    echo "Simulcast created successfully!";
    echo "Simulcast ID: " . $response->simulcastCreatedResponse->data->id;
}

Get Simulcast Details

Retrieve details of a specific simulcast:

$streamId = 'your-stream-id';
$simulcastId = 'your-simulcast-id';
$response = $sdk->simulcastStream->getSpecificSimulcastOfStream(
    streamId: $streamId,
    simulcastId: $simulcastId
);
if ($response->simulcastDetailsResponse !== null) {
    $simulcast = $response->simulcastDetailsResponse->data;
    echo "Simulcast ID: " . $simulcast->id . "\n";
    echo "Platform: " . $simulcast->platform . "\n";
    echo "Status: " . $simulcast->status . "\n";
}

Update Simulcast

Update simulcast configuration:

$streamId = 'your-stream-id';
$simulcastId = 'your-simulcast-id';

$request = new Components\SimulcastUpdateRequest(
    isEnabled: true,
    metadata: [
        'status' => 'active',
    ],
);
$response = $sdk->simulcastStream->updateSpecificSimulcastOfStream(
    streamId: $streamId,
    simulcastId: $simulcastId,
    request: $request
);
if ($response->simulcastUpdatedResponse !== null) {
    echo "Simulcast updated successfully!";
}

Delete Simulcast

Remove a simulcast:

$streamId = 'your-stream-id';
$simulcastId = 'your-simulcast-id';
$response = $sdk->simulcastStream->deleteSimulcastOfStream(
    streamId: $streamId,
    simulcastId: $simulcastId
);
if ($response->statusCode === 204) {
    echo "Simulcast deleted successfully!";
}

Live Stream Control Operations

Enable Live Stream

Enable a live stream for broadcasting:

$streamId = 'your-stream-id';
$response = $sdk->manageLiveStream->enableLiveStream(
    streamId: $streamId
);
if ($response->statusCode === 200) {
    echo "Live stream enabled successfully!";
}

Disable Live Stream

Disable a live stream:

$streamId = 'your-stream-id';
$response = $sdk->manageLiveStream->disableLiveStream(
    streamId: $streamId
);
if ($response->statusCode === 200) {
    echo "Live stream disabled successfully!";
}

Complete Live Stream

Mark a live stream as completed:

$streamId = 'your-stream-id';
$response = $sdk->manageLiveStream->completeLiveStream(
    streamId: $streamId
);
if ($response->statusCode === 200) {
    echo "Live stream completed successfully!";
}

Get Live Stream Viewer Count

Get the current viewer count for a live stream:

$streamId = 'your-stream-id';
$response = $sdk->manageLiveStream->getLiveStreamViewerCountById(
    streamId: $streamId
);
if ($response->viewerCountResponse !== null) {
    $viewerCount = $response->viewerCountResponse->data;
    echo "Current Viewers: " . $viewerCount->viewerCount . "\n";
    echo "Peak Viewers: " . $viewerCount->peakViewers . "\n";
}

Simulcast Management

List Simulcast Targets

Get all simulcast targets for a stream:

$streamId = 'your-stream-id';
$response = $sdk->simulcastStream->listSimulcastsOfStream(
    streamId: $streamId
);
if ($response->simulcastsListResponse !== null) {
    $simulcasts = $response->simulcastsListResponse->data;
    foreach ($simulcasts as $simulcast) {
        echo "Simulcast ID: " . $simulcast->id . "\n";
        echo "Platform: " . $simulcast->platform . "\n";
        echo "Status: " . $simulcast->status . "\n";
    }
}

DRM Configuration Operations

Get DRM Configuration List

Retrieve all DRM configurations in your workspace:

$response = $sdk->drmConfigurations->getDrmConfiguration(
    offset: 1,
    limit: 10
);
if ($response->object !== null) {
    $configurations = $response->object->data;
    foreach ($configurations as $config) {
        echo "DRM Configuration ID: " . $config->id . "\n";
        echo "Name: " . $config->name . "\n";
    }
}

Get DRM Configuration by ID

Retrieve details of a specific DRM configuration:

$drmConfigurationId = 'your-drm-configuration-id';
$response = $sdk->drmConfigurations->getDrmConfigurationById(
    drmConfigurationId: $drmConfigurationId
);
if ($response->object !== null) {
    $config = $response->object;
    echo "DRM Configuration ID: " . $config->id . "\n";
    echo "Name: " . $config->name . "\n";
    echo "Description: " . $config->description . "\n";
}


Signing Keys Operations

Create Signing Key

Generate a new signing key pair for JWT authentication:

$response = $sdk->signingKeys->createSigningKey();
if ($response->createResponse !== null) {
    $keyData = $response->createResponse->data;
    echo "Signing key created successfully!";
    echo "Key ID: " . $keyData->id . "\n";
    echo "Private Key: " . $keyData->privateKey . "\n";
    echo "Created At: " . $keyData->createdAt->format('Y-m-d H:i:s') . "\n";
}

List Signing Keys

Retrieve all signing keys in your workspace:

$response = $sdk->signingKeys->listSigningKeys(
    offset: 1,
    limit: 10
);
if ($response->listResponse !== null) {
    $keys = $response->listResponse->data;
    foreach ($keys as $key) {
        echo "Key ID: " . $key->id . "\n";
        echo "Created At: " . $key->createdAt->format('Y-m-d H:i:s') . "\n";
    }
}

Get Signing Key by ID

Retrieve details of a specific signing key:

$keyId = 'your-key-id';
$response = $sdk->signingKeys->getSigningKeyById(
    keyId: $keyId
);
if ($response->getResponse !== null) {
    $key = $response->getResponse->data;
    echo "Key ID: " . $key->id . "\n";
    echo "Created At: " . $key->createdAt->format('Y-m-d H:i:s') . "\n";
}

Delete Signing Key

Remove a signing key:

$keyId = 'your-key-id';
$response = $sdk->signingKeys->deleteSigningKey(
    keyId: $keyId
);
if ($response->statusCode === 204) {
    echo "Signing key deleted successfully!";
}


Video Data Operations

The FastPix SDK provides comprehensive analytics and data operations to help you understand your content performance and user engagement

Views Analytics

Get Views Data

Retrieve detailed view analytics for your videos:

$response = $sdk->views->getViewsData(
    offset: 1,
    limit: 10
);
if ($response->getViewsDataSuccessResponse !== null) {
    $views = $response->getViewsDataSuccessResponse->data;
    foreach ($views as $view) {
        echo "View ID: " . $view->id . "\n";
        echo "Video ID: " . $view->videoId . "\n";
        echo "Viewer ID: " . $view->viewerId . "\n";
        echo "Watch Time: " . $view->watchTime . "\n";
    }
}

Get Views by Dimension

Get view data filtered by specific dimensions:

$viewId = 'your-view-id';
$response = $sdk->views->getViewsByDimension(
    viewId: $viewId
);
if ($response->getViewsByDimensionSuccessResponse !== null) {
    $viewData = $response->getViewsByDimensionSuccessResponse->data;
    echo "Dimension: " . $viewData->dimension . "\n";
    echo "Value: " . $viewData->value . "\n";
    echo "Count: " . $viewData->count . "\n";
}

Get Top Content Views

Retrieve views data for your top-performing content:

$response = $sdk->views->getViewsByTopContent(
    offset: 1,
    limit: 10
);
if ($response->getViewsByTopContentSuccessResponse !== null) {
    $topContent = $response->getViewsByTopContentSuccessResponse->data;
    foreach ($topContent as $content) {
        echo "Video ID: " . $content->videoId . "\n";
        echo "Total Views: " . $content->totalViews . "\n";
        echo "Rank: " . $content->rank . "\n";
    }
}

Get Timeseries Views

Get concurrent viewers data over time:

$response = $sdk->views->getTimeseriesViews(
    startDate: '2024-01-01',
    endDate: '2024-01-31'
);
if ($response->getTimeseriesViewsSuccessResponse !== null) {
    $timeseries = $response->getTimeseriesViewsSuccessResponse->data;
    foreach ($timeseries as $dataPoint) {
        echo "Timestamp: " . $dataPoint->timestamp . "\n";
        echo "Concurrent Viewers: " . $dataPoint->concurrentViewers . "\n";
    }
}

Get Views Count

Get filtered views count by dimension:

$response = $sdk->views->getViewsCount(
    dimension: 'country',
    value: 'US'
);
if ($response->getViewsCountSuccessResponse !== null) {
    $count = $response->getViewsCountSuccessResponse->data;
    echo "Total Views: " . $count->totalViews . "\n";
    echo "Unique Viewers: " . $count->uniqueViewers . "\n";
}

Dimensions Analytics

List Dimensions

Get all available dimensions for analytics:

$response = $sdk->dimensions->listDimensions();
if ($response->listDimensionsSuccessResponse !== null) {
    $dimensions = $response->listDimensionsSuccessResponse->data;
    foreach ($dimensions as $dimension) {
        echo "Dimension: " . $dimension->name . "\n";
        echo "Type: " . $dimension->type . "\n";
        echo "Description: " . $dimension->description . "\n";
    }
}

Get Dimensions Data

Retrieve dimensional analytics data:

$dimensionsId = 'your-dimensions-id';
$response = $sdk->dimensions->getDimensionsData(
    dimensionsId: $dimensionsId
);
if ($response->getDimensionsDataSuccessResponse !== null) {
    $dimensionData = $response->getDimensionsDataSuccessResponse->data;
    echo "Dimension: " . $dimensionData->name . "\n";
    echo "Values: " . json_encode($dimensionData->values) . "\n";
}

Metrics Analytics

Get Metrics Breakdown

Retrieve detailed metrics breakdown:

$metricId = 'your-metric-id';
$response = $sdk->metrics->getMetricsBreakdown(
    metricId: $metricId
);
if ($response->getMetricsBreakdownSuccessResponse !== null) {
    $breakdown = $response->getMetricsBreakdownSuccessResponse->data;
    foreach ($breakdown as $item) {
        echo "Category: " . $item->category . "\n";
        echo "Value: " . $item->value . "\n";
        echo "Count: " . $item->count . "\n";
    }
}

Get Overall Video Metrics

Retrieve overall metrics for your videos:

$metricId = 'your-metric-id';
$response = $sdk->metrics->getVideoMetrics(
    metricId: $metricId
);
if ($response->getVideoMetricsSuccessResponse !== null) {
    $metrics = $response->getVideoMetricsSuccessResponse->data;
    echo "Total Views: " . $metrics->totalViews . "\n";
    echo "Unique Viewers: " . $metrics->uniqueViewers . "\n";
    echo "Watch Time: " . $metrics->watchTime . "\n";
    echo "Engagement Rate: " . $metrics->engagementRate . "\n";
}

Get Metrics Timeseries

Get metrics data over time:

$metricId = 'your-metric-id';
$response = $sdk->metrics->getMetricsTimeseries(
    metricId: $metricId,
    startDate: '2024-01-01',
    endDate: '2024-01-31'
);
if ($response->getMetricsTimeseriesSuccessResponse !== null) {
    $timeseries = $response->getMetricsTimeseriesSuccessResponse->data;
    foreach ($timeseries as $dataPoint) {
        echo "Date: " . $dataPoint->date . "\n";
        echo "Value: " . $dataPoint->value . "\n";
    }
}

Get Metrics Comparison

Compare metrics across different periods or content:

$response = $sdk->metrics->getMetricsComparison(
    metricId: 'your-metric-id',
    compareWith: 'previous_period'
);
if ($response->getMetricsComparisonSuccessResponse !== null) {
    $comparison = $response->getMetricsComparisonSuccessResponse->data;
    echo "Current Period: " . $comparison->currentValue . "\n";
    echo "Previous Period: " . $comparison->previousValue . "\n";
    echo "Change: " . $comparison->changePercentage . "%\n";
}

Error Analytics

Get Error Data

Retrieve error analytics and debugging information:

$response = $sdk->errors->getErrorData(
    offset: 1,
    limit: 10
);
if ($response->getErrorDataSuccessResponse !== null) {
    $errors = $response->getErrorDataSuccessResponse->data;
    foreach ($errors as $error) {
        echo "Error ID: " . $error->id . "\n";
        echo "Error Type: " . $error->type . "\n";
        echo "Message: " . $error->message . "\n";
        echo "Timestamp: " . $error->timestamp . "\n";
    }
}


Error Handling

Handling errors in this SDK should largely match your expectations. All operations return a response object or throw an exception.

By default an API error will throw a FastPix\Sdk\Models\Errors\APIException exception, which has the following properties:

PropertyTypeDescription
getMessage()stringThe error message
getStatusCode()intThe HTTP status code
getRawResponse()stringThe raw HTTP response
getBody()stringThe response content

Example Error Handling

try {
    $response = $sdk->startLiveStream->createNewStream(request: $request);

    if ($response->liveStreamResponseDTO !== null) {
        // Handle success
        echo "Stream created: " . $response->liveStreamResponseDTO->data->streamId;
    }
} catch (Errors\UnauthorizedException $ex) {
    // Handle authentication errors
    echo "Authentication failed: " . $ex->getMessage();
} catch (Errors\ValidationErrorResponse $ex) {
    // Handle validation errors
    echo "Validation error: " . $ex->getMessage();
} catch (Errors\APIException $ex) {
    // Handle general API errors
    echo "API error: " . $ex->getMessage();
    echo "Status code: " . $ex->getStatusCode();
}

Retry Configuration

Configure Automatic Retries

$retryConfig = new RetryConfigBackoff(
    initialIntervalMs: 500,
    maxIntervalMs: 60000,
    exponent: 1.5,
    maxElapsedTimeMs: 3600000,
    retryConnectionErrors: false,
);
$sdk = SDK::builder()
    ->setSecurity(
        new Components\Security(
            username: 'your-access-token',
            password: 'your-secret-key',
        )
    )
    ->setRetryConfig($retryConfig)
    ->build();

Support & Resources