Select Git revision
-
Andrej Ramašeuski authoredAndrej Ramašeuski authored
Stream.pm 1.63 KiB
package PiTube::Controller::Stream;
use Mojo::Base 'Mojolicious::Controller';
use constant CONTENT_TYPE => {
m3u8 => 'application/vnd.apple.mpegurl',
ts => 'video/mp2t',
};
sub list {
my $c = shift;
my $cond = {
is_active => 't'
};
my $streams = $c->schema->resultset('Stream_view')->search(
$cond,
{ order_by => 'name' }
);
$c->stash->{streams} = $streams;
}
sub player {
my $c = shift;
# stream
my $stream = $c->schema->resultset('Stream_view')->find({
key => $c->stash->{key}
});
if ( ! $stream ) {
$c->render('stream/404');
return;
}
$c->stash->{stream} = $stream;
if ( ! $stream->is_granted($c) ) {
$c->render('stream/403');
return;
}
$c->render();
}
sub hls {
my $c = shift;
if ( $c->req->url !~ /^\/hls\/([a-z0-9\-]+)(_\w+)?(\/\w+)?\.(m3u8|ts)$/i ) {
$c->render( status => 404, text => '');
return;
}
my ($type, $file) = ($4, $c->req->url);
if ( ! -f $file ) {
$c->render( status => 404, text => '' );
return;
}
if ( $type eq 'ts' ) { # manifesty necheckujeme
my $stream = $c->schema->resultset('Stream')->find({ key => $1 });
$c->render( status => 404, text => '' ), return if ! $stream;
if ( ! $stream->is_granted($c) ) {
$c->render( status => 403, text => '');
return;