aboutsummaryrefslogtreecommitdiffstats
path: root/web/stream.gathering.org/generate_vlc.pl
blob: 5252ec47baacd7aba2a55efd44c359a54177eab2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/perl -I /root/tgmanage/web/stream.gathering.org/streamlib

use warnings;
use strict;

use stream;
use stream::config;
use CGI;
my $client = CGI->new;

my $stream = $client->param('stream');
my $interlaced = $client->param('interlaced');
my $delivery = $client->param('delivery');

my $v4net = $stream::config::v4net;
my $v6net = $stream::config::v6net;
my $multicast_ip = $stream::config::multicast;
my $tg = $stream::config::tg;
my $base_url = $stream::config::vlc_base_host;
my %streams = %stream::config::streams;



#default
if (not defined $delivery) {
	$delivery = "multicast";
}

if((not defined $stream) or (not defined $delivery)) {
	print $client->header();
	die "No stream and/or delivery method, robots unhappy :/\n";
}

my $url = "";
my $port_del = "";
my $port_str = "";
my $extinf = "";
my $url_path = "";

my $clip = $client->remote_addr();

if (exists($streams{$stream})) {
	my $is_multicast = 0;
	# add force is_ip_local in check? 
	$is_multicast = 1	if (exists($streams{$stream}->{has_multicast}) && $delivery eq "multicast");

	if ($is_multicast) {
		$port_del = 20;
		$extinf .= "Multicasted";
		$url = $streams{$stream}->{multicast_ip};
	} else {
		#$port_del = 80;
		$extinf .= "Unicasted";
	        $url = $base_url;
		$url_path = $streams{$stream}->{main_url};
		if($streams{$stream}->{ts_enabled} eq 1) {
			$url_path =~ s/.flv/.ts/;
		}
	}

	$port_del = $streams{$stream}->{preport} if (defined($streams{$stream}->{preport}));
	$port_str = $streams{$stream}->{port};
	$extinf .= " $streams{$stream}->{title}";
		 
} else {
	 &error("No stream and/or delivery method, robots unhappy :-/");
}

#print out new file
print $client->header(-type => "application/vlc",
			"-Content-disposition" => "attachment; filename=tg-".$delivery."-".$stream.".vlc"
);

print "#EXTM3U\n";
print "#EXTINF:-1,TG$tg $extinf\n";
if(defined $interlaced && $interlaced == 1) {
	print "#EXTVLCOPT:deinterlace=1\n";
	print "#EXTVLCOPT:deinterlace-mode=linear\n";
}
if ($port_str == 80) {
  print "$url$url_path\n";
} else {
  print "$url:$port_del$port_str$url_path\n";
}

sub error($) {
	my $message = shift;
	print $client->header();
	die($message."\n");
}