File Coverage

blib/lib/VideoLan/Client.pm
Criterion Covered Total %
statement 9 88 10.2
branch 0 24 0.0
condition n/a
subroutine 3 19 15.7
pod 16 16 100.0
total 28 147 19.0


line stmt bran cond sub pod time code
1             package VideoLan::Client;
2              
3 1     1   43120 use warnings;
  1         3  
  1         42  
4 1     1   7 use strict;
  1         2  
  1         38  
5 1     1   2015 use Net::Telnet;
  1         117780  
  1         1045  
6              
7             =head1 NAME
8              
9             VideoLan::Client - interact with VideoLan Client using telnet connection
10              
11             =head1 VERSION
12              
13             Version 0.13
14              
15             =cut
16              
17             our $VERSION = '0.13';
18              
19              
20             =head1 SYNOPSIS
21              
22             C
23              
24             see METHODS section below
25              
26             =head1 DESCRIPTION
27              
28             VideoLan::Client allows you to lauchn vlc and control it using vlc connections. VideoLan::Client offer simple I/O methods.
29             VideoLan::Client require Net::Telnet.
30              
31             =head1 METHODS
32              
33             In the calling sequences below, square brackets B<[]> represent
34             optional parameters.
35              
36             =over 4
37              
38             =item B - create a new VideoLan::Client object
39              
40             $obj = new VideoLan::Client();
41             $obj = new VideoLan::Client ([HOST => $host,]
42             [PORT => $port,]
43             [TIMEOUT => $timeout,]
44             [PASSWD => $passwd,]
45             [DEBUG => $debug_file,]
46             );
47              
48             This is the constructor for VideoLan::Client objects.
49              
50             =back
51              
52             =cut
53              
54             sub new {
55 0     0 1   my $class = shift;
56 0           my $self = {};
57 0           my %args;
58            
59 0 0         if(@_){
60 0           (%args) =@_;
61             }
62 0           $self->{HOST} = 'localhost';
63 0           $self->{PORT} = '4212';
64 0           $self->{TIMEOUT} = 10;
65 0           $self->{PASSWD} = 'admin';
66 0           $self->{DEBUG} = undef;
67 0           $self->{TELNET} = undef;
68            
69 0           foreach (keys (%args)){
70 0           $self->{$_} = $args{$_};
71             }
72            
73 0           bless ($self, $class);
74 0           return $self;
75             }
76              
77             =over 4
78              
79             =item host
80              
81             The default I is C<"localhost">
82              
83             =back
84              
85             =cut
86              
87             sub host {
88 0     0 1   my $self = shift;
89 0 0         if (@_) { $self->{HOST} = shift }
  0            
90 0           return $self->{HOST};
91             }
92              
93             =over 4
94              
95             =item port
96              
97             The default I is C<4212>
98              
99             =back
100              
101             =cut
102              
103             sub port {
104 0     0 1   my $self = shift;
105 0 0         if (@_) { $self->{PORT} = shift }
  0            
106 0           return $self->{PORT};
107             }
108              
109             =over 4
110              
111             =item timeout
112              
113             The default I is C<10> secondes
114              
115             =back
116              
117             =cut
118              
119             sub timeout {
120 0     0 1   my $self = shift;
121 0 0         if (@_) { $self->{TIMEOUT} = shift }
  0            
122 0           return $self->{TIMEOUT};
123             }
124              
125             =over 4
126              
127             =item passwd
128              
129             The default I is C secondes
130              
131             =back
132              
133             =cut
134              
135             sub passwd {
136 0     0 1   my $self = shift;
137 0 0         if (@_) { $self->{PASSWD} = shift }
  0            
138 0           return $self->{PASSWD};
139             }
140              
141             =over 4
142              
143             =item debug
144              
145             The default I is undef.
146             if debug is set to $file, $file will contains the telnet connection log.
147             debug have to be set before the B method
148              
149             =back
150              
151             =cut
152              
153             sub debug {
154 0     0 1   my $self = shift;
155 0 0         if (@_) { $self->{DEBUG} = shift }
  0            
156 0           return $self->{DEBUG};
157             }
158              
159             =over 4
160              
161             =item B - Initiate the connection with vlc
162              
163             $val = $ojb->login;
164              
165             If succed return 1, else return 0.
166              
167             =back
168              
169             =cut
170              
171             sub login {
172 0     0 1   my $self = shift;
173 0           my $retour;
174 0           $self->{TELNET} = new Net::Telnet (Timeout => $self->{TIMEOUT}, Prompt => "/> /", Port => $self->{PORT}, Errmode => 'return');
175 0 0         if(defined($self->{DEBUG})) {
176 0           $self->{TELNET}->input_log($self->{DEBUG});
177             }
178 0 0         return 0 if (!$self->{TELNET}->open($self->{HOST}));
179 0 0         return 0 if (!$self->{TELNET}->waitfor("/Password:/"));
180 0 0         return 0 if (!$self->{TELNET}->put($self->{PASSWD} . "\n"));
181 0 0         return 0 if (!$self->{TELNET}->waitfor("/> /"));
182 0           return 1;
183             }
184              
185             =over 4
186              
187             =item B - Close the connection with vlc
188              
189             $obj->logout;
190              
191             =back
192              
193             =cut
194              
195             sub logout {
196 0     0 1   my $self = shift;
197 0           $self->{TELNET}->put("exit\n");
198 0           $self->{TELNET}->close;
199             }
200              
201             =over 4
202              
203             =item B - Stop the vlc and close the connection.
204              
205             $obj->shutdown;
206              
207             =back
208              
209             =cut
210              
211             sub shutdown {
212 0     0 1   my $self = shift;
213 0           $self->{TELNET}->put("shutdown\n");
214 0           $self->{TELNET}->close;
215             }
216              
217             =over 4
218              
219             =item B - lauchn a command to vlc and return the output
220              
221             @val = $obj->cmd('commande');
222              
223             =back
224              
225             =cut
226              
227             sub cmd {
228 0     0 1   my $self = shift;
229 0           my $cmd = shift;
230 0           my @retour = $self->{TELNET}->cmd($cmd . "\n");
231             #~ $self->{TELNET}->waitfor("/> /");
232 0           return @retour;
233             }
234              
235             =over 4
236              
237             =item B - add a broadcast media to vlc
238              
239             $obj->add_broadcast_media($name,$input,$output);
240              
241             input and output use the syntaxe of vlc input/output
242              
243             =back
244              
245             =cut
246              
247             sub add_broadcast_media {
248 0     0 1   my $self = shift;
249 0           my ($name,$input,$output) = @_;
250 0           $self->cmd('new ' . $name . ' broadcast enabled');
251 0           $self->cmd('setup ' . $name . ' input ' . $input);
252 0           $self->cmd('setup ' . $name . ' output ' . $output);
253             }
254              
255             =over 4
256              
257             =item B - load on config file in vlc
258              
259             $obj->load_config_file($file)
260              
261             =back
262              
263             =cut
264              
265             sub load_config_file {
266 0     0 1   my $self = shift;
267 0           my $file = shift;
268 0           $self->cmd('load ' . $file);
269             }
270              
271             =over 4
272              
273             =item B - save the running config on a file
274              
275             $obj->save_config_file($file)
276              
277             =back
278              
279             =cut
280              
281             sub save_config_file {
282 0     0 1   my $self = shift;
283 0           my $file = shift;
284 0           $self->cmd('save ' . $file);
285             }
286              
287             =over 4
288              
289             =item B - Play a media
290              
291             $obj->media_play($name)
292              
293             =back
294              
295             =cut
296              
297             sub media_play {
298 0     0 1   my $self = shift;
299 0           my $media = shift;
300 0           $self->cmd('control ' . $media . ' play');
301             }
302              
303             =over 4
304              
305             =item B - Stop playing a media
306              
307             $obj->media_stop($name)
308              
309             =back
310              
311             =cut
312              
313             sub media_stop {
314 0     0 1   my $self = shift;
315 0           my $media = shift;
316 0           $self->cmd('control ' . $media . ' stop');
317             }
318              
319              
320              
321             =over 4
322              
323             =item B - lauchn a vlc with telnet interface
324              
325             $val = lauchnvlc;
326              
327             Work only if the host is C. Will only work on *NIX where nohup commande exist and vlc command is in path. lauchnvlc method is not support actually, just in test.
328              
329             =back
330              
331             =cut
332              
333             sub launchvlc {
334 0     0 1   my $self = shift;
335 0 0         if($self->{HOST} eq 'localhost'){
336 0           my $cmd = 'nohup vlc --intf telnet --telnet-port ' . $self->{PORT} . ' --telnet-password ' . $self->{PASSWD} . ' >/dev/null &';
337 0           my $retour = system($cmd);
338 0           sleep 2;
339 0           return $retour;
340             }else{
341 0           return 0;
342             }
343             }
344             =head1 SEE ALSO
345              
346             =over 2
347              
348             =item VLC : VideoLan Client
349              
350             S
351              
352             =item Net::Telnet
353              
354             S
355              
356             =back
357              
358             =head1 EXAMPLES
359              
360             This example connect to a running vlc, lauchn the help commande and logout.
361              
362             use VideoLan::Client;
363             my $vlc = VideoLan::Client->new( HOST =>'192.168.1.10', PORT => '35342', PASSWD => 'mdp_test');
364             $vlc->login();
365             my @help = $vlc->cmd("help");
366             $vlc->logout();
367              
368             This example connect to a running vlc and shutdown it
369              
370             use VideoLan::Client;
371             my $vlc = VideoLan::Client->new( PASSWD => 'mdp_test');
372             $vlc->login;
373             my @help = $vlc->shutdown;
374             $vlc->logout;
375              
376             =head1 SEE ALSO
377              
378             =over 2
379              
380             =item VLC : VideoLan Client
381              
382             S
383              
384             =item Net::Telnet
385              
386             S
387              
388             =back
389              
390             =head1 AUTHOR
391              
392             Cyrille Hombecq, C<< >>
393              
394             =head1 BUGS
395              
396             Please report any bugs or feature requests to C, or through
397             the web interface at L. I will be notified, and then you'll
398             automatically be notified of progress on your bug as I make changes.
399              
400             =head1 SUPPORT
401              
402             You can find documentation for this module with the perldoc command.
403              
404             perldoc VideoLan::Client
405              
406             You can also look for information at:
407              
408             =over 4
409              
410             =item * RT: CPAN's request tracker
411              
412             L
413              
414             =item * AnnoCPAN: Annotated CPAN documentation
415              
416             L
417              
418             =item * CPAN Ratings
419              
420             L
421              
422             =item * Search CPAN
423              
424             L
425              
426             =back
427              
428             =head1 COPYRIGHT & LICENSE
429              
430             Copyright 2008 Cyrille Hombecq, all rights reserved.
431              
432             This program is free software; you can redistribute it and/or modify it
433             under the same terms as Perl itself.
434              
435             =cut
436              
437             1; # End of VideoLan::Client