cosmonova-rnd/caspar-cg

CasparCG PHP 库

v2.0.0 2021-08-31 11:13 UTC

This package is not auto-updated.

Last update: 2024-09-25 00:57:28 UTC


README

是 CasparCG 2.0 AMCP 协议和 OSC 协议的实现

要求

  • CasparCG v2.0.7|v2.3.0
  • PHP 7.0

安装

使用 Composer 安装

php composer.phar require cosmonova-rnd/caspar-cg

使用方法

AMCP

使用 AMCP 协议的最简单方法是通过 Caspar CG 连接发送手写命令

$client = new \CosmonovaRnD\CasparCG\Client();

$response = $client->send('play 1-1 test');

if($response->success()) {
    echo 'OK';
} else {
    echo 'Failed';
}

但您也可以使用现有的命令构建器之一。

例如,我们想要在通道 1 和层 10 上循环播放内容 'test'

$client = new \CosmonovaRnD\CasparCG\Client();

$playCmdBuilder = new \CosmonovaRnD\CasparCG\Command\Basic\Builder\PlayBuilder();
$playCmdBuilder->channel(1);
$playCmdBuilder->layer(10);
$playCmdBuilder->clip('test');
$playCmdBuilder->loop();

$response = $client->send($playCmdBuilder->build());

if($response->success()) {
    echo 'OK';
} else {
    echo 'Failed';
}

OSC

OSC 通过 UDP 协议工作。

我将通过一个小示例来展示如何捕获消息

$server = new \CosmonovaRnD\CasparCG\Server('127.0.0.1', 6250);
$server->start();

$parser     = new \CosmonovaRnD\CasparCG\OSC\Parser();

// You can use simple built-in event manager to handle messages
$eventManager = new \CosmonovaRnD\CasparCG\EventManager();

$listener = new MyTestFrameMsgListener(); // Must implement \CosmonovaRnD\CasparCG\ListenerInterface

// Listen all \CosmonovaRnD\CasparCG\OSC\Message\Producer\FFmpeg\Frame messages
$eventManager->listen(\CosmonovaRnD\CasparCG\OSC\Message\Producer\FFmpeg\Frame::class, $listener);

while (false !== $msg = $server->read()) {
    $rawMsg = $parser->parse($msg);

    if ($rawMsg instanceof Bundle) {
        foreach ($rawMsg->getMessages() as $bundleMsg) {
            \CosmonovaRnD\CasparCG\OSC\Message\Producer\FFmpeg\Frame::create($bundleMsg, $eventManager);
        }
    } else {
        \CosmonovaRnD\CasparCG\OSC\Message\Producer\FFmpeg\Frame::create($rawMsg, $eventManager);
    }
}

$server->stop();