coste / ogg
另一个Ogg流解析器,用PHP编写
v0.1
2020-10-15 13:31 UTC
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
This package is auto-updated.
Last update: 2024-09-11 03:01:38 UTC
README
Ogg.php是什么?
Ogg.php是一个基于事件的Ogg流解析器,用PHP编写的。
简介
这个库在一定程度上受到了Tim Starling和Jan Gerber的File_Ogg的启发,但目标设计不同。从理论上讲,Ogg流可能没有结束。因此,我们需要一个不存储流数据的Ogg解析器。这就是基于事件解析设计的原因。数据存储策略是最终用户的业务,而解析器只处理从左到右的读取,并在读取到有趣的内容时触发事件。
安装
composer require coste/ogg
示例
计数数据包数量
<?php
require_once 'vendor/autoload.php';
use Coste\Ogg\Parser as Ogg;
$fp = fopen('song.ogg', 'r');
$count = 0;
(new Ogg($fp))
->on('ogg:packet:start', function() use (&$count) {
$count += 1;
})
->run();
echo "There is {$count} packets in this stream" . PHP_EOL;
显示流列表
<?php
require_once 'vendor/autoload.php';
use Coste\Ogg\Parser as Ogg;
$fp = fopen('song.ogg', 'r');
(new Ogg($fp))
->on('ogg:stream:start', function($serial) {
echo "Stream ID: {$serial}" . PHP_EOL;
})
->run();
从Ogg容器中提取原始流
假设我们想要提取一个流,其序列ID为851056896
<?php
require_once 'vendor/autoload.php';
use Coste\Ogg\Parser as Ogg;
$input = fopen("song.ogg", "r");
$output = fopen("song.raw", "w");
(new Ogg($fp))
->on('ogg:packet:end', function($serial, $content) use ($output) {
if ($serial == 851056896) {
fwrite($output, $content);
}
})
->run();
fclose($input);
fclose($output);
事件列表(正在进行中)
事件名称 | 参数 |
---|---|
ogg:packet:start | ? |
ogg:packet:end | ? |
ogg:header:start | ? |
ogg:header:end | ? |
ogg:stream:start | ? |
ogg:stream:end | ? |
贡献
如果您有任何改进的想法或正在实验某些错误,请通过bugtracker或发送电子邮件到charles-edouard@coste.dev告诉我。为了避免知识产权问题,并确保我可以保持该代码在自由(作为自由)许可证下,直到我找到一个简单的过程来处理贡献者许可协议,否则不接受代码贡献。
许可证
版权(C)2016-2021 Charles-Édouard Coste
本程序是自由软件:您可以在自由软件基金会发布的GNU Affero通用公共许可证的条款下重新分发和/或修改它,许可证版本为3,或(根据您的选择)任何较新版本。
本程序分发时希望它是有用的,但没有任何保证;甚至没有关于适销性或特定用途适用性的隐含保证。有关详细信息,请参阅GNU Affero通用公共许可证。
您应该已经收到随本程序一起提供的GNU Affero通用公共许可证副本。如果没有,请参阅https://gnu.ac.cn/licenses/。