coste / ogg

另一个Ogg流解析器,用PHP编写

v0.1 2020-10-15 13:31 UTC

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告诉我。为了避免知识产权问题,并确保我可以保持该代码在自由(作为自由)许可证下,直到我找到一个简单的过程来处理贡献者许可协议,否则不接受代码贡献。

许可证

AGPL

版权(C)2016-2021 Charles-Édouard Coste

本程序是自由软件:您可以在自由软件基金会发布的GNU Affero通用公共许可证的条款下重新分发和/或修改它,许可证版本为3,或(根据您的选择)任何较新版本。

本程序分发时希望它是有用的,但没有任何保证;甚至没有关于适销性或特定用途适用性的隐含保证。有关详细信息,请参阅GNU Affero通用公共许可证。

您应该已经收到随本程序一起提供的GNU Affero通用公共许可证副本。如果没有,请参阅https://gnu.ac.cn/licenses/

PLAY OGG