develpr / zencoder
一系列抽象,用于简化使用Zencoder进行音频/视频编码
Requires
- php: >=5.3.0
- illuminate/support: 4.0.x
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.wav
(s3://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发送给您的应用程序的完整通知对象。
开发中...