ReCast is a multi platform restreaming tool, you can stream with one servers to multiple services
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

112 lines
3.0 KiB

<?php
namespace App\Controller;
use App\Entity\Streams;
use App\Repository\StreamsRepository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse;
/**
* Class Events
* @author Soner Sayakci <shyim@posteo.de>
*/
class Events extends Controller
{
/**
* @var StreamsRepository
*/
private $repository;
/**
* Events constructor.
* @param StreamsRepository $repository
* @author Soner Sayakci <shyim@posteo.de>
*/
public function __construct(StreamsRepository $repository)
{
$this->repository = $repository;
}
/**
* @Route("/events/onPublish")
* @author Soner Sayakci <shyim@posteo.de>
* @param Request $request
* @return Response
* @throws \InvalidArgumentException
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function onPublish(Request $request): Response
{
$postData = $request->request->all();
if (!$this->isRtmpCall($postData)) {
return new Response();
}
if ($stream = $this->getStreamByRequest($postData)) {
$stream->setLive(true);
$manager = $this->get('doctrine.orm.default_entity_manager');
$manager->persist($stream);
$manager->flush();
return new RedirectResponse('live');
}
return new Response('', 401);
}
/**
* @Route("/events/onDone")
* @author Soner Sayakci <shyim@posteo.de>
* @param Request $request
* @return Response
* @throws \InvalidArgumentException
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function onDone(Request $request): Response
{
$postData = $request->request->all();
if (!$this->isRtmpCall($postData)) {
return new Response();
}
if ($stream = $this->getStreamByRequest($postData)) {
$stream->setLive(false);
$manager = $this->get('doctrine.orm.default_entity_manager');
$manager->persist($stream);
$manager->flush();
}
return new Response();
}
/**
* @param array $data
* @return bool
* @author Soner Sayakci <shyim@posteo.de>
*/
private function isRtmpCall(array $data): bool
{
return isset($data['app'], $data['flashver'], $data['addr'], $data['name']);
}
/**
* @param array $data
* @author Soner Sayakci <shyim@posteo.de>
* @return Streams|null
*/
private function getStreamByRequest(array $data): ?Streams
{
[$username, $streamName] = explode('/', $data['app']);
$stream = $this->repository->getStreamByNameAndUsername($streamName, $username, $data['name']);
return $stream;
}
}