@api.video/media-descriptor
TypeScript icon, indicating that this package has built-in type declarations

0.0.1 • Public • Published

Media Descriptor Module

npm version build status license

This module provides a robust way to handle video media descriptions for both VOD (Video on Demand) and Live streams. It consists of two main components: a factory to create media descriptors and a descriptor class to access media information.

Installation

npm install media-descriptor
# or
yarn add media-descriptor

MediaDescriptorFactory

The factory provides two methods to create a MediaDescriptor instance:

fromManifestUrl(url: string, options?: Options): Promise<MediaDescriptor>

Creates a MediaDescriptor from a manifest URL (m3u8).

const descriptor = await MediaDescriptorFactory.fromManifestUrl(
  "https://vod.api.video/vod/vi123456789/hls/manifest.m3u8"
);

Supported URL patterns:

  • VOD public: domain.com/vod/videoId/hls/manifest.m3u8
  • VOD private: domain.com/vod/videoId/token/tokenValue/hls/manifest.m3u8
  • Live public: domain.com/videoId.m3u8
  • Live private: domain.com/private/token/videoId.m3u8

Optional parameters:

  • options.collectorDomain: Override the default analytics collector domain

fromVideoDescription(videoDescription: VideoDescription): Promise<MediaDescriptor>

Creates a MediaDescriptor from a video description object.

const descriptor = await MediaDescriptorFactory.fromVideoDescription({
  mediaId: "vi123456789",
  type: "vod",
  deliveryDomain: "vod.api.video",
  privateToken: "optional-token",
});

MediaDescriptor

The MediaDescriptor class provides access to all video-related information:

Basic Properties

  • title: Video title
  • mediaId: Unique video identifier
  • mediaType: Either 'vod' or 'live'
  • manifestUrl: HLS manifest URL
  • mp4Url: Progressive download URL (VOD only)
  • posterUrl: Thumbnail URL (VOD only)

Domains Information

const domains = descriptor.domains;
// {
//   delivery: "vod.api.video",
//   collector: "collector.api.video"
// }

Chapters Support

// List available chapter languages
const chapters = descriptor.chaptersEntries;
// Get chapter URL for a specific language
const chapterUrl = descriptor.getChapterUrl("en");

Summaries Support

// List available summaries
const summaries = descriptor.summaryEntries;
// [{ lang: 'en', generated: false }, { lang: 'fr', generated: true }]

// Get summary content
const summary = await descriptor.getSummary({ lang: "en", generated: false });
// {
//   title: string;
//   abstract: string;
//   takeaways: string[];
// }

Error Handling

The factory methods may throw:

  • InvalidUrlError: When the manifest URL format is invalid
  • VideoNotFoundError: When the video doesn't exist
  • MetadataFetchError: When metadata cannot be retrieved

Example Usage

try {
  const descriptor = await MediaDescriptorFactory.fromManifestUrl(manifestUrl);

  // Access basic information
  console.log(descriptor.title);
  console.log(descriptor.manifestUrl);

  // Get available chapters
  const chapters = descriptor.chaptersEntries;

  // Get summary if available
  if (descriptor.summaryEntries.length > 0) {
    const summary = await descriptor.getSummary(descriptor.summaryEntries[0]);
    console.log(summary.abstract);
  }
} catch (error) {
  if (error instanceof VideoNotFoundError) {
    console.error("Video not found");
  }
}

Contributing

Contributions are welcome! Please read the contributing guidelines first.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Links

/@api.video/media-descriptor/

    Package Sidebar

    Install

    npm i @api.video/media-descriptor

    Weekly Downloads

    62

    Version

    0.0.1

    License

    MIT

    Unpacked Size

    40.5 kB

    Total Files

    22

    Last publish

    Collaborators

    • apivideo-ecosystem
    • olivierapivideo