From 5b085194a27e7ebcbf6b70b621c7c548b009f021 Mon Sep 17 00:00:00 2001 From: szekelyzol Date: Tue, 16 Jul 2024 16:54:32 +0200 Subject: [PATCH 1/5] Separating delivery and analytics tags --- README.md | 14 +- _assets/css/style.css | 10 +- analytics/README.md | 46 +++ analytics/analytics-quickstart.md | 281 ++++++++++++++++++ .../analytics.md | 0 analytics/navigation.yaml | 14 + delivery-analytics/navigation.yaml | 49 --- {delivery-analytics => delivery}/README.md | 22 +- {delivery-analytics => delivery}/ads.md | 0 .../delivery-quickstart.md | 272 +---------------- .../domain-referrer.md | 0 delivery/navigation.yaml | 42 +++ .../player-customization.md | 0 .../private-video-delivery-web-browser.md | 0 ...ideo-delivery-with-mp4-built-in-players.md | 0 .../private-video-get-started.md | 0 ...rivate-video-on-hls-or-external-players.md | 0 .../private-video-session-tokens.md | 0 ...s-with-custom-players-session-retention.md | 0 .../using-custom-domains.md | 0 .../video-playback-features.md | 0 .../video-privacy-access-management.md | 0 doctave.yaml | 70 +++-- 23 files changed, 453 insertions(+), 367 deletions(-) create mode 100644 analytics/README.md create mode 100644 analytics/analytics-quickstart.md rename {delivery-analytics => analytics}/analytics.md (100%) create mode 100644 analytics/navigation.yaml delete mode 100644 delivery-analytics/navigation.yaml rename {delivery-analytics => delivery}/README.md (77%) rename {delivery-analytics => delivery}/ads.md (100%) rename delivery-analytics/delivery-analytics-quickstart.md => delivery/delivery-quickstart.md (70%) rename {delivery-analytics => delivery}/domain-referrer.md (100%) create mode 100644 delivery/navigation.yaml rename {delivery-analytics => delivery}/player-customization.md (100%) rename {delivery-analytics => delivery}/private-video-delivery-web-browser.md (100%) rename {delivery-analytics => delivery}/private-video-delivery-with-mp4-built-in-players.md (100%) rename {delivery-analytics => delivery}/private-video-get-started.md (100%) rename {delivery-analytics => delivery}/private-video-on-hls-or-external-players.md (100%) rename {delivery-analytics => delivery}/private-video-session-tokens.md (100%) rename {delivery-analytics => delivery}/private-videos-with-custom-players-session-retention.md (100%) rename {delivery-analytics => delivery}/using-custom-domains.md (100%) rename {delivery-analytics => delivery}/video-playback-features.md (100%) rename {delivery-analytics => delivery}/video-privacy-access-management.md (100%) diff --git a/README.md b/README.md index 91c9a5f0..6a2b0e3d 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Welcome to the developer documentation of api.video! Our platform empowers devel Check out the products! - + api.video's hosting service enables you to upload and store videos, and then deliver and share them easily across various devices and platforms. @@ -33,12 +33,18 @@ Check out the products! - + api.video lets you customize a large part of the delivery, whether it's the player's branding or adding captions, chapters, and watermarks. - - + + + + + + api.video provides video and live stream analytics to track viewer engagement, offering real time data on views, watch time, demographics, and drop-off points. + + diff --git a/_assets/css/style.css b/_assets/css/style.css index cc1cc12a..7e2f5d06 100644 --- a/_assets/css/style.css +++ b/_assets/css/style.css @@ -409,15 +409,19 @@ } .landing-page-card.Video .landing-page-card-header { - background: linear-gradient(215deg, #fa5b30 -5.18%, #f7b500 179.35%); + background: linear-gradient(215deg, #FA5B30 -5.18%, #F7B500 179.35%); } .landing-page-card.Live .landing-page-card-header { - background: linear-gradient(76deg, #642180 -24.15%, #af2a72 93.03%); + background: linear-gradient(76deg, #642180 -24.15%, #AF2A72 93.03%); } .landing-page-card.Delivery .landing-page-card-header { - background: linear-gradient(76deg, #4eb2dd -24.15%, #642180 93.03%); + background: linear-gradient(76deg, #186EB0 -24.15%, #3BC8F4 93.03%); +} + +.landing-page-card.Analytics .landing-page-card-header { + background: linear-gradient(76deg, #22863E -24.15%, #9DD442 93.03%); } .landing-page-card-header { diff --git a/analytics/README.md b/analytics/README.md new file mode 100644 index 00000000..0165930f --- /dev/null +++ b/analytics/README.md @@ -0,0 +1,46 @@ +--- +title: Analytics overview +toc: false +breadcrumbs: false +meta: + description: This page serves as a foundational guide to integrating api.video's solutions for video delivery, player customization, and analytics. +--- + +
+ +# How does video delivery work? + + api.video lets you customize a large part of the delivery, from the branding of the player, to adding captions, chapters, and watermarks. You have full control over how you deliver the content to your users. The flexibility does not end with player customization, you can build your own player in order to deliver the content in the best form you see fit. + +
+ +--- + +## Start delivering with api.video + + + + ![Analytics quickstart](/_assets/icons/player-customization.svg) + + **Analytics quickstart**\ + Learn how to make the most of your content delivery through branding, customization, and gathering analytics. + + [Learn more ›](/analytics/analytics-quickstart) + + + ![Analytics & data](/_assets/icons/analytics.svg) + + **Analytics & data**\ + Start collecting delivery event data about your videos and live streams. + + [Learn more ›](/analytics/analytics) + + + ![Analytics SDKs](/_assets/icons/analytics.svg) + + **Analytics SDKs**\ + Check out api.video's dedicated libraries and SDKs for delivery analytics. + + [Learn more ›](/sdks/player#player-analytics-sdks) + + \ No newline at end of file diff --git a/analytics/analytics-quickstart.md b/analytics/analytics-quickstart.md new file mode 100644 index 00000000..7faf3a79 --- /dev/null +++ b/analytics/analytics-quickstart.md @@ -0,0 +1,281 @@ +--- +title: Analytics with api.video +meta: + description: Set up the api.video player and start working with video analytics in 5 minutes +--- + +# Getting started with analytics + +api.video provides you with powerful tools that enable you to deliver content to your users with great customization and branding while making sure that you get all of the data you need to analyze the viewer's behavior. + +There are two parts to this tutorial, where we will jump into the player capabilities and then look at how to analyze the data we've received from the viewers. + +## Get started with analytics + +After we have a cool branded player, it would be great to get some data on your users. For that purpose, we have the api.video Analytics for your disposal. + + + +Please note, that we will only collect analytics from videos that were played through the api.video player. If you are using a custom player, you can leverage the [analytics SDKs](/sdks/player#player-analytics-sdks) to pass on the analytics to api.video. + + +In this example, we will check what countries your video was watched the most. + +### Preparation + + +In this example, we will be using the [api.video client libraries](/sdks/api-clients), however, is you prefer to use cURL or make the requests yourself, you are welcome to follow along with the [API reference documentation](/reference/api/Player-Themes). + + +### Add & initialize the api.video client library + + +If you've followed through the whole tutorial, you can skip this step + + +Let's add the api.video client library to our code. + + +Make sure to install the modules / libraries on your environment beforehand. + + +The client library takes your API key, which you can [find here](https://dashboard.api.video/project-settings/api-keys). Let's pass it the API key and initialize the client. + +You can learn more about authentication [here](/reference/authentication-guide). + + + +```javascript +const ApiVideoClient = require('@api.video/nodejs-client') +``` +```python +import apivideo +from apivideo.api import player_themes_api +from apivideo.model.player_theme_creation_payload import PlayerThemeCreationPayload +from apivideo.model.player_theme import PlayerTheme +``` +```go +package main + +import ( + "context" + "fmt" + "os" + apivideosdk "github.com/apivideo/api.video-go-client" +) + +func main() { +} +``` +```java +import video.api.client.ApiVideoClient; +import video.api.client.api.ApiException; +import video.api.client.api.models.*; +import video.api.client.api.clients.PlayerThemesApi; +import java.util.*; +``` +```csharp +// First add the "ApiVideo" NuGet package to your project +// Documentation: https://github.com/apivideo/api.video-csharp-client/blob/main/docs/PlayerThemesApi.md#create + +using System.Diagnostics; +using ApiVideo.Client; +``` +```php + + +### Get the count of plays by country + +As we planned, in this example, we want to analyze the viewers' geo-location. For that task, we will utilize the api.video client library and make use of the analytics endpoint to get the count of plays for a specific video. + +If you are interested in a more in-depth overview, head over to the [Analytics & data page](/delivery-analytics/analytics) to get more information. + +Notice that we are passing few parameters: +* Video Id: This represents the video you want to analyze, you can get the video you've used before in this example. +* dimension: This parameter will accept a few values, including `country`` in order to return the determine which dimension you would like to analyze. +* from: is a required field. The date from which the data should start. + + + +```javascript +const client = new ApiVideoClient({ apiKey: "YOUR_API_KEY" }); +const from = "2023-09-01"; +const dimension = "country"; +const filter = "videoId:vi3q7HxhApxRF1c8F8r6VeaI"; +const videoPlays = await client.analytics.getVideosPlays({ + from, dimension, to, filter, currentPage, pageSize +}); +``` +```php +analytics()->getVideosPlays($from, $dimension, array( + 'filter' => "videoId:vi3q7HxhApxRF1c8F8r6VeaI", +)); +``` +```python +import apivideo +from apivideo.api import analytics_api +from apivideo.model.analytics_plays_response import AnalyticsPlaysResponse +from apivideo.model.not_found import NotFound +from apivideo.model.analytics_plays400_error import AnalyticsPlays400Error +from pprint import pprint +# Enter a context with an instance of the API client +with apivideo.AuthenticatedApiClient(__API_KEY__) as api_client: + # Create an instance of the API class + api_instance = analytics_api.AnalyticsApi(api_client) + _from = dateutil_parser('2023-06-01').date() + dimension = "country" + filter = "videoId:vi3q7HxhApxRF1c8F8r6VeaI" + try: + # Get play events for video + api_response = api_instance.get_videos_plays(_from, dimension) + pprint(api_response) + except apivideo.ApiException as e: + print("Exception when calling AnalyticsApi->get_videos_plays: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # Get play events for video + api_response = api_instance.get_videos_plays(_from, dimension, to=to, filter=filter, current_page=current_page, page_size=page_size) + pprint(api_response) + except apivideo.ApiException as e: + print("Exception when calling AnalyticsApi->get_videos_plays: %s\n" % e) + +``` +```go +package main + +import ( + "context" + "fmt" + "os" + "time" + apivideosdk "github.com/apivideo/api.video-go-client" +) + +func main() { + client := apivideosdk.ClientBuilder("YOUR_API_KEY").Build() + // if you rather like to use the sandbox environment: + // client := apivideosdk.SandboxClientBuilder("YOU_SANDBOX_API_KEY").Build() + req := apivideosdk.AnalyticsApiGetVideosPlaysRequest{} + req.From(time.Now()) + req.Dimension("country") + req.Filter("videoId:vi3q7HxhApxRF1c8F8r6VeaI") + res, err := client.Analytics.GetVideosPlays(req) + + + if err != nil { + fmt.Fprintf(os.Stderr, "Error when calling `Analytics.GetVideosPlays``: %v\n", err) + } + // response from `GetVideosPlays`: AnalyticsPlaysResponse + fmt.Fprintf(os.Stdout, "Response from `Analytics.GetVideosPlays`: %v\n", res) +} + +``` +```java +// Import classes: +import video.api.client.ApiVideoClient; +import video.api.client.api.ApiException; +import video.api.client.api.models.*; +import video.api.client.api.clients.AnalyticsApi; +import java.util.*; + +public class Example { + public static void main(String[] args) { + ApiVideoClient client = new ApiVideoClient("YOUR_API_KEY"); + AnalyticsApi apiInstance = client.analytics(); + LocalDate from = LocalDate.parse("2023-06-01"); + String dimension = "videoId"; + String filter = "videoId:vi3q7HxhApxRF1c8F8r6VeaI"; + + try { + Page result = apiInstance.getVideosPlays(from, dimension) + .to(to) + .filter(filter) + .currentPage(currentPage) + .pageSize(pageSize) + .execute(); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling AnalyticsApi#getVideosPlays"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getMessage()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` +```csharp +using System.Diagnostics; +using ApiVideo.Client; + +namespace Example +{ + public class getVideosPlaysExample + { + public static void Main() + { + var basePath = ApiVideoClient.Client.Environment.SANDBOX; + var apiKey = "YOUR_API_KEY"; + var apiInstance = new ApiVideoClient(apiKey,basePath); + var from = 2023-06-01; + var dimension = 'country'; + var filter = 'videoId:vi3q7HxhApxRF1c8F8r6VeaI'; + var apiAnalyticsInstance = apiInstance.Analytics(); + try + { + // Get play events for video + AnalyticsPlaysResponse result = apiAnalyticsInstance.getVideosPlays(from, dimension, to, filter, currentPage, pageSize); + Debug.WriteLine(result); + } + catch (ApiException e) + { + Debug.Print("Exception when calling AnalyticsApi.getVideosPlays: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); + } + } + } +} + +``` + + +The result will be something like this: + +```json +{ + "data": [ + { + "value": "Argentina", + "plays": 5 + }, + { + "value": "Israel", + "plays": 3 + }, + { + "value": "Estonia", + "plays": 2 + }, + ], + "pagination": { + ... + } +} +``` + +You can now play around with the results and create whatever analysis you need. \ No newline at end of file diff --git a/delivery-analytics/analytics.md b/analytics/analytics.md similarity index 100% rename from delivery-analytics/analytics.md rename to analytics/analytics.md diff --git a/analytics/navigation.yaml b/analytics/navigation.yaml new file mode 100644 index 00000000..72efe3ff --- /dev/null +++ b/analytics/navigation.yaml @@ -0,0 +1,14 @@ +--- +- heading: Get started + items: + - label: How does analytics work? + href: /analytics/README.md + - label: Analytics quickstart + href: /analytics/analytics-quickstart.md + +- heading: Analytics + items: + - label: Analytics + href: /analytics/analytics.md + - label: Analytics SDKs + href: /sdks/player/README.md#player-analytics-sdks \ No newline at end of file diff --git a/delivery-analytics/navigation.yaml b/delivery-analytics/navigation.yaml deleted file mode 100644 index 88dd8bff..00000000 --- a/delivery-analytics/navigation.yaml +++ /dev/null @@ -1,49 +0,0 @@ ---- -- heading: Get started - items: - - label: How does video delivery work? - href: /delivery-analytics/README.md - - label: Delivery & Analytics quickstart - href: /delivery-analytics/delivery-analytics-quickstart.md -- heading: Features - items: - - label: Using custom domains for delivery - href: /delivery-analytics/using-custom-domains.md - - label: Domain referrer restrictions - href: /delivery-analytics/domain-referrer.md - - label: In-stream ads - href: /delivery-analytics/ads.md - - label: Private videos - href: /delivery-analytics/video-privacy-access-management.md - collapsed: true - items: - - label: Get started with private videos - href: /delivery-analytics/private-video-get-started.md - - label: Delivery with api.video players - href: /delivery-analytics/private-video-delivery-web-browser.md - - label: Delivery with hls or external players - href: /delivery-analytics/private-video-on-hls-or-external-players.md - - label: Delivery with mp4 built in players - href: /delivery-analytics/private-video-delivery-with-mp4-built-in-players.md - - label: Custom players session retention - href: /delivery-analytics/private-videos-with-custom-players-session-retention.md - - label: Private video session tokens - href: /delivery-analytics/private-video-session-tokens.md - -- heading: Players - items: - - label: Player SDKs - href: /sdks/player/README.md#player-sdks - - label: api.video Player features - href: /delivery-analytics/video-playback-features.md - - label: Player customization - href: /delivery-analytics/player-customization.md - - label: No-code solutions - href: /sdks/nocode/README.md - -- heading: Analytics - items: - - label: Analytics - href: /delivery-analytics/analytics.md - - label: Analytics SDKs - href: /sdks/player/README.md#player-analytics-sdks \ No newline at end of file diff --git a/delivery-analytics/README.md b/delivery/README.md similarity index 77% rename from delivery-analytics/README.md rename to delivery/README.md index bc36313a..66d96e57 100644 --- a/delivery-analytics/README.md +++ b/delivery/README.md @@ -1,5 +1,5 @@ --- -title: "Delivery & analytics overview" +title: "Delivery overview" toc: false breadcrumbs: false meta: @@ -20,21 +20,13 @@ meta: - ![Delivery & analytics quickstart](/_assets/icons/player-customization.svg) + ![Delivery quickstart](/_assets/icons/player-customization.svg) - **Delivery & analytics quickstart**\ + **Delivery quickstart**\ Learn how to make the most of your content delivery through branding, customization, and gathering analytics. [Learn more ›](/delivery-analytics/delivery-analytics-quickstart) - - ![Analytics & data](/_assets/icons/analytics.svg) - - **Analytics & data**\ - Start collecting delivery event data about your videos and live streams. - - [Learn more ›](/delivery-analytics/analytics) - ![Using custom domains](/_assets/icons/custom-domains.svg) @@ -75,12 +67,4 @@ meta: [Learn more ›](/sdks/player#player-sdks) - - ![Analytics SDKs](/_assets/icons/analytics.svg) - - **Analytics SDKs**\ - Check out api.video's dedicated libraries and SDKs for delivery analytics. - - [Learn more ›](/sdks/player#player-analytics-sdks) - \ No newline at end of file diff --git a/delivery-analytics/ads.md b/delivery/ads.md similarity index 100% rename from delivery-analytics/ads.md rename to delivery/ads.md diff --git a/delivery-analytics/delivery-analytics-quickstart.md b/delivery/delivery-quickstart.md similarity index 70% rename from delivery-analytics/delivery-analytics-quickstart.md rename to delivery/delivery-quickstart.md index 75797c0c..165c4172 100644 --- a/delivery-analytics/delivery-analytics-quickstart.md +++ b/delivery/delivery-quickstart.md @@ -522,274 +522,4 @@ import ApiVideoPlayer from '@api.video/react-player' }} /> ``` -Now you can see your awesome branding in action! - -## Get started with analytics - -After we have a cool branded player, it would be great to get some data on your users. For that purpose, we have the api.video Analytics for your disposal. - - - -Please note, that we will only collect analytics from videos that were played through the api.video player. If you are using a custom player, you can leverage the [analytics SDKs](/sdks/player#player-analytics-sdks) to pass on the analytics to api.video. - - -In this example, we will check what countries your video was watched the most. - -### Preparation - - -In this example, we will be using the [api.video client libraries](/sdks/api-clients), however, is you prefer to use cURL or make the requests yourself, you are welcome to follow along with the [API reference documentation](/reference/api/Player-Themes). - - -### Add & initialize the api.video client library - - -If you've followed through the whole tutorial, you can skip this step - - -Let's add the api.video client library to our code. - - -Make sure to install the modules / libraries on your environment beforehand. - - -The client library takes your API key, which you can [find here](https://dashboard.api.video/project-settings/api-keys). Let's pass it the API key and initialize the client. - -You can learn more about authentication [here](/reference/authentication-guide). - - - -```javascript -const ApiVideoClient = require('@api.video/nodejs-client') -``` -```python -import apivideo -from apivideo.api import player_themes_api -from apivideo.model.player_theme_creation_payload import PlayerThemeCreationPayload -from apivideo.model.player_theme import PlayerTheme -``` -```go -package main - -import ( - "context" - "fmt" - "os" - apivideosdk "github.com/apivideo/api.video-go-client" -) - -func main() { -} -``` -```java -import video.api.client.ApiVideoClient; -import video.api.client.api.ApiException; -import video.api.client.api.models.*; -import video.api.client.api.clients.PlayerThemesApi; -import java.util.*; -``` -```csharp -// First add the "ApiVideo" NuGet package to your project -// Documentation: https://github.com/apivideo/api.video-csharp-client/blob/main/docs/PlayerThemesApi.md#create - -using System.Diagnostics; -using ApiVideo.Client; -``` -```php - - -### Get the count of plays by country - -As we planned, in this example, we want to analyze the viewers' geo-location. For that task, we will utilize the api.video client library and make use of the analytics endpoint to get the count of plays for a specific video. - -If you are interested in a more in-depth overview, head over to the [Analytics & data page](/delivery-analytics/analytics) to get more information. - -Notice that we are passing few parameters: -* Video Id: This represents the video you want to analyze, you can get the video you've used before in this example. -* dimension: This parameter will accept a few values, including `country`` in order to return the determine which dimension you would like to analyze. -* from: is a required field. The date from which the data should start. - - - -```javascript -const client = new ApiVideoClient({ apiKey: "YOUR_API_KEY" }); -const from = "2023-09-01"; -const dimension = "country"; -const filter = "videoId:vi3q7HxhApxRF1c8F8r6VeaI"; -const videoPlays = await client.analytics.getVideosPlays({ - from, dimension, to, filter, currentPage, pageSize -}); -``` -```php -analytics()->getVideosPlays($from, $dimension, array( - 'filter' => "videoId:vi3q7HxhApxRF1c8F8r6VeaI", -)); -``` -```python -import apivideo -from apivideo.api import analytics_api -from apivideo.model.analytics_plays_response import AnalyticsPlaysResponse -from apivideo.model.not_found import NotFound -from apivideo.model.analytics_plays400_error import AnalyticsPlays400Error -from pprint import pprint -# Enter a context with an instance of the API client -with apivideo.AuthenticatedApiClient(__API_KEY__) as api_client: - # Create an instance of the API class - api_instance = analytics_api.AnalyticsApi(api_client) - _from = dateutil_parser('2023-06-01').date() - dimension = "country" - filter = "videoId:vi3q7HxhApxRF1c8F8r6VeaI" - try: - # Get play events for video - api_response = api_instance.get_videos_plays(_from, dimension) - pprint(api_response) - except apivideo.ApiException as e: - print("Exception when calling AnalyticsApi->get_videos_plays: %s\n" % e) - - # example passing only required values which don't have defaults set - # and optional values - try: - # Get play events for video - api_response = api_instance.get_videos_plays(_from, dimension, to=to, filter=filter, current_page=current_page, page_size=page_size) - pprint(api_response) - except apivideo.ApiException as e: - print("Exception when calling AnalyticsApi->get_videos_plays: %s\n" % e) - -``` -```go -package main - -import ( - "context" - "fmt" - "os" - "time" - apivideosdk "github.com/apivideo/api.video-go-client" -) - -func main() { - client := apivideosdk.ClientBuilder("YOUR_API_KEY").Build() - // if you rather like to use the sandbox environment: - // client := apivideosdk.SandboxClientBuilder("YOU_SANDBOX_API_KEY").Build() - req := apivideosdk.AnalyticsApiGetVideosPlaysRequest{} - req.From(time.Now()) - req.Dimension("country") - req.Filter("videoId:vi3q7HxhApxRF1c8F8r6VeaI") - res, err := client.Analytics.GetVideosPlays(req) - - - if err != nil { - fmt.Fprintf(os.Stderr, "Error when calling `Analytics.GetVideosPlays``: %v\n", err) - } - // response from `GetVideosPlays`: AnalyticsPlaysResponse - fmt.Fprintf(os.Stdout, "Response from `Analytics.GetVideosPlays`: %v\n", res) -} - -``` -```java -// Import classes: -import video.api.client.ApiVideoClient; -import video.api.client.api.ApiException; -import video.api.client.api.models.*; -import video.api.client.api.clients.AnalyticsApi; -import java.util.*; - -public class Example { - public static void main(String[] args) { - ApiVideoClient client = new ApiVideoClient("YOUR_API_KEY"); - AnalyticsApi apiInstance = client.analytics(); - LocalDate from = LocalDate.parse("2023-06-01"); - String dimension = "videoId"; - String filter = "videoId:vi3q7HxhApxRF1c8F8r6VeaI"; - - try { - Page result = apiInstance.getVideosPlays(from, dimension) - .to(to) - .filter(filter) - .currentPage(currentPage) - .pageSize(pageSize) - .execute(); - System.out.println(result); - } catch (ApiException e) { - System.err.println("Exception when calling AnalyticsApi#getVideosPlays"); - System.err.println("Status code: " + e.getCode()); - System.err.println("Reason: " + e.getMessage()); - System.err.println("Response headers: " + e.getResponseHeaders()); - e.printStackTrace(); - } - } -} -``` -```csharp -using System.Diagnostics; -using ApiVideo.Client; - -namespace Example -{ - public class getVideosPlaysExample - { - public static void Main() - { - var basePath = ApiVideoClient.Client.Environment.SANDBOX; - var apiKey = "YOUR_API_KEY"; - var apiInstance = new ApiVideoClient(apiKey,basePath); - var from = 2023-06-01; - var dimension = 'country'; - var filter = 'videoId:vi3q7HxhApxRF1c8F8r6VeaI'; - var apiAnalyticsInstance = apiInstance.Analytics(); - try - { - // Get play events for video - AnalyticsPlaysResponse result = apiAnalyticsInstance.getVideosPlays(from, dimension, to, filter, currentPage, pageSize); - Debug.WriteLine(result); - } - catch (ApiException e) - { - Debug.Print("Exception when calling AnalyticsApi.getVideosPlays: " + e.Message ); - Debug.Print("Status Code: "+ e.ErrorCode); - Debug.Print(e.StackTrace); - } - } - } -} - -``` - - -The result will be something like this: - -```json -{ - "data": [ - { - "value": "Argentina", - "plays": 5 - }, - { - "value": "Israel", - "plays": 3 - }, - { - "value": "Estonia", - "plays": 2 - }, - ], - "pagination": { - ... - } -} -``` - -You can now play around with the results and create whatever analysis you need. \ No newline at end of file +Now you can see your awesome branding in action! \ No newline at end of file diff --git a/delivery-analytics/domain-referrer.md b/delivery/domain-referrer.md similarity index 100% rename from delivery-analytics/domain-referrer.md rename to delivery/domain-referrer.md diff --git a/delivery/navigation.yaml b/delivery/navigation.yaml new file mode 100644 index 00000000..87f37c9d --- /dev/null +++ b/delivery/navigation.yaml @@ -0,0 +1,42 @@ +--- +- heading: Get started + items: + - label: How does video delivery work? + href: /delivery/README.md + - label: Delivery quickstart + href: /delivery/delivery-quickstart.md +- heading: Features + items: + - label: Using custom domains for delivery + href: /delivery/using-custom-domains.md + - label: Domain referrer restrictions + href: /delivery/domain-referrer.md + - label: In-stream ads + href: /delivery/ads.md + - label: Private videos + href: /delivery/video-privacy-access-management.md + collapsed: true + items: + - label: Get started with private videos + href: /delivery/private-video-get-started.md + - label: Delivery with api.video players + href: /delivery/private-video-delivery-web-browser.md + - label: Delivery with hls or external players + href: /delivery/private-video-on-hls-or-external-players.md + - label: Delivery with mp4 built in players + href: /delivery/private-video-delivery-with-mp4-built-in-players.md + - label: Custom players session retention + href: /delivery/private-videos-with-custom-players-session-retention.md + - label: Private video session tokens + href: /delivery/private-video-session-tokens.md + +- heading: Players + items: + - label: Player SDKs + href: /sdks/player/README.md#player-sdks + - label: api.video Player features + href: /delivery/video-playback-features.md + - label: Player customization + href: /delivery/player-customization.md + - label: No-code solutions + href: /sdks/nocode/README.md \ No newline at end of file diff --git a/delivery-analytics/player-customization.md b/delivery/player-customization.md similarity index 100% rename from delivery-analytics/player-customization.md rename to delivery/player-customization.md diff --git a/delivery-analytics/private-video-delivery-web-browser.md b/delivery/private-video-delivery-web-browser.md similarity index 100% rename from delivery-analytics/private-video-delivery-web-browser.md rename to delivery/private-video-delivery-web-browser.md diff --git a/delivery-analytics/private-video-delivery-with-mp4-built-in-players.md b/delivery/private-video-delivery-with-mp4-built-in-players.md similarity index 100% rename from delivery-analytics/private-video-delivery-with-mp4-built-in-players.md rename to delivery/private-video-delivery-with-mp4-built-in-players.md diff --git a/delivery-analytics/private-video-get-started.md b/delivery/private-video-get-started.md similarity index 100% rename from delivery-analytics/private-video-get-started.md rename to delivery/private-video-get-started.md diff --git a/delivery-analytics/private-video-on-hls-or-external-players.md b/delivery/private-video-on-hls-or-external-players.md similarity index 100% rename from delivery-analytics/private-video-on-hls-or-external-players.md rename to delivery/private-video-on-hls-or-external-players.md diff --git a/delivery-analytics/private-video-session-tokens.md b/delivery/private-video-session-tokens.md similarity index 100% rename from delivery-analytics/private-video-session-tokens.md rename to delivery/private-video-session-tokens.md diff --git a/delivery-analytics/private-videos-with-custom-players-session-retention.md b/delivery/private-videos-with-custom-players-session-retention.md similarity index 100% rename from delivery-analytics/private-videos-with-custom-players-session-retention.md rename to delivery/private-videos-with-custom-players-session-retention.md diff --git a/delivery-analytics/using-custom-domains.md b/delivery/using-custom-domains.md similarity index 100% rename from delivery-analytics/using-custom-domains.md rename to delivery/using-custom-domains.md diff --git a/delivery-analytics/video-playback-features.md b/delivery/video-playback-features.md similarity index 100% rename from delivery-analytics/video-playback-features.md rename to delivery/video-playback-features.md diff --git a/delivery-analytics/video-privacy-access-management.md b/delivery/video-privacy-access-management.md similarity index 100% rename from delivery-analytics/video-privacy-access-management.md rename to delivery/video-privacy-access-management.md diff --git a/doctave.yaml b/doctave.yaml index 69124b66..d1946684 100644 --- a/doctave.yaml +++ b/doctave.yaml @@ -49,8 +49,10 @@ tabs: path: /vod/ - label: Live streaming path: /live-streaming/ - - label: Delivery & analytics - path: /delivery-analytics/ + - label: Delivery + path: /delivery/ + - label: Analytics + path: /analytics/ - label: API Reference path: /reference/ - label: Libraries & SDKs @@ -89,10 +91,6 @@ tabs: redirects: - from: /docs to: / - - from: /docs/ads - to: /delivery-analytics/ads - - from: /docs/analytics - to: /delivery-analytics/analytics - from: /docs/android-api-client to: /sdks/api-clients/apivideo-android-client - from: /docs/android-sdk @@ -122,7 +120,7 @@ redirects: - from: /docs/csharp-api-client to: /sdks/api-clients/apivideo-csharp-client - from: /docs/domain-referrer - to: /delivery-analytics/domain-referrer + to: /delivery/domain-referrer - from: /docs/flutter-uploader to: /sdks/vod/apivideo-flutter-uploader - from: /docs/get-started-in-5-minutes @@ -150,7 +148,7 @@ redirects: - from: /docs/php-api-client to: /sdks/api-clients/apivideo-php-client - from: /docs/private-videos - to: /delivery-analytics/video-privacy-access-management + to: /delivery/video-privacy-access-management - from: /docs/python-api-client to: /sdks/api-clients/apivideo-python-client - from: /docs/react-native-livestream-component @@ -168,11 +166,11 @@ redirects: - from: /docs/upload-your-first-video to: /vod/upload-a-video-regular-upload - from: /docs/using-custom-domains - to: /delivery-analytics/using-custom-domains + to: /delivery/using-custom-domains - from: /docs/video-access-management-getting-started-with-private-videos - to: /delivery-analytics/video-privacy-access-management + to: /delivery/video-privacy-access-management - from: /docs/video-playback-features - to: /delivery-analytics/video-playback-features + to: /delivery/video-playback-features - from: /docs/video-player-sdk to: /sdks/player/apivideo-player-sdk - from: /docs/video-uploader @@ -232,7 +230,7 @@ redirects: - from: /reference/patch-video to: /reference/api/Videos#update-a-video-object - from: /reference/player-themes - to: /delivery-analytics/player-customization + to: /delivery/player-customization - from: /reference/post_auth-api-key to: /reference/api/Advanced-authentication#get-bearer-token - from: /reference/post_live-streams @@ -284,7 +282,7 @@ redirects: - from: /changelog/october-12-2021-new-contentful-integration to: / - from: /docs/access-private-videos-with-external-player - to: /delivery-analytics/private-video-on-hls-or-external-players + to: /delivery/private-video-on-hls-or-external-players - from: /docs/add-a-permanent-watermark to: /vod/add-a-permanent-watermark - from: /docs/add-a-thumbnail-to-your-video @@ -326,15 +324,15 @@ redirects: - from: /docs/media-recorder to: /sdks/vod/apivideo-typescript-media-recorder - from: /docs/private-video-delivery-web-browser - to: /delivery-analytics/private-video-delivery-web-browser + to: /delivery/private-video-delivery-web-browser - from: /docs/private-video-delivery-with-mp4-built-in-players - to: /delivery-analytics/private-video-delivery-with-mp4-built-in-players + to: /delivery/private-video-delivery-with-mp4-built-in-players - from: /docs/private-video-on-hls-or-external-players - to: /delivery-analytics/private-video-on-hls-or-external-players + to: /delivery/private-video-on-hls-or-external-players - from: /docs/private-video-session-tokens - to: /delivery-analytics/private-video-session-tokens + to: /delivery/private-video-session-tokens - from: /docs/private-videos-with-custom-players-session-retention - to: /delivery-analytics/private-videos-with-custom-players-session-retention + to: /delivery/private-videos-with-custom-players-session-retention - from: /docs/show-video-details to: /vod/show-video-details - from: /docs/show-video-upload-status @@ -402,11 +400,11 @@ redirects: - from: /reference/useful-tools to: / - from: /reference/get_analytics-videos-videoid - to: /delivery-analytics/analytics + to: /analytics - from: /reference/get_analytics-sessions-sessionid-events - to: /delivery-analytics/analytics + to: /analytics - from: /reference/get_analytics-live-streams-livestreamid - to: /delivery-analytics/analytics + to: /analytics - from: /reference/an-attribute-is-invalid to: /reference/invalid-attribute - from: /reference/bad-request @@ -415,3 +413,33 @@ redirects: to: /reference/errors - from: /reference/internal-server-error to: /reference/general-errors + - from: /delivery-analytics + to: /delivery + - from: /delivery-analytics/ads + to: /delivery/ads + - from: /delivery-analytics/analytics + to: /analytics/analytics + - from: /delivery-analytics/delivery-analytics-quickstart + to: /delivery/delivery-quickstart + - from: /delivery-analytics/domain-referrer + to: /delivery/domain-referrer + - from: /delivery-analytics/player-customization + to: /delivery/player-customization + - from: /delivery-analytics/private-video-delivery-web-browser + to: /delivery/private-video-delivery-web-browser + - from: /delivery-analytics/private-video-delivery-with-mp4-built-in-players + to: /delivery/private-video-delivery-with-mp4-built-in-players + - from: /delivery-analytics/private-video-get-started + to: /delivery/private-video-get-started + - from: /delivery-analytics/private-video-on-hls-or-external-players + to: /delivery/private-video-on-hls-or-external-players + - from: /delivery-analytics/private-video-session-tokens + to: /delivery/private-video-session-tokens + - from: /delivery-analytics/private-videos-with-custom-players-session-retention + to: /delivery/private-videos-with-custom-players-session-retention + - from: /delivery-analytics/using-custom-domains + to: /delivery/using-custom-domains + - from: /delivery-analytics/video-playback-features + to: /delivery/video-playback-features + - from: /delivery-analytics/video-privacy-access-management + to: /delivery/video-privacy-access-management \ No newline at end of file From 7b3684b46988b7eec0b23cdfe07d5d76e5eb6bf3 Mon Sep 17 00:00:00 2001 From: szekelyzol Date: Wed, 17 Jul 2024 16:16:39 +0200 Subject: [PATCH 2/5] Update landing page card colors --- _assets/css/style.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_assets/css/style.css b/_assets/css/style.css index 7e2f5d06..26c637e4 100644 --- a/_assets/css/style.css +++ b/_assets/css/style.css @@ -409,19 +409,19 @@ } .landing-page-card.Video .landing-page-card-header { - background: linear-gradient(215deg, #FA5B30 -5.18%, #F7B500 179.35%); + background: linear-gradient(76deg, #FA5B30 -24.15%, #F7B500 93.03%); } .landing-page-card.Live .landing-page-card-header { - background: linear-gradient(76deg, #642180 -24.15%, #AF2A72 93.03%); + background: linear-gradient(76deg, #D71D76 -24.15%, #FA9130 93.03%); } .landing-page-card.Delivery .landing-page-card-header { - background: linear-gradient(76deg, #186EB0 -24.15%, #3BC8F4 93.03%); + background: linear-gradient(76deg, #642180 -24.15%, #AF2A72 93.03%); } .landing-page-card.Analytics .landing-page-card-header { - background: linear-gradient(76deg, #22863E -24.15%, #9DD442 93.03%); + background: linear-gradient(76deg, #186EB0 -24.15%, #3BC8F4 93.03%); } .landing-page-card-header { From d3a081ecff38349889f9e0d902afca759d76c956 Mon Sep 17 00:00:00 2001 From: szekelyzol Date: Thu, 18 Jul 2024 18:19:36 +0200 Subject: [PATCH 3/5] Update internal links and descriptions, remove quickstart --- README.md | 6 +- analytics/README.md | 22 +- analytics/analytics-quickstart.md | 281 ------------------ analytics/analytics.md | 15 +- analytics/navigation.yaml | 7 +- delivery/README.md | 16 +- delivery/ads.md | 2 +- delivery/domain-referrer.md | 2 +- .../private-video-delivery-web-browser.md | 2 +- ...ideo-delivery-with-mp4-built-in-players.md | 2 +- delivery/private-video-get-started.md | 2 +- ...rivate-video-on-hls-or-external-players.md | 2 +- ...s-with-custom-players-session-retention.md | 4 +- delivery/using-custom-domains.md | 2 +- delivery/video-playback-features.md | 2 +- doctave.yaml | 2 +- get-started/start-building.md | 8 +- openapi.yaml | 8 +- sdks/nocode/wordpress.md | 2 +- vod/video-best-practices.md | 2 +- vod/video-object.md | 2 +- vod/video-playback-features.md | 2 +- 22 files changed, 55 insertions(+), 338 deletions(-) delete mode 100644 analytics/analytics-quickstart.md diff --git a/README.md b/README.md index 6a2b0e3d..b05ec7de 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ meta: -Welcome to the developer documentation of api.video! Our platform empowers developers and businesses to seamlessly integrate video functionality into their applications and services. Whether you're looking to offer video on demand, live streaming, or leverage our player and analytics features, the api.video API is designed to simplify the process. +Welcome to the developer documentation of api.video! Our platform empowers developers and businesses to seamlessly integrate video functionality into their applications and services. Whether you're looking to offer video on demand, live streaming, or leverage our delivery and analytics features, the api.video API is designed to simplify the process. Check out the products! @@ -67,7 +67,7 @@ Check out the products! [Live streaming quickstart](/live-streaming/create-a-live-stream) - [Delivery & analytics quickstart](/delivery-analytics/delivery-analytics-quickstart) + [Delivery & player quickstart](/delivery/delivery-quickstart) @@ -79,7 +79,7 @@ Check out the products! [Live streaming libraries & SDKs](/sdks/livestream) - [Delivery & analytics SDKs](/sdks/player) + [Player SDKs](/sdks/player) [No-code solutions](/sdks/nocode) diff --git a/analytics/README.md b/analytics/README.md index 0165930f..39c5db01 100644 --- a/analytics/README.md +++ b/analytics/README.md @@ -3,35 +3,29 @@ title: Analytics overview toc: false breadcrumbs: false meta: - description: This page serves as a foundational guide to integrating api.video's solutions for video delivery, player customization, and analytics. + description: This page serves as a foundational guide to integrating api.video's solutions for video and live streaming analytics. ---
-# How does video delivery work? +# How does analytics work? - api.video lets you customize a large part of the delivery, from the branding of the player, to adding captions, chapters, and watermarks. You have full control over how you deliver the content to your users. The flexibility does not end with player customization, you can build your own player in order to deliver the content in the best form you see fit. + api.video enables you to collect and segment viewer interactions with your content, giving you detailed insights on view events in real time. Analytics helps you collect metrics like total number of plays, impressions, average watch time, and so on. You can also filter the data using custom date ranges, and a large selection of dimensions like countries, browsers, and even device types. + + Check out the most relevant metrics on all your videos and live streams in the api.video [dashboard](https://dashboard.api.video/data)!
--- -## Start delivering with api.video +## Start analyzing with api.video - - ![Analytics quickstart](/_assets/icons/player-customization.svg) - - **Analytics quickstart**\ - Learn how to make the most of your content delivery through branding, customization, and gathering analytics. - - [Learn more ›](/analytics/analytics-quickstart) - ![Analytics & data](/_assets/icons/analytics.svg) **Analytics & data**\ - Start collecting delivery event data about your videos and live streams. + Understand how you can collect delivery event data about your videos and live streams. [Learn more ›](/analytics/analytics) @@ -39,7 +33,7 @@ meta: ![Analytics SDKs](/_assets/icons/analytics.svg) **Analytics SDKs**\ - Check out api.video's dedicated libraries and SDKs for delivery analytics. + Check out api.video's dedicated libraries and SDKs for video and live stream analytics. [Learn more ›](/sdks/player#player-analytics-sdks) diff --git a/analytics/analytics-quickstart.md b/analytics/analytics-quickstart.md deleted file mode 100644 index 7faf3a79..00000000 --- a/analytics/analytics-quickstart.md +++ /dev/null @@ -1,281 +0,0 @@ ---- -title: Analytics with api.video -meta: - description: Set up the api.video player and start working with video analytics in 5 minutes ---- - -# Getting started with analytics - -api.video provides you with powerful tools that enable you to deliver content to your users with great customization and branding while making sure that you get all of the data you need to analyze the viewer's behavior. - -There are two parts to this tutorial, where we will jump into the player capabilities and then look at how to analyze the data we've received from the viewers. - -## Get started with analytics - -After we have a cool branded player, it would be great to get some data on your users. For that purpose, we have the api.video Analytics for your disposal. - - - -Please note, that we will only collect analytics from videos that were played through the api.video player. If you are using a custom player, you can leverage the [analytics SDKs](/sdks/player#player-analytics-sdks) to pass on the analytics to api.video. - - -In this example, we will check what countries your video was watched the most. - -### Preparation - - -In this example, we will be using the [api.video client libraries](/sdks/api-clients), however, is you prefer to use cURL or make the requests yourself, you are welcome to follow along with the [API reference documentation](/reference/api/Player-Themes). - - -### Add & initialize the api.video client library - - -If you've followed through the whole tutorial, you can skip this step - - -Let's add the api.video client library to our code. - - -Make sure to install the modules / libraries on your environment beforehand. - - -The client library takes your API key, which you can [find here](https://dashboard.api.video/project-settings/api-keys). Let's pass it the API key and initialize the client. - -You can learn more about authentication [here](/reference/authentication-guide). - - - -```javascript -const ApiVideoClient = require('@api.video/nodejs-client') -``` -```python -import apivideo -from apivideo.api import player_themes_api -from apivideo.model.player_theme_creation_payload import PlayerThemeCreationPayload -from apivideo.model.player_theme import PlayerTheme -``` -```go -package main - -import ( - "context" - "fmt" - "os" - apivideosdk "github.com/apivideo/api.video-go-client" -) - -func main() { -} -``` -```java -import video.api.client.ApiVideoClient; -import video.api.client.api.ApiException; -import video.api.client.api.models.*; -import video.api.client.api.clients.PlayerThemesApi; -import java.util.*; -``` -```csharp -// First add the "ApiVideo" NuGet package to your project -// Documentation: https://github.com/apivideo/api.video-csharp-client/blob/main/docs/PlayerThemesApi.md#create - -using System.Diagnostics; -using ApiVideo.Client; -``` -```php - - -### Get the count of plays by country - -As we planned, in this example, we want to analyze the viewers' geo-location. For that task, we will utilize the api.video client library and make use of the analytics endpoint to get the count of plays for a specific video. - -If you are interested in a more in-depth overview, head over to the [Analytics & data page](/delivery-analytics/analytics) to get more information. - -Notice that we are passing few parameters: -* Video Id: This represents the video you want to analyze, you can get the video you've used before in this example. -* dimension: This parameter will accept a few values, including `country`` in order to return the determine which dimension you would like to analyze. -* from: is a required field. The date from which the data should start. - - - -```javascript -const client = new ApiVideoClient({ apiKey: "YOUR_API_KEY" }); -const from = "2023-09-01"; -const dimension = "country"; -const filter = "videoId:vi3q7HxhApxRF1c8F8r6VeaI"; -const videoPlays = await client.analytics.getVideosPlays({ - from, dimension, to, filter, currentPage, pageSize -}); -``` -```php -analytics()->getVideosPlays($from, $dimension, array( - 'filter' => "videoId:vi3q7HxhApxRF1c8F8r6VeaI", -)); -``` -```python -import apivideo -from apivideo.api import analytics_api -from apivideo.model.analytics_plays_response import AnalyticsPlaysResponse -from apivideo.model.not_found import NotFound -from apivideo.model.analytics_plays400_error import AnalyticsPlays400Error -from pprint import pprint -# Enter a context with an instance of the API client -with apivideo.AuthenticatedApiClient(__API_KEY__) as api_client: - # Create an instance of the API class - api_instance = analytics_api.AnalyticsApi(api_client) - _from = dateutil_parser('2023-06-01').date() - dimension = "country" - filter = "videoId:vi3q7HxhApxRF1c8F8r6VeaI" - try: - # Get play events for video - api_response = api_instance.get_videos_plays(_from, dimension) - pprint(api_response) - except apivideo.ApiException as e: - print("Exception when calling AnalyticsApi->get_videos_plays: %s\n" % e) - - # example passing only required values which don't have defaults set - # and optional values - try: - # Get play events for video - api_response = api_instance.get_videos_plays(_from, dimension, to=to, filter=filter, current_page=current_page, page_size=page_size) - pprint(api_response) - except apivideo.ApiException as e: - print("Exception when calling AnalyticsApi->get_videos_plays: %s\n" % e) - -``` -```go -package main - -import ( - "context" - "fmt" - "os" - "time" - apivideosdk "github.com/apivideo/api.video-go-client" -) - -func main() { - client := apivideosdk.ClientBuilder("YOUR_API_KEY").Build() - // if you rather like to use the sandbox environment: - // client := apivideosdk.SandboxClientBuilder("YOU_SANDBOX_API_KEY").Build() - req := apivideosdk.AnalyticsApiGetVideosPlaysRequest{} - req.From(time.Now()) - req.Dimension("country") - req.Filter("videoId:vi3q7HxhApxRF1c8F8r6VeaI") - res, err := client.Analytics.GetVideosPlays(req) - - - if err != nil { - fmt.Fprintf(os.Stderr, "Error when calling `Analytics.GetVideosPlays``: %v\n", err) - } - // response from `GetVideosPlays`: AnalyticsPlaysResponse - fmt.Fprintf(os.Stdout, "Response from `Analytics.GetVideosPlays`: %v\n", res) -} - -``` -```java -// Import classes: -import video.api.client.ApiVideoClient; -import video.api.client.api.ApiException; -import video.api.client.api.models.*; -import video.api.client.api.clients.AnalyticsApi; -import java.util.*; - -public class Example { - public static void main(String[] args) { - ApiVideoClient client = new ApiVideoClient("YOUR_API_KEY"); - AnalyticsApi apiInstance = client.analytics(); - LocalDate from = LocalDate.parse("2023-06-01"); - String dimension = "videoId"; - String filter = "videoId:vi3q7HxhApxRF1c8F8r6VeaI"; - - try { - Page result = apiInstance.getVideosPlays(from, dimension) - .to(to) - .filter(filter) - .currentPage(currentPage) - .pageSize(pageSize) - .execute(); - System.out.println(result); - } catch (ApiException e) { - System.err.println("Exception when calling AnalyticsApi#getVideosPlays"); - System.err.println("Status code: " + e.getCode()); - System.err.println("Reason: " + e.getMessage()); - System.err.println("Response headers: " + e.getResponseHeaders()); - e.printStackTrace(); - } - } -} -``` -```csharp -using System.Diagnostics; -using ApiVideo.Client; - -namespace Example -{ - public class getVideosPlaysExample - { - public static void Main() - { - var basePath = ApiVideoClient.Client.Environment.SANDBOX; - var apiKey = "YOUR_API_KEY"; - var apiInstance = new ApiVideoClient(apiKey,basePath); - var from = 2023-06-01; - var dimension = 'country'; - var filter = 'videoId:vi3q7HxhApxRF1c8F8r6VeaI'; - var apiAnalyticsInstance = apiInstance.Analytics(); - try - { - // Get play events for video - AnalyticsPlaysResponse result = apiAnalyticsInstance.getVideosPlays(from, dimension, to, filter, currentPage, pageSize); - Debug.WriteLine(result); - } - catch (ApiException e) - { - Debug.Print("Exception when calling AnalyticsApi.getVideosPlays: " + e.Message ); - Debug.Print("Status Code: "+ e.ErrorCode); - Debug.Print(e.StackTrace); - } - } - } -} - -``` - - -The result will be something like this: - -```json -{ - "data": [ - { - "value": "Argentina", - "plays": 5 - }, - { - "value": "Israel", - "plays": 3 - }, - { - "value": "Estonia", - "plays": 2 - }, - ], - "pagination": { - ... - } -} -``` - -You can now play around with the results and create whatever analysis you need. \ No newline at end of file diff --git a/analytics/analytics.md b/analytics/analytics.md index 1c1deb88..6533c464 100644 --- a/analytics/analytics.md +++ b/analytics/analytics.md @@ -20,15 +20,24 @@ Visit the **[Analytics](https://dashboard.api.video/data)** page on the Dashboar ## How it works -Analytics uses player events to analyze and segment your viewers' interactions with your content. Here are some key aspects that can help you ensure that your Analytics implementation runs smoothly: +Analytics uses player events to analyze and segment your viewers' interactions with your content. Here are some key aspects: +- api.video retains analytics data for 30 days. - Player events are generated when your viewers engage with a video or live stream session. - Data is refreshed in real time, with a frequency of `<5s`. -- api.video retains analytics data for 30 days. -- Data does not carry over from the previous version of Analytics. +- Data does not carry over from the previous versions of Analytics. - Video re-plays using the dedicated re-play button in the player do not generate player events. - If a user is viewing your content via a browser, refreshes the tab, and plays the content again, a new event is generated. + +api.video provides calculates the total number of plays through 2 dedicated endpoints: + +- `/data/metrics/play/total` +- `/data/buckets/play-total/media-id` + +These 2 endpoints return data that is not limited to 30 days of retention, and can return data from earlier versions of Analytics. + + ### Requirements diff --git a/analytics/navigation.yaml b/analytics/navigation.yaml index 72efe3ff..a8a2f529 100644 --- a/analytics/navigation.yaml +++ b/analytics/navigation.yaml @@ -3,12 +3,7 @@ items: - label: How does analytics work? href: /analytics/README.md - - label: Analytics quickstart - href: /analytics/analytics-quickstart.md - -- heading: Analytics - items: - - label: Analytics + - label: Analytics overview href: /analytics/analytics.md - label: Analytics SDKs href: /sdks/player/README.md#player-analytics-sdks \ No newline at end of file diff --git a/delivery/README.md b/delivery/README.md index 66d96e57..0561617c 100644 --- a/delivery/README.md +++ b/delivery/README.md @@ -3,12 +3,12 @@ title: "Delivery overview" toc: false breadcrumbs: false meta: - description: This page serves as a foundational guide to integrating api.video's solutions for video delivery, player customization, and analytics. + description: This page serves as a foundational guide to integrating api.video's solutions for video delivery and player customization. ---
-# How does video delivery work? +# How does video and live stream delivery work? api.video lets you customize a large part of the delivery, from the branding of the player, to adding captions, chapters, and watermarks. You have full control over how you deliver the content to your users. The flexibility does not end with player customization, you can build your own player in order to deliver the content in the best form you see fit. @@ -23,9 +23,9 @@ meta: ![Delivery quickstart](/_assets/icons/player-customization.svg) **Delivery quickstart**\ - Learn how to make the most of your content delivery through branding, customization, and gathering analytics. + Learn how to make the most of your content delivery through branding and customization. - [Learn more ›](/delivery-analytics/delivery-analytics-quickstart) + [Learn more ›](/delivery/delivery-quickstart) ![Using custom domains](/_assets/icons/custom-domains.svg) @@ -33,7 +33,7 @@ meta: **Using custom domains**\ Maintain your company branding by delivering through custom domains - [Learn more ›](/delivery-analytics/using-custom-domains) + [Learn more ›](/delivery/using-custom-domains) ![Domain referrer restrictions](/_assets/icons/domain_referrer.png) @@ -41,7 +41,7 @@ meta: **Domain referrer restrictions**\ Make sure that your videos and live streams are delivered securely, and only through your domains. - [Learn more ›](/delivery-analytics/domain-referrer) + [Learn more ›](/delivery/domain-referrer) ![In-stream ads](/_assets/icons/ads.png) @@ -49,7 +49,7 @@ meta: **In-stream ads**\ Implement in-stream ads to monetize your videos and live streams conveniently. - [Learn more ›](/delivery-analytics/ads) + [Learn more ›](/delivery/ads) ![Private videos](/_assets/icons/private_videos.png) @@ -57,7 +57,7 @@ meta: **Private videos**\ Learn how you can secure and manage access to your videos. - [Learn more ›](/delivery-analytics/private-video-get-started) + [Learn more ›](/delivery/private-video-get-started) ![Player SDKs](/_assets/icons/player-sdks.svg) diff --git a/delivery/ads.md b/delivery/ads.md index d5661175..c6a786ee 100644 --- a/delivery/ads.md +++ b/delivery/ads.md @@ -15,7 +15,7 @@ In-stream ads are a very convenient way of monetization of videos and streams. [ Including ads in your videos and stream is easy. There are multiple ways you can do that: -- [api.video Player features](/delivery-analytics/video-playback-features.md) +- [api.video Player features](/delivery/video-playback-features.md) - [api.video Player SDK](/sdks/player/apivideo-player-sdk) - [React Player SDK](/sdks/player/apivideo-react-player) diff --git a/delivery/domain-referrer.md b/delivery/domain-referrer.md index 6f191066..583821ae 100644 --- a/delivery/domain-referrer.md +++ b/delivery/domain-referrer.md @@ -18,7 +18,7 @@ An edge case to consider: - The feature is only supported for browser users. -If you are looking to secure your videos and live streams in a more advanced way, for example by using a native mobile player or through securing and limiting access granularly, please visit our guide to [Private Videos](/delivery-analytics/video-privacy-access-management.md). +If you are looking to secure your videos and live streams in a more advanced way, for example by using a native mobile player or through securing and limiting access granularly, please visit our guide to [Private Videos](/delivery/video-privacy-access-management.md). ## How it works? diff --git a/delivery/private-video-delivery-web-browser.md b/delivery/private-video-delivery-web-browser.md index c14acec0..528a1b33 100644 --- a/delivery/private-video-delivery-web-browser.md +++ b/delivery/private-video-delivery-web-browser.md @@ -25,7 +25,7 @@ When delivering the embedded video, we will use our in-house player to playback **iframes in incognito mode** When playing an embedded private video in a browser that runs in incognito mode you'll have to leverage sessions. -Check out the guide for retaining a private session [here](/delivery-analytics/private-videos-with-custom-players-session-retention). +Check out the guide for retaining a private session [here](/delivery/private-videos-with-custom-players-session-retention). In order to build a dynamically served private videos, you can leverage the [/videos](/reference/api/Videos#retrieve-a-video-object) endpoint in order to get the url of the video and private token. For example the following steps are possible: diff --git a/delivery/private-video-delivery-with-mp4-built-in-players.md b/delivery/private-video-delivery-with-mp4-built-in-players.md index 514b0d51..5dc5e63b 100644 --- a/delivery/private-video-delivery-with-mp4-built-in-players.md +++ b/delivery/private-video-delivery-with-mp4-built-in-players.md @@ -7,7 +7,7 @@ meta: # Private Video Delivery With Mp4 Built In Players -api.video recommends that you read [Private Videos](/delivery-analytics/video-privacy-access-management) to ensure that you understand the concept of private videos before proceeding. +api.video recommends that you read [Private Videos](/delivery/video-privacy-access-management) to ensure that you understand the concept of private videos before proceeding. There are cases where you would want to use built-in players that are not api.video. We support private video delivery via other players other than our in-house. In this article you can find how to deliver private videos with MP4 built-in player diff --git a/delivery/private-video-get-started.md b/delivery/private-video-get-started.md index 534dfe52..657e6854 100644 --- a/delivery/private-video-get-started.md +++ b/delivery/private-video-get-started.md @@ -30,7 +30,7 @@ We tried to make it as simple as possible to secure your videos: - Private videos will generate a new private token each time a request is made for that video id. - Each private token is usable only once. -If you like to get into nitty gritty details, feel free to check out all the other pages about [Private Videos](/delivery-analytics/video-privacy-access-management.md). +If you like to get into nitty gritty details, feel free to check out all the other pages about [Private Videos](/delivery/video-privacy-access-management.md). ## How to deliver private videos to your audience diff --git a/delivery/private-video-on-hls-or-external-players.md b/delivery/private-video-on-hls-or-external-players.md index 789e3dc4..9fcb220a 100644 --- a/delivery/private-video-on-hls-or-external-players.md +++ b/delivery/private-video-on-hls-or-external-players.md @@ -7,7 +7,7 @@ meta: # Private Video On Hls Or External Players -api.video recommends that you read [Private Videos](/delivery-analytics/video-privacy-access-management) to ensure that you understand the concept of private videos before proceeding. +api.video recommends that you read [Private Videos](/delivery/video-privacy-access-management) to ensure that you understand the concept of private videos before proceeding. There are cases where you would want to use built-in players that are not api.video. We support private video delivery via other players other than our in-house. In this article you can find how to deliver private videos with HLS built-in player diff --git a/delivery/private-videos-with-custom-players-session-retention.md b/delivery/private-videos-with-custom-players-session-retention.md index 6ca494c7..6c94549a 100644 --- a/delivery/private-videos-with-custom-players-session-retention.md +++ b/delivery/private-videos-with-custom-players-session-retention.md @@ -16,7 +16,7 @@ In these cases, you will have to make multiple requests to api.video assets. As ### What is a Session Token? -In short a Session Token is api.video's way of retaining the session for every request you make to each asset. You can find the detailed article about session tokens [here](/delivery-analytics/private-video-session-tokens). +In short a Session Token is api.video's way of retaining the session for every request you make to each asset. You can find the detailed article about session tokens [here](/delivery/private-video-session-tokens). **Example for incorrect usage of private videos** @@ -37,7 +37,7 @@ Let's take an example where you want to create a clickable thumbnail which will ### How to play private video in a custom built player? -In order to play your private video with a clickable thumbnail or in a custom made player, you will first have to call the session token. Assuming that you are passing an `.mp4` video to the player, the flow will be as follows described in the [Session Flow](/delivery-analytics/private-video-session-tokens#session-flow) document. +In order to play your private video with a clickable thumbnail or in a custom made player, you will first have to call the session token. Assuming that you are passing an `.mp4` video to the player, the flow will be as follows described in the [Session Flow](/delivery/private-video-session-tokens#session-flow) document. ### Continuous requests while playing private videos on custom player diff --git a/delivery/using-custom-domains.md b/delivery/using-custom-domains.md index bed357c3..0840c388 100644 --- a/delivery/using-custom-domains.md +++ b/delivery/using-custom-domains.md @@ -23,6 +23,6 @@ You can maintain your company branding by utilizing custom domains in any of the - use api.video’s hosting service and [embed or share video content](/vod/get-started-in-5-minutes) using your own custom domain - [start a live stream](/live-streaming/create-a-live-stream) using your own custom URL - use your own custom player to provide video on demand -- embed or share [private videos](/delivery-analytics/video-privacy-access-management.md) through your own custom domain +- embed or share [private videos](/delivery/video-privacy-access-management.md) through your own custom domain Visit the [Dashboard](https://dashboard.api.video/project-settings/domains) to get started with setting up your custom domain! \ No newline at end of file diff --git a/delivery/video-playback-features.md b/delivery/video-playback-features.md index 3e873094..8578d8df 100644 --- a/delivery/video-playback-features.md +++ b/delivery/video-playback-features.md @@ -98,4 +98,4 @@ For example: https://embed.api.video/vod/#adTagUrl:https%3A%2F%2Fpubads.g.doubleclick.ne[…]tart%3D1%26env%3Dvp%26impl%3Ds%26correlator%3D` ``` -For more details, navigate to the dedicated documentation page for [in-stream ads](/delivery-analytics/ads). \ No newline at end of file +For more details, navigate to the dedicated documentation page for [in-stream ads](/delivery/ads). \ No newline at end of file diff --git a/doctave.yaml b/doctave.yaml index 908a7152..3bb1d7e8 100644 --- a/doctave.yaml +++ b/doctave.yaml @@ -49,7 +49,7 @@ tabs: path: /vod/ - label: Live streaming path: /live-streaming/ - - label: Delivery + - label: Delivery & players path: /delivery/ - label: Analytics path: /analytics/ diff --git a/get-started/start-building.md b/get-started/start-building.md index 75c778d5..a372220b 100644 --- a/get-started/start-building.md +++ b/get-started/start-building.md @@ -42,11 +42,11 @@ api.video is a cloud-based video hosting and live streaming platform that provid - ![Delivery & analytics quickstart](/_assets/icons/player-customization.svg) + ![Delivery quickstart](/_assets/icons/player-customization.svg) - **Delivery & analytics quickstart**\ - Learn how to make the most of your content delivery through branding, customization, and gathering analytics. + **Delivery quickstart**\ + Learn how to make the most of your content delivery through player branding, customization, private videos and live streams, and even in-stream ads. - [Learn more ›](/delivery-analytics/delivery-analytics-quickstart) + [Learn more ›](/delivery/delivery-quickstart) \ No newline at end of file diff --git a/openapi.yaml b/openapi.yaml index 7037387e..76366b9c 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -13842,7 +13842,7 @@ components: example: dw-dew8-q6w9-k67w-1ws8 public: type: boolean - description: 'Whether your video can be viewed by everyone, or requires authentication to see it. A setting of false will require a unique token for each view. Learn more about the Private Video feature [here](https://docs.api.video/delivery-analytics/video-privacy-access-management).' + description: 'Whether your video can be viewed by everyone, or requires authentication to see it. A setting of false will require a unique token for each view. Learn more about the Private Video feature [here](https://docs.api.video/delivery/video-privacy-access-management).' example: true assets: $ref: '#/components/schemas/live-stream-assets' @@ -14132,7 +14132,7 @@ components: example: 'https://www.myvideo.url.com/video.mp4 OR vi4k0jvEUuaTdRAEjQ4JfOyl' public: type: boolean - description: 'Default: True. If set to `false` the video will become private. More information on private videos can be found [here](https://docs.api.video/delivery-analytics/video-privacy-access-management)' + description: 'Default: True. If set to `false` the video will become private. More information on private videos can be found [here](https://docs.api.video/delivery/video-privacy-access-management)' example: true default: true panoramic: @@ -14330,7 +14330,7 @@ components: example: My Live Stream Video public: type: boolean - description: 'Whether your video can be viewed by everyone, or requires authentication to see it. A setting of false will require a unique token for each view. Learn more about the Private Video feature [here](https://docs.api.video/delivery-analytics/video-privacy-access-management).' + description: 'Whether your video can be viewed by everyone, or requires authentication to see it. A setting of false will require a unique token for each view. Learn more about the Private Video feature [here](https://docs.api.video/delivery/video-privacy-access-management).' playerId: type: string description: The unique identifier for the player. @@ -14361,7 +14361,7 @@ components: example: My Live Stream Video public: type: boolean - description: 'Whether your video can be viewed by everyone, or requires authentication to see it. A setting of false will require a unique token for each view. Learn more about the Private Video feature [here](https://docs.api.video/delivery-analytics/video-privacy-access-management).' + description: 'Whether your video can be viewed by everyone, or requires authentication to see it. A setting of false will require a unique token for each view. Learn more about the Private Video feature [here](https://docs.api.video/delivery/video-privacy-access-management).' playerId: type: string description: The unique ID for the player associated with a live stream that you want to update. diff --git a/sdks/nocode/wordpress.md b/sdks/nocode/wordpress.md index c475f46a..b8d41ac9 100644 --- a/sdks/nocode/wordpress.md +++ b/sdks/nocode/wordpress.md @@ -63,7 +63,7 @@ You can manage a specific video object and update some of it's properties. The v - Update the video title. - Update the video description. -- Change video privacy status (Private/public). More information on private videos can be found [here](../../delivery-analytics/video-privacy-access-management.md). +- Change video privacy status (Private/public). More information on private videos can be found [here](../../delivery/video-privacy-access-management.md). - Enable / disable panoramic video mode. - Enable / disable the ability of a viewer to download the video. - Add / remove video tags. diff --git a/vod/video-best-practices.md b/vod/video-best-practices.md index a944e9c2..3ba86bd9 100644 --- a/vod/video-best-practices.md +++ b/vod/video-best-practices.md @@ -69,7 +69,7 @@ Some videos you might upload could be very large in size. We made sure that this ## Video Access Management -The video object will be created as public by default. If you want to make the video private, you just need to create a private video object or update it later. You can read all about Private Videos [here](/delivery-analytics/video-privacy-access-management.md) +The video object will be created as public by default. If you want to make the video private, you just need to create a private video object or update it later. You can read all about Private Videos [here](/delivery/video-privacy-access-management.md) * Searchable parameters: title, description, tags and metadata diff --git a/vod/video-object.md b/vod/video-object.md index f5748983..543bcc6e 100644 --- a/vod/video-object.md +++ b/vod/video-object.md @@ -44,7 +44,7 @@ You can either add a video already on the web, by entering the URL of the video, ### Public: Video Access Management -On creation, the video can either be public or private. If the video is set to public `true`, the url of the video can be accessed by anyone that has the url, however, you can secure the video and make it private. Set the public parameter to `false` to convert the video to private and limit access to the video url. You can get started with Video Access Management [here](/delivery-analytics/video-privacy-access-management). +On creation, the video can either be public or private. If the video is set to public `true`, the url of the video can be accessed by anyone that has the url, however, you can secure the video and make it private. Set the public parameter to `false` to convert the video to private and limit access to the video url. You can get started with Video Access Management [here](/delivery/video-privacy-access-management). ### Panoramic: Upload 360-degree Videos diff --git a/vod/video-playback-features.md b/vod/video-playback-features.md index 850d0607..9505173b 100644 --- a/vod/video-playback-features.md +++ b/vod/video-playback-features.md @@ -98,4 +98,4 @@ For example: https://embed.api.video/vod/#adTagUrl:https%3A%2F%2Fpubads.g.doubleclick.ne[…]tart%3D1%26env%3Dvp%26impl%3Ds%26correlator%3D` ``` -For more details, navigate to the dedicated documentation page for [in-stream ads](/delivery-analytics/ads). \ No newline at end of file +For more details, navigate to the dedicated documentation page for [in-stream ads](/delivery/ads). \ No newline at end of file From 5ae0b49e5a67640990582a0eb07c5ffc3d5407b3 Mon Sep 17 00:00:00 2001 From: szekelyzol Date: Fri, 19 Jul 2024 12:43:51 +0200 Subject: [PATCH 4/5] Rename page paths and fix titles --- README.md | 2 +- analytics/README.md | 2 +- analytics/navigation.yaml | 2 +- analytics/{analytics.md => overview.md} | 0 delivery/README.md | 2 +- delivery/navigation.yaml | 2 +- delivery/{delivery-quickstart.md => quickstart.md} | 10 ++++------ doctave.yaml | 4 ++-- get-started/start-building.md | 2 +- 9 files changed, 12 insertions(+), 14 deletions(-) rename analytics/{analytics.md => overview.md} (100%) rename delivery/{delivery-quickstart.md => quickstart.md} (97%) diff --git a/README.md b/README.md index b05ec7de..02626eb7 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Check out the products! [Live streaming quickstart](/live-streaming/create-a-live-stream) - [Delivery & player quickstart](/delivery/delivery-quickstart) + [Delivery & player quickstart](/delivery/quickstart) diff --git a/analytics/README.md b/analytics/README.md index 39c5db01..da2e0323 100644 --- a/analytics/README.md +++ b/analytics/README.md @@ -27,7 +27,7 @@ meta: **Analytics & data**\ Understand how you can collect delivery event data about your videos and live streams. - [Learn more ›](/analytics/analytics) + [Learn more ›](/analytics/overview) ![Analytics SDKs](/_assets/icons/analytics.svg) diff --git a/analytics/navigation.yaml b/analytics/navigation.yaml index a8a2f529..5e61f360 100644 --- a/analytics/navigation.yaml +++ b/analytics/navigation.yaml @@ -4,6 +4,6 @@ - label: How does analytics work? href: /analytics/README.md - label: Analytics overview - href: /analytics/analytics.md + href: /analytics/overview.md - label: Analytics SDKs href: /sdks/player/README.md#player-analytics-sdks \ No newline at end of file diff --git a/analytics/analytics.md b/analytics/overview.md similarity index 100% rename from analytics/analytics.md rename to analytics/overview.md diff --git a/delivery/README.md b/delivery/README.md index 0561617c..d23a181d 100644 --- a/delivery/README.md +++ b/delivery/README.md @@ -25,7 +25,7 @@ meta: **Delivery quickstart**\ Learn how to make the most of your content delivery through branding and customization. - [Learn more ›](/delivery/delivery-quickstart) + [Learn more ›](/delivery/quickstart) ![Using custom domains](/_assets/icons/custom-domains.svg) diff --git a/delivery/navigation.yaml b/delivery/navigation.yaml index 87f37c9d..85b43821 100644 --- a/delivery/navigation.yaml +++ b/delivery/navigation.yaml @@ -4,7 +4,7 @@ - label: How does video delivery work? href: /delivery/README.md - label: Delivery quickstart - href: /delivery/delivery-quickstart.md + href: /delivery/quickstart.md - heading: Features items: - label: Using custom domains for delivery diff --git a/delivery/delivery-quickstart.md b/delivery/quickstart.md similarity index 97% rename from delivery/delivery-quickstart.md rename to delivery/quickstart.md index 165c4172..b6e9a36d 100644 --- a/delivery/delivery-quickstart.md +++ b/delivery/quickstart.md @@ -1,14 +1,12 @@ --- -title: Delivery and Analytics with api.video +title: Delivery with api.video meta: - description: Set up the api.video player and start working with video analytics in 5 minutes + description: Set up the api.video player and start delivering in 5 minutes --- -# Getting started with delivery and analytics +# Getting started with delivery -api.video provides you with powerful tools that enable you to deliver content to your users with great customization and branding while making sure that you get all of the data you need to analyze the viewer's behavior. - -There are two parts to this tutorial, where we will jump into the player capabilities and then look at how to analyze the data we've received from the viewers. +api.video provides you with powerful tools that enable you to deliver content to your users with great customization and branding. ## Get started with api.video player diff --git a/doctave.yaml b/doctave.yaml index 3bb1d7e8..ea8490d1 100644 --- a/doctave.yaml +++ b/doctave.yaml @@ -418,9 +418,9 @@ redirects: - from: /delivery-analytics/ads to: /delivery/ads - from: /delivery-analytics/analytics - to: /analytics/analytics + to: /analytics/overview - from: /delivery-analytics/delivery-analytics-quickstart - to: /delivery/delivery-quickstart + to: /delivery/quickstart - from: /delivery-analytics/domain-referrer to: /delivery/domain-referrer - from: /delivery-analytics/player-customization diff --git a/get-started/start-building.md b/get-started/start-building.md index a372220b..ffb3d33a 100644 --- a/get-started/start-building.md +++ b/get-started/start-building.md @@ -47,6 +47,6 @@ api.video is a cloud-based video hosting and live streaming platform that provid **Delivery quickstart**\ Learn how to make the most of your content delivery through player branding, customization, private videos and live streams, and even in-stream ads. - [Learn more ›](/delivery/delivery-quickstart) + [Learn more ›](/delivery/quickstart) \ No newline at end of file From 7f8cb6717518af68ba207a23467bf37235429e9f Mon Sep 17 00:00:00 2001 From: szekelyzol Date: Fri, 19 Jul 2024 12:44:55 +0200 Subject: [PATCH 5/5] Fix breadcrumbs --- analytics/overview.md | 3 ++- delivery/quickstart.md | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/analytics/overview.md b/analytics/overview.md index 6533c464..857a467c 100644 --- a/analytics/overview.md +++ b/analytics/overview.md @@ -1,10 +1,11 @@ --- title: Analytics +breadcrums: false meta: description: Learn how you can get data insights for your videos and live streams using api.video's Analytics solution. --- -# Analytics +# Analytics overview api.video's Analytics enables you to retrieve complex event data about your videos and live streams. diff --git a/delivery/quickstart.md b/delivery/quickstart.md index b6e9a36d..6997235b 100644 --- a/delivery/quickstart.md +++ b/delivery/quickstart.md @@ -1,5 +1,6 @@ --- title: Delivery with api.video +breadcrums: false meta: description: Set up the api.video player and start delivering in 5 minutes ---