OMXPlayer wrap shell script, ready for REST/XML-RPC APIs or CLI implementations.
Official OMXPlayer Documentation
$ git clone https://github.com/dennmtr/phomxplayer.git
The recommended way to install phOMXPlayer is through Composer
$ composer require dennmtr/phomxplayer:dev-main
Publish configuration with artisan command optional
$ php artisan vendor:publish --tag phOMXPlayer
Add user to video group required
# usermod -a -G video <username>
Add user to audio group
# usermod -a -G audio <username>
Reserve at least 128MB of system memory to the GPU required
# echo "gpu_mem=128" >> /boot/config.txt
NOTICE: Reboot required...
$player = new OMXPlayer([
'adev' => 'hdmi',
'blank' => true
]);
$player->play('sample.mp4');
echo 'Movie duration: ' . $player->getDuration();
//same as...
$command = new Commands\Duration();
echo 'Movie duration: ' . $command->getFormattedOutput();
$input = 0.5;
if (Commands\Volume::validateInput($input)) {
$command = new Commands\Volume($input);
echo 'New volume level: ' . $command->getFormattedOutput();
}
$arguments = [
'adev' => 'hdmi',
'blank' => true,
'no-keys' => true
];
$player = new OMXPlayer($arguments);
$player->adev; // Returns the Arguments\Adev instance via magic method if exists or null.
$player->adev->getShellArg(); // Returns '--adev hdmi' string, later passed in omxplayer execution.
$player->adev->getValue(); // Returns 'hdmi' string.
$player->adev = 'local'; // Sets a new adev argument instance with its variant value via magic method.
$player->adev->getValue(); // Returns 'local' string.
$player->map([
'adev' => 'both',
'with-info' => false
]);
$player->adev->getValue(); // Returns 'both' string.
$player->with_info->getValue(); // Returns false bool.
$player->blank->getValue(); // Returns true bool.
$player->map([
'adev' => new Arguments\Adev(Arguments\Adev::HDMI),
'blank' => new Arguments\Blank(false),
'with-info' => true,
]);
$player->adev->getValue(); // Returns 'hdmi' string.
$player->getShellArgs(false, false); // Returns '--adev hdmi --no-keys --with-info' string.
$input = true;
if (Arguments\Adev::isValid($input)) {
$player->adev = $input; // It will never reach here because boolean true is not a valid Adev value.
}
$player->adev = $input; // It will throw an ArgumentException because boolean true is not a valid Adev value.
See Argument list
$dbus_client = new DBusClient();
$player = new OMXPlayer([], $dbus_client); // Optional
if (!empty($player->pid)) {
$stdout = $dbus_client->call( 'org.freedesktop.DBus.Properties.Get', [
['string', 'org.mpris.MediaPlayer2.Player'],
['string', 'CanControl'],
]); // Assumes an active DBus session. Returns the raw stdout buffer as string
}
A list of predefined commands ready to use...
Command | Param Type | Return Type | Method Alias | Description |
---|---|---|---|---|
Action | int enum |
- | action | Executes a "keyboard" command |
CanControl | - | bool | canControl | Whether or not the player can be controlled |
CanGoNext | - | bool | canGoNext | Whether or not the play can skip to the next track |
CanGoPrevious | - | bool | canGoPrevious | Whether or not the player can skip to the previous track |
CanPause | - | bool | canPause | Whether or not the player can play |
CanPlay | - | bool | canPlay | Whether or not the player can seek |
CanSeek | - | bool | canSeek | Returns the total length of the playing media |
Duration | - | int | getDuration | Returns the total length of the playing media |
GetSource | - | string | getSource | The current file or stream that is being played |
HideSubtitles | - | - | hideSubtitles | Turns off subtitles |
ListAudio | - | array | listAudio | Returns and array of all known audio streams |
ListSubtitles | - | array | listSubtitle | Returns a array of all known subtitles |
ListVideo | - | array | listVideo | Returns and array of all known video streams |
Mute | - | - | mute | Mute the audio stream. If the volume is already muted, this does nothing |
Next | - | - | nextChapter | Skip to the next chapter |
OpenUri | string | string | openUri | Restart and open another URI for playing |
Pause | - | - | pause | Pause the video. If the video is playing, it will be paused, if it is paused it will stay in pause (no effect) |
Play | - | - | resume | Play the video. If the video is playing, it has no effect, if it is paused it will play from current position |
PlaybackStatus | - | bool | playbackStatus | The current state of the player, either "Paused" or "Playing" |
Position | int optional |
int | setPosition, getPosition | Returns the current position, seeks to a specific location in the file. This is an absolute seek |
Previous | - | - | previousChapter | Skip to the previous chapter |
Rate | float optional |
float | setRate, getRate | Set the playing rate and return the current rate, or gets the current rate |
Seek | int | int | seek | Perform a relative seek |
SelectAudio | int | - | selectAudio | Selects the audio stream at a given index |
SelectSubtitle | int | - | selectSubtitle | Selects the subtitle at a given index |
ShowSubtitles | - | - | showSubtitles | Turns on subtitles |
Stop | - | - | stop | Stops the video |
SupportedMimeTypes | - | string | getSupportedMimeType | Supported mime types |
SupportedUriSchemes | - | string | getSupportedUriScheme | Playable URI formats |
Toggle | - | - | toggle | Toggles the play state. If the video is playing, it will be paused, if it is paused it will start playing |
Unmute | - | - | unmute | Unmute the audio stream. If the stream is already unmuted, this does nothing |
Volume | float optional |
float | setVolumeLevel, getVolumeLevel | Set the volume and return the current volume, return's the current volume |
A list of OMXPlayer shell arguments...
Argument | Named Key | Param Type | Acceptable Values | Description |
---|---|---|---|---|
Adev | adev |
string | hdmi local both alsa |
Audio out device |
Advanced | advanced |
int | 0 1 |
Enable/disable advanced deinterlace for HD videos (default enabled) |
Aidx | aidx |
int | - | Audio stream index |
Align | align |
string | left center right |
Subtitle alignment (default: left) |
AllowMvc | allow-mvc |
bool | - | Allow decoding of both views of MVC stereo stream |
Alpha | alpha |
int | 0...255 |
Set video transparency |
Amp | amp |
float | 0...1 |
Set initial amplification in millibels (default 0) |
AspectMode | aspect-mode |
string | letterbox fill strech |
Letterbox, fill, stretch. Default: letterbox |
Avdict | avdict |
string | - | Options passed to demuxer, e.g., 'rtsp_transport:tcp,...' |
Blank | blank |
bool | - | Set the video background color to black |
Cookie | cookie |
string | - | Send specified cookie as part of HTTP requests |
Deinterlace | deinterlace |
bool | - | Force deinterlacing |
Display | display |
int | - | Set display to output to |
FontSize | font-size |
int | - | Font size in 1/1000 screen height (default: 55) |
Font | font |
string | - | Subtitle font absolute file path |
Fps | fps |
int | 16...120 |
Set fps of video where timestamps are not present |
HdmiClockSync | hdmiclocksync |
bool | - | Display refresh rate to match video (default) |
Hw | hw |
bool | - | Hw audio decoding |
ItalicFont | italic-font |
string | - | Subtitle font absolute file path |
Lavfdopts | lavfdopts |
string | - | Options passed to libavformat, e.g. 'probesize:250000,...' |
Layer | layer |
int | - | Set video render layer number (higher numbers are on top) |
Layout | layout |
string | x.x |
Set output speaker layout (e.g. 5.1) |
Lines | lines |
int | - | Number of lines in the subtitle buffer (default: 3) |
Live | live |
bool | - | Set for live tv or vod type stream |
Loop | loop |
bool | - | Loop file. Ignored if file not seekable |
Mode3D | mode3d |
string | FP TB SBS |
Switch tv into 3d mode |
NativeDeinterlace | nativedeinterlace |
bool | - | let display handle interlace |
NoBoostOnDownmix | no-boost-on-downmix |
bool | - | Don't boost volume when downmixing |
NoDeinterlace | nodeinterlace |
bool | - | Force no deinterlacing |
NoGhostBox | no-ghost-box |
bool | - | No semitransparent boxes behind subtitles |
NoHdmiClockSync | nohdmiclocksync |
bool | - | Do not adjust display refresh rate to match video |
NoOsd | no-osd |
bool | - | Do not display status information on screen |
Orientation | orientation |
int | 0 90 180 270 |
Set orientation of video |
Passthrough | passthrough |
bool | - | Audio passthrough |
Pos | pos |
int | - | Start position |
Refresh | refresh |
bool | - | Adjust framerate/resolution to video |
Sid | sid |
int | - | Show subtitle with index |
Subtitles | subtitles |
string | - | External subtitles in UTF-8 srt format |
Threshold | threshold |
int | - | Amount of buffered data required to finish buffering [s] |
Timeout | timeout |
int | - | Timeout for stalled file/network operations (default 10s) |
UserAgent | user-agent |
string | - | Send specified User-Agent as part of HTTP requests |
Vol | vol |
float | 0...1 |
set initial volume in millibels (default 0) |
WithInfo | with-info |
bool | - | dump stream format before playback |
Don't forget to define a valid absolute file path, or a valid url address for the tests process in phpunit.xml configuration file
<const name="TEST_URI" value="/file/path/sample.mp4"/>