develpr/zencoder

一系列抽象,用于简化使用Zencoder进行音频/视频编码

dev-l4 2013-02-21 08:09 UTC

This package is not auto-updated.

Last update: 2024-09-28 12:31:12 UTC


README

免责声明/推脱

这是我第一个包,它仍然处于积极开发中,我对Laravel非常新手 - 请随意提出任何建议或如果您发现问题 告诉我。我需要这个包提供的功能,这就是我创建它的原因,但我发布它在这里是因为我想成为整个社区的一部分,并希望为某个人做点贡献。

它做什么

此包提供了一个基本的Zencoder API包装器,以便轻松集成到您的视频/音频密集型Web应用程序中。

对于不熟悉的人来说,Zencoder是一项编码/转码视频和音频文件的服务。服务支持音频和视频格式的列表似乎非常全面。

这使已经非常好的API在Laravel项目中易于使用。此包旨在提供的功能包括

一个简单的ZencoderFile模型,允许您将其视为文件资产,以获取资产位置、状态或其他关于文件的其他属性。

  • Zencoder通知支持 - 自动创建端点并通过API将适当的端点发送到Zencoder,因此您的应用程序将在编码作业完成后自动接收通知(还会触发有用的Laravel事件,例如“完成”或“失败”作业)
  • 基本S3支持(通过Zencoder),以及FTP账户支持文件输入/输出(强烈推荐使用S3,因为它是一个很棒的服务!)。
  • 简单的设置和易于配置,同时让您能够轻松创建所需的编码设置。代码文档齐全,如果(当)此包不满足您的需求时,您可以轻松地找到您需要更改的内容。
  • 最终,Zencoder及其API在这里获得了大部分赞誉,这只是一个使Laravel中使用Zencoder变得更容易的包装器。

注意: 此包没有Zencoder账户将无能为力。您可以将应用程序设置为“测试”模式并免费测试您的应用程序,但再次提醒,您至少需要注册一个账户。有关更多信息,请参阅Zencoder。

安装

有关 Zencoder 文档,请查看Zencoder自己的文档/支持部分。命名得有些讽刺的入门可能是开始的不错地方,并且强烈推荐 - 因为这个包只提供了Zencoder API提供功能的一部分,您可能会在文档中找到一些很棒的内容!

继续...

使用Laravel进行初始设置

安装后通过 php artisan bundle:install zencoder 并运行zencoder迁移 php artisan migrate zencoder,您需要将部分添加到您的 /application/bundles.php 文件中

'zencoder' => array(
	'hanldes' => 'zencoder',
	'auto' => true
),

这允许zencoder捆绑包处理http://www.your-site.com/**zencoder**路由,这对于处理回调是必需的。在某个时刻,也可能沿此路由的某处提供一份简单的报告,以便您查看编码作业的状态,甚至查看其进行的进度(这是由Zencoder的API支持的)。

设置本地环境以处理回调

对于本地开发,或者由于其他原因您的应用程序尚未可访问,您需要查看Zencoder精心设计的zencoder_fetcher实用工具(需要安装ruby gems的能力),您可以在此处了解更多信息。长话短说,这是一个用Ruby编写的命令行实用工具,可以直接从Zencoder获取通知,然后将其POST到您的本地环境。在我的命令行中,我运行如下命令

zencoder_fetcher --url http://tfs.com/zencoder/callback anotmyrealapikey31123k1l23lkj123b

初始API配置

bundles/zencoder/config/目录中,您需要编辑包含Zencoder最基本配置选项的api.php配置文件,其中可能最重要的是'api_key'值。这需要设置以与Zencoder通信。您可以了解更多关于定价和注册信息,或者您可以直接注册一个测试账户。一旦您创建了账户,您需要登录并访问API页面,其中将包含各种API密钥。为了本指南的目的,我建议简单地使用全权限API密钥,因为它将赋予您对账户上所有功能的完全无限制访问权限;然而,集成专用API密钥也可以工作。如果您执行的操作不仅仅是测试,那么您很可能需要在Zencodre.com上了解更多不同选项。

配置文件输入和输出位置

Zencoder可以以多种方式处理文件输入和输出,但此捆绑包目前仅支持S3和FTP传输(即将添加HTTP),其中S3是测试最充分且最推荐的选项。有关更多信息,请参阅api.php文件中的注释,但基本上您需要要求输入(待编码的文件将存储的位置)FTP目录的完整路径,或者存储待处理文件的S3路径。请注意,这是“基础URL”,而不是实际文件的存储位置,而是容器的路径。您需要确保自行设置权限和任何所需的安全功能,如果您使用S3,您可能还想查看Zencoder关于此主题的文档

我在设置S3存储桶时遇到了一些权限问题,如果您希望S3上的输出文件可供公众访问,请确保将'public'键设置为布尔值true

api.php中有许多其他配置选项,但每个都在api.php中有文档,所以请阅读。

测试和基本使用

简单测试

实际上使用此捆绑包编码文件在实践上很简单(在实践中,在理论上 ;)). 您需要自己处理文件上传/验证等,但一旦您将输入文件放置在配置/api.php中指定的'inputs'位置,您可以在您的应用程序中简单地调用Zencoder::create('filename.mov');

在/application/routes.php文件中,您可以创建一个用于测试的非常简单的路由

Route::get('zencodertest', function(){
	$file = Zencoder::create('testsound.wav');	
	var_dump($file);	
});

在这个例子中,您需要在您的 inputs 基础目录中有一个名为 testsound.wav 的文件。在我的应用程序中,这意味着我的 S3 桶 s3://myapplication/raw/audio/testsound.wavs3://myapplication/raw/audio/ 将作为我在 api.php 中定义的 base_url)。

上面的 $file 将是一个 ZencoderFile 实例,并包含一些关于文件的基本信息。在这个阶段,文件包含的信息并不那么有趣,这不是您在应用程序执行的这个阶段最有可能不知道的。

潜在的基本用法

继续使用这个包含一些不太有用的信息的 \Zencoder\Models\ZencoderFile 对象:在我的应用程序中(我使用 Zencoder 进行音频编码),我在做 某些操作

//(*warning: sudoish code*)
$newUserRecording->file(Zencoder::create('file_upload.wav'));

以创建一个 ZencoderFile 和我的更具体的应用程序模型(在这个例子中是一个用户上传的音频文件)之间的关系。然后我可以在应用程序中检索 ZencoderFile 并将其输出给用户,类似于:

//(*omg sudoish code again w/o Blade!*)
<a href="<?php echo $notSoNewRecording->getZencoderFile()->output_path; ?>">install.rootkit.mp3</a>

太棒了!您还可以检查您的数据库表(假设您已设置 zencoder_fetcher 或在公开可用的域上测试此内容!)。

当工作完成时,将返回一些有趣的小部分,包括

  • 文件可以访问的输出路径(当然,假设您在本地已配置权限/路径)
  • 文件大小(字节)
  • 文件时长(秒)
  • 文件的像素宽度和高度(假设它是一个视频)
  • 文件容器(文件类型)
  • 编码信息

...等等,还有更多(或更少)的内容!

编码设置

坦白说,这里没有太多值得讨论的内容,仅仅因为 Zencoder 的编码选项主题非常广泛,最好通过 这里 和使用 [Zencoder 的 API 请求] 构建器(https://app.zencoder.com/request_builder) 来测试各种配置来了解。查看 推荐的编码设置 也很有价值,其中可能包含一些值得阅读的预定义编码选项。

需要注意的是,/application/bundles/zencoder/config/encoding.php(我们可以称之为编码配置文件)并不包含您在 Zencoder 文档中看到的完整的 outputs json 字符串,所以您不能 完全 从 Zencoder 示例中复制/粘贴 - 您将想要排除通知和文件路径信息。

因此,API 请求构建器 中的“样本请求”可能看起来像这样...

{
  "test": true,
  "input": "http://s3.amazonaws.com/zencodertesting/test.mo",
  "output": [
    {
      "format": "3g2",
      "video_codec": "theora",
      "audio_codec": "vorbis",
      "quality": 4,
      "audio_quality": 3,
      "speed": 1,
      "audio_sample_rate": 23,
      "audio_channels": 2,
      "public": 1,
      "notifications": [
        {
          "url": "http://mysite.com/zencoder/callback",
          "format": "json",
          "event": "output_finished"
        },
        "blahblah@afasdfads.com"
      ],
      "h264_reference_frames": 1,
      "h264_profile": "main",
      "h264_level": 1.3,
      "tuning": "animation"
    }
  ]
}

...但在编码配置文件中,您将想要排除通知信息以及除实际 编码关系选项 之外的所有内容,所以您最终会得到...

{
  "format": "3g2",
  "video_codec": "theora",
  "audio_codec": "vorbis",
  "quality": 4,
  "audio_quality": 3,
  "speed": 1,
  "audio_sample_rate": 23,
  "audio_channels": 2,  
  "h264_reference_frames": 1,
  "h264_profile": "main",
  "h264_level": 1.3,
  "tuning": "animation"
}

...像这样的内容!如果您仔细观察,您会看到一些内容缺失了,通知、配置中的公共选项(设置为配置),以及当然,所有的输入选项。

目前只支持单个输出,但应该很容易添加无限数量的输出。

缩略图

Zencoder 在视频编码作业期间生成缩略图图像有许多强大的选项。然而,这些选项中只有一小部分可以通过此包轻松配置,但是很容易将您自己的选项添加到配置中。目前,要启用缩略图,您只需要编码一个视频,并确保在 thumbnails.php 配置文件中将 enabled 标志设置为 true。

目前,额外的选项已在配置中进行文档说明/注释,所以我将保持现状。请注意,默认的编码容器格式实际上是mp3,且对于仅音频文件不会生成缩略图。

事件

当Zencoder返回通知时将触发一个事件。对于完成的任务(zencoder.finished),会触发一个与失败的任务(zencoder.failed)不同的事件。这些事件包含ZencoderFile以及Zencoder发送给您的应用程序的完整通知对象。

开发中...