📄 mplayer.pm
字号:
package MPlayer;use strict;use IPC::Open3 'open3';use threads;use threads::shared;my $tv_thread_run : shared = 1;my @moutput : shared = 1;BEGIN { use vars qw ($VERSION @error $mout $min $merror $mpid $tv_thread_run @moutput); $VERSION = 0.04; # modified by cyclops}sub new{ my ($class, $filename, @parameters) = @_; push @error, "Constructor needs \$filename\n" if (!defined ($filename)); my $self = bless ({}, ref ($class) || $class); # small modification by cyclops # we don't check tv:// http:// filenames if (defined $filename && !($filename =~ /:\/\//) && !(-e $filename)) { push @error, "File $filename does not exist"; } $tv_thread_run = -1; eval { $mpid = open3($min, $mout, $merror, "mplayer", "-quiet", "-slave", @parameters, $filename); }; if ($@) { #/^open3:/ push @error, "Couldn't open MPlayer: $@"; $mpid = undef; } elsif (!$mpid) { push @error, "Couldn't open MPlayer: $!"; $mpid = undef; } $tv_thread_run = 0; @moutput = (); return ($self);}#seek <value> [type=<0/\:1/\:2>]# Seek to some place in the movie.# Type 0 is a relative seek of +/\:- <value> seconds.## Type 1 seek to <value> % in the movie.# Type 2 is a seek to an absolute position of <value> seconds.sub seek{ my $self = shift; my ($value, $type) = shift; return $self->argerr() if not defined $value or not defined $type; return undef unless $self->check_mplayer(); $type = 0 unless defined $type; syswrite $min, "seek $value $type\n"; return 1;}# ????sub edl_mark{ my $self = shift; return -1;}#audio_delay <value># Adjust the audio delay of value secondssub audio_delay { my $self = shift; my $value = shift; return $self->argerr() unless defined $value; return undef unless $self->check_mplayer(); syswrite $min, "audio_delay $value\n"; return 1;}#quit# Quit MPlayersub quit{ my $self = shift; return undef unless $self->check_mplayer(); syswrite $min, "quit\n"; return 1;}#pause# Pause/\:unpause the playbacksub pause{ my $self = shift; return undef unless $self->check_mplayer(); syswrite $min, "pause\n"; return 1;}#grap_frames# Somebody know ?sub grap_frames { my $self = shift; return $self->not_implemented();}#pt_step <value> [force=<value>]# Go to next/\:previous entry in the playtree.sub pt_step { my $self = shift; my ($value, $force) = shift; return $self->argerr() unless defined $value; return undef unless $self->check_mplayer(); $force = "" unless defined $force; syswrite $min, "pt_step $value $force\n"; return 1;}#pt_up_step <value> [force=<value>]# Like pt_step but it jumps to next/\:previous in the parent list.sub pt_up_step{ my $self = shift; my ($value, $force) = shift; return $self->argerr() unless defined $value; return undef unless $self->check_mplayer(); $force = "" unless defined $force; syswrite $min, "pt_up_step $value $force\n"; return 1;}#alt_src_step <value># When more than one source is available it selects the next/\:previous one# (only supported by asx playlist).sub alt_src_step{ my $self = shift; my $value = shift; return unless defined $value; return undef unless $self->check_mplayer(); syswrite $min, "alt_src_step $value\n"; return 1;}#sub_delay <value> [abs=<value>]# Adjust the subtitles delay of +/\:- <value> seconds or set it to <value># seconds when abs is non zero.sub sub_delay { my $self = shift; my $value = shift; my $abs = shift; return $self->argerr() unless defined $value; $abs = 0 unless defined $abs; return undef unless $self->check_mplayer(); syswrite $min, "sub_delay $value $abs\n"; return 1;}#volume <dir># Increase/\:decrease volumesub volume{ my $self = shift; my $dir = shift; return $self->argerr() unless defined $dir; return undef unless $self->check_mplayer(); syswrite $min, "volume $dir\n"; return 1;}#use_master# Switch volume control between master and pcm.sub use_master{ my $self = shift; return undef unless $self->check_mplayer(); syswrite $min, "use_master\n"; return 1;}#mute# Mute/\:unmute sound output.sub mute { my $self = shift; return undef unless $self->check_mplayer(); syswrite $min, "mute\n"; return 1;}#[contrast|brightness|hue|saturation] <-100-100> [abs=<value>]# Set/\:Adjust video parameters.sub contrast { my $self = shift; my $value = shift; my $abs = shift; return $self->argerr() unless defined $value; return undef unless $self->check_mplayer(); $abs = 0 unless defined $abs; syswrite $min, "contrast $value $abs\n"; return 1;}sub brightness { my $self = shift; my $value = shift; my $abs = shift; return $self->argerr() unless defined $value; return undef unless $self->check_mplayer(); $abs = 0 unless defined $abs; syswrite $min, "brightness $value $abs\n"; return 1;}sub hue{ my $self = shift; my $value = shift; my $abs = shift; return $self->argerr() unless defined $value; return undef unless $self->check_mplayer(); $abs = 0 unless defined $abs; syswrite $min, "hue $value $abs\n"; return 1;}sub saturation{ my $self = shift; my $value = shift; my $abs = shift; return $self->argerr() unless defined $value; return undef unless $self->check_mplayer(); $abs = 0 unless defined $abs; syswrite $min, "saturation $value $abs\n"; return 1;}#frame_drop [type=<value>]# Toggle/\:Set frame dropping mode.sub frame_drop { my $self = shift; my $value = shift; return undef unless $self->check_mplayer(); syswrite $min, "frame_drop\n"; return 1;}#sub_alignment <value># Set subtitle alignment.sub sub_alignment { my $self = shift; my $value = shift; return unless defined $value; return undef unless $self->check_mplayer(); syswrite $min, "sub_alignment $value\n"; return 1;}#sub_visibility# Toggle subtitle visibility.sub sub_visibility{ my $self = shift; return undef unless $self->check_mplayer(); syswrite $min, "sub_visibility\n"; return 1;}#sub_pos <value># Adjust subtitles position.sub sub_pos { my $self = shift; my $value = shift; return unless defined $value; return undef unless $self->check_mplayer(); syswrite $min, "sub_pos $value\n"; return 1;}#vobsub_lang# Switch the subtitle language when using VOBSub subtitles.sub vobsub_lang{ my $self = shift; return undef unless $self->check_mplayer(); syswrite $min, "vobsub_lang\n"; return 1;}#get_percent_pos# ???sub get_percent_pos{ my $self = shift; return $self->not_implemented();}#get_time_length# ???sub get_time_length{ my $self = shift; return $self->not_implemented();}#vo_fullscreen# Switch to fullscreen mode.sub vo_fullscreen{ my $self = shift; return undef unless $self->check_mplayer(); syswrite $min, "vo_fullscreen\n"; return 1;}#panscan value [value2]# ???sub panscan { my $self = shift; my $value = shift; return $self->not_implemented();}#loadfile url# Load the given file/\:url.sub loadfile { my $self = shift; my $url = shift; return $self->argerr() unless defined $url; return undef unless $self->check_mplayer(); syswrite $min, "loadfile $url\n"; return 1;}#loadlist file# Load the given playlist file.sub loadlist { my $self = shift; my $file = shift; return $self->argerr() unless defined $file; return undef unless $self->check_mplayer(); syswrite $min, "loadlist $file\n"; return 1;}#change_rectangle val1 val2# ??? used by the rectangle video filter.sub change_rectangle{ my $self = shift; my ($val1, $val2) = shift; return $self->not_implemented();}#dvdnav button# Press the given dvdnav button.# 1 is up, 2 is down, 3 is left, 4 is right, 5 is menu and 6 is select.sub dvdnav{ my $self = shift; my $button = shift; return $self->argerr() unless defined $button; return undef unless $self->check_mplayer(); syswrite $min, "dvdnav $button\n"; return 1;}#gui_[loadsubtitle|about|play|stop]# GUI actionssub gui_loadsubtitle{ my $self = shift; return undef unless $self->check_mplayer(); syswrite $min, "gui_loadsubtitle\n";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -