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-mainProduction 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 installImport 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:
| Property | Type | Description |
|---|---|---|
getMessage() | string | The error message |
getStatusCode() | int | The HTTP status code |
getRawResponse() | string | The raw HTTP response |
getBody() | string | The 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
- Documentation: Visit the FastPix API Reference for detailed API documentation
- GitHub Issues: Report bugs or request features on the GitHub repository
- FastPix Platform: dashboard.fastpix.io
For any technical support or SDK-related queries, reach out at:
Email: [email protected]
Updated 14 days ago