ride/lib-media

Ride框架中媒体服务抽象库

1.0.4 2019-10-04 09:38 UTC

This package is auto-updated.

Last update: 2024-09-04 20:09:05 UTC


README

此库增加了对自定义媒体项目的支持,例如YouTube视频、Soundcloud音乐或纯URL。

MediaItem类位于item/目录中,它们的工厂在factory目录中。

此库包含的内容

MediaItemFactory

MediaItemFactory类是所有媒体项目工厂的接口。此工厂有两个职责:

  • 检查给定URL是否适用于关联的MediaItem类
  • 实例化新的MediaItem类

AbstractMediaItemFactorycreateFormUrlcreateFromIdsetClientId方法提供了默认实现。其构造函数需要一个ride\library\http\client\Client实例。

应在子类中实现isValidUrl方法,并包含用于确定URL是否可解析的逻辑。

MediaItem

MediaItem类是所有媒体项目的接口。有一个名为AbstractMediaItem的抽象实现,所有类都可以从中扩展。每个MediaItem类应实现以下方法至少一个:

abstract protected function parseUrl($url);
abstract protected function loadProperties();

parseUrl方法将接受一个给定的URL,并对其进行解析以适用于此特定的MediaItem实现。可以假设这个URL是可解析的,因为已经通过MediaItemFactory进行了检查。

每个媒体项都需要一个工厂,以便MediaFactory能够使用它。

MediaFactory

MediaFactory接口将所有MediaItemFactory实例粘合在一起,形成一个易于使用的门面。它将使用特定的媒体项工厂来测试给定的URL是否可以解析。

通过SimpleMediaFactory类提供了一个通用实现。

代码示例

您可以通过以下代码示例查看此库的一些可能性

use ride\library\media\factory\UrlMediaItemFactory;
use ride\library\media\factory\VimeoMediaItemFactory;
use ride\library\media\factory\YoutubeMediaItemFactory;
use ride\library\media\MediaFactory;
use ride\library\media\SimpleMediaFactory;
use ride\library\http\client\Client;

function createMediaFactory(Client $httpClient) {
    $youtubeMediaItemFactory = new YoutubeMediaItemFactory($httpClient);
    $youtubeMediaItemFactory->setClientId('client-id');
    
    $vimeoMediaItemFactory = new VimeoMediaItemFactory($httpClient);
    
    $urlMediaItemFactory = new UrlMediaItemFactory($httpClient);

    $mediaFactory = new SimpleMediaFactory($httpClient);
    $mediaFactory->setMediaItemFactory($youtubeMediaItemFactory);
    $mediaFactory->setMediaItemFactory($vimeoMediaItemFactory);
    $mediaFactory->setDefaultMediaItemFactory($urlMediaItemFactory);
    
    return $mediaFactory;
}

function useMediaFactory(MediaFactory $mediaFactory) {
    // create a MediaItem using a URL
    $youtubeMediaItem = $simpleMediaFactory->createMediaItem('https://www.youtube.com/watch?v=njos57IJf-0');
    
    $type = $youtubeMediaItem->getType();
    // youtube
    $id = $youtubeMediaItem->getId();
    // njos57IJf-0
    $title = $youtubeMediaItem->getTitle();
    $description = $youtubeMediaItem->getDescription();
    
    // if you know the type and id, you can fetch it like this
    $youtubeMediaItem = $simpleMediaFactory->getMediaItem($type, $id);
}

相关模块

安装

您可以使用Composer安装此库。

composer require ride/lib-media