Top Related Projects
The Free Software Media System - Server Backend & API
Kodi is an award-winning free and open source home theater/media center software and entertainment hub for digital media. With its beautiful interface and powerful skinning engine, it's available for Android, BSD, Linux, macOS, iOS, tvOS and Windows.
VLC media player - All pull requests are ignored, please use MRs on https://code.videolan.org/videolan/vlc
The modern video player for macOS.
🎥 Command line video player
Quick Overview
Plex Media Player is an official desktop client for the Plex media server ecosystem. It provides a rich, user-friendly interface for streaming and managing media content from Plex servers, offering a seamless experience across various platforms including Windows, macOS, and Linux.
Pros
- Cross-platform compatibility (Windows, macOS, Linux)
- Supports high-quality video and audio playback, including 4K and HDR content
- Integrates well with the Plex ecosystem, providing access to all Plex features
- Customizable user interface with various viewing modes (TV mode, desktop mode)
Cons
- Requires a Plex server setup for full functionality
- May be resource-intensive on older hardware
- Limited offline playback capabilities compared to some other Plex clients
- Development has slowed down in favor of Plex for Home Theater and other clients
Getting Started
To get started with Plex Media Player:
- Download the appropriate installer for your operating system from the official Plex website.
- Install the application following the on-screen instructions.
- Launch Plex Media Player and sign in with your Plex account.
- Connect to your Plex server or set up a new one if you haven't already.
- Start browsing and playing your media content.
Note: Plex Media Player is primarily a client application and does not require extensive coding to use. For developers interested in contributing or customizing the player, refer to the GitHub repository for more detailed information on building and modifying the application.
Competitor Comparisons
The Free Software Media System - Server Backend & API
Pros of Jellyfin
- Fully open-source and free, with no premium features or subscriptions
- More flexible and customizable, allowing for deeper user control
- Supports a wider range of media formats out-of-the-box
Cons of Jellyfin
- Less polished user interface and experience compared to Plex Media Player
- Smaller community and ecosystem, resulting in fewer plugins and integrations
- May require more technical knowledge to set up and maintain
Code Comparison
Jellyfin (C#):
public class MediaBrowser : IDisposable
{
private readonly ILogger<MediaBrowser> _logger;
private readonly IFileSystem _fileSystem;
private readonly ILibraryManager _libraryManager;
}
Plex Media Player (C++):
class MediaPlayer : public QObject
{
Q_OBJECT
Q_PROPERTY(PlaybackState state READ state NOTIFY stateChanged)
Q_PROPERTY(qint64 position READ position WRITE setPosition NOTIFY positionChanged)
}
Both projects use object-oriented programming, but Jellyfin is written in C# while Plex Media Player uses C++. Jellyfin's code structure appears more focused on dependency injection and separation of concerns, while Plex Media Player's code shows a Qt-based approach with properties and signals for UI integration.
Kodi is an award-winning free and open source home theater/media center software and entertainment hub for digital media. With its beautiful interface and powerful skinning engine, it's available for Android, BSD, Linux, macOS, iOS, tvOS and Windows.
Pros of XBMC
- More customizable and extensible with a wider range of add-ons and plugins
- Supports a broader range of media formats and codecs out-of-the-box
- Can function as a standalone media center without requiring a server
Cons of XBMC
- Steeper learning curve and potentially more complex setup process
- Less streamlined user interface, which may be overwhelming for some users
- Requires more frequent manual updates and maintenance
Code Comparison
XBMC (C++):
bool CVideoPlayer::OpenDemuxStream()
{
if (m_pDemuxer)
{
m_pDemuxer->Open(m_item.GetDemuxString());
return true;
}
return false;
}
Plex Media Player (C++):
bool MediaPlayer::openMedia(const QString& url)
{
m_player->setMedia(QUrl(url));
return m_player->play();
}
Both projects use C++ for their core functionality, but XBMC's codebase tends to be more complex and feature-rich, while Plex Media Player focuses on a streamlined approach for integration with the Plex ecosystem.
VLC media player - All pull requests are ignored, please use MRs on https://code.videolan.org/videolan/vlc
Pros of VLC
- Open-source with a large community of contributors
- Supports a wider range of audio and video formats out-of-the-box
- More customizable with advanced features for power users
Cons of VLC
- Less polished user interface compared to Plex Media Player
- Lacks built-in media organization and library management features
- No native support for streaming from Plex servers
Code Comparison
VLC (main.c):
int main(int argc, const char *argv[])
{
libvlc_instance_t *inst;
libvlc_media_player_t *mp;
libvlc_media_t *m;
inst = libvlc_new(0, NULL);
m = libvlc_media_new_path(inst, argv[1]);
mp = libvlc_media_player_new_from_media(m);
Plex Media Player (main.cpp):
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
PlayerComponent player(&app);
engine.rootContext()->setContextProperty("player", &player);
Both projects use different approaches for their main entry points. VLC focuses on initializing its core libraries, while Plex Media Player sets up a QML-based user interface and integrates a player component.
The modern video player for macOS.
Pros of IINA
- Open-source and community-driven, allowing for faster development and customization
- Supports a wider range of video and audio formats natively
- Modern, sleek user interface designed specifically for macOS
Cons of IINA
- Limited to macOS, while Plex Media Player is cross-platform
- Lacks built-in media server functionality and library management
- Does not offer seamless integration with other Plex ecosystem products
Code Comparison
IINA (Swift):
override func viewDidLoad() {
super.viewDidLoad()
playerCore.startMPV()
playerCore.playMedia(url)
}
Plex Media Player (C++):
void MediaPlayer::play(const QString& url)
{
m_player->setSource(QUrl(url));
m_player->play();
}
Both projects use different programming languages and frameworks, reflecting their target platforms and design philosophies. IINA's code is more macOS-centric, while Plex Media Player's code is designed for cross-platform compatibility.
IINA focuses on providing a native macOS experience with Swift, while Plex Media Player uses C++ for broader platform support. IINA's codebase is generally more accessible to macOS developers, whereas Plex Media Player's code is more complex due to its cross-platform nature and integration with the Plex ecosystem.
🎥 Command line video player
Pros of mpv
- Lightweight and highly customizable media player
- Supports a wide range of video and audio formats
- Extensive scripting capabilities using Lua
Cons of mpv
- Less user-friendly interface, primarily command-line based
- Lacks built-in media library management features
- Requires more technical knowledge for advanced configurations
Code Comparison
mpv:
mp.add_key_binding("ctrl+s", "screenshot", function()
mp.commandv("screenshot", "video")
end)
Plex Media Player:
MediaKeyHandler {
onPlayPausePressed: player.playPause()
onNextPressed: player.next()
onPreviousPressed: player.previous()
}
The code snippets demonstrate the different approaches to handling user input and media control. mpv uses Lua scripting for custom key bindings, while Plex Media Player utilizes QML for defining media key handlers.
mpv offers more flexibility and customization options for advanced users, whereas Plex Media Player provides a more polished and user-friendly experience with integrated media management features. The choice between the two depends on the user's needs, technical expertise, and desired level of control over the media playback experience.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Deprecation
Note: Plex is no longer actively maintaining Plex Media Player. This repository is preserved as it was when last developed. See https://www.plex.tv/media-server-downloads/#plex-app for replacement applications.
Building
You need:
- Qt 5.9.5
- cmake 3.1 or newer
- ninja is recommended for building
- FFmpeg 3.x and mpv from github
Building on Mac OS X
Configure
If you're happy just building from the command line then run CMake for the ninja build tool:
- Install ninja with homebrew:
brew install ninja
- Install mpv and other dependencies with homebrew:
brew install mpv --with-shared --HEAD
mkdir build ; cd build
cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=output ..
Build (ninja):
ninja
Make a distributable package:
ninja install
(be patient, it's slow)
Or if you prefer working in Xcode, run CMake for the xcode build):
mkdir build ; cd build
cmake -GXcode ..
Building on Linux
Plex Media Player officially requires Qt 5.9.5. Our users have indicated that Qt 5.10 and Qt 5.11 also builds correctly. However, Qt 5.11.0 and 5.11.1 versions are incompatible and should be avoided. Qt 5.12 may work for you. Please consider building PMP within a dedicated VM or Docker container if your system has a Qt version installed newer than 5.9.5. Downgrading a system Qt will cause issues in other applications depending on a newer Qt version.
These instructions are for Ubuntu 16.04 LTS and up. They were tested on a fresh install without extra options and with auto-updates applied.
First, some preparations:
sudo apt install autoconf automake libtool libharfbuzz-dev libfreetype6-dev libfontconfig1-dev libx11-dev libxrandr-dev libvdpau-dev libva-dev mesa-common-dev libegl1-mesa-dev yasm libasound2-dev libpulse-dev libuchardet-dev zlib1g-dev libfribidi-dev git libgnutls28-dev libgl1-mesa-dev libsdl2-dev cmake
mkdir pmp
cd pmp
Systems not based on Debian/Ubuntu will have similar packages, but you'll need to figure out their names yourself.
Downloading and installing Qt
If your distro provides a Qt 5.9.5 package, try to use it. Otherwise, download a supported Qt version from qt.io.
On Windows and OSX, you can omit the -DQTROOT
argument to use the Qt built by Plex. (Untested whether this works reliably.)
Building mpv and ffmpeg
While most distros have FFmpeg and mpv packages, they're often outdated. It's recommended to build a current version, or to get them from 3rd party sources (some are listed on https://mpv.io/installation/).
Here are instructions how to build them locally. First you need to install some build prerequisites:
git clone https://github.com/mpv-player/mpv-build.git
cd mpv-build
echo --enable-libmpv-shared > mpv_options
- you can also add
echo --disable-cplayer >> mpv_options
to prevent mpv CLI from being built ./rebuild -j4
(this steps checks out all sources and compiles them and takes a while)sudo ./install
sudo ldconfig
With this, libmpv should have been installed to /usr/local/
. It does not conflict with the system. In particular, it does not install or use FFmpeg libraries. (The FFmpeg libraries are statically linked in libmpv when using mpv-build.)
You can also attempt to skip the installation step, and change the paths in the PMP build step to the build directory, but this is more complicated.
Building plex-media-player
Assuming that everything else has installed correctly, building Plex Media Player should now be fairly straightforward:
cd ~/pmp/
git clone git://github.com/plexinc/plex-media-player
cd plex-media-player
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DQTROOT=/opt/Qt5.9.5/5.9/gcc_64/ -DCMAKE_INSTALL_PREFIX=/usr/local/ ..
make -j4
sudo make install
You should now be able to start PMP as plexmediaplayer
from the terminal.
If you use your distro's Qt, use -DQTROOT=/usr
or similar.
Normally, the Ninja generator (via -GNinja
) is preferred, but cmake + ninja support appears to be broken on Ubuntu 16.04.
If you want, you can wipe the ~/pmp/
directory, as the PMP installation does not depend on it. Only Qt and libmpv are needed.
Sometimes, PMP's cmake run mysteriously fails. It's possible that https://bugreports.qt.io/browse/QTBUG-54666 is causing this. Try the following:
- locate
Qt5CoreConfigExtras.cmake
of your Qt build/installation - comment
set_property(TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_FEATURES cxx_decltype)
with#
Sometimes, PMP will pick up SDL 1.x libraries. This is not supported and will lead to build failures. You need SDL 2. You can disable use of SLD with -DENABLE_SDL2=off
(it's used for some remotes).
License
Plex Media Player is licensed under GPL v2. See the LICENSE
file.
Licenses of dependencies are summarized under resources/misc/licenses.txt
.
This file can also be printed at runtime when using the --licenses
option.
Top Related Projects
The Free Software Media System - Server Backend & API
Kodi is an award-winning free and open source home theater/media center software and entertainment hub for digital media. With its beautiful interface and powerful skinning engine, it's available for Android, BSD, Linux, macOS, iOS, tvOS and Windows.
VLC media player - All pull requests are ignored, please use MRs on https://code.videolan.org/videolan/vlc
The modern video player for macOS.
🎥 Command line video player
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot