80 lines
4.6 KiB
Markdown
80 lines
4.6 KiB
Markdown
|
[//]: # (title: Play all media, everywhere)
|
||
|
[//]: # (description: Use Platypush to watch YouTube, Facebook and more on your favourite media player.)
|
||
|
[//]: # (image: https://platypush-static.s3.nl-ams.scw.cloud/images/media-ui-1.png)
|
||
|
[//]: # (author: Fabio Manganiello <fabio@platypush.tech>)
|
||
|
[//]: # (published: 2024-08-18)
|
||
|
|
||
|
Platypush 1.2.3 [is
|
||
|
out](https://git.platypush.tech/platypush/platypush/src/branch/master/CHANGELOG.md#1-2-3),
|
||
|
and the main focus of this release is on the #media side.
|
||
|
|
||
|
In particular, Platypush now supports streaming/playing/downloading any media
|
||
|
compatible with youtube-dl / yt-dlp, even if the upstream audio/video files are
|
||
|
split - yay!
|
||
|
|
||
|
This means that it's again compatible with #YouTube URLs (the integration broke
|
||
|
recently after YouTube migrated all of its media to split video+audio tracks),
|
||
|
and a lot of other sources that have been using this practice for a while -
|
||
|
Facebook, Instagram, X, TikTok etc.
|
||
|
|
||
|
It means that you can play anything that yt-dlp can digest to any supported
|
||
|
media plugin - VLC, mpv, mplayer, gstreamer, Kodi or Chromecast/Miracast.
|
||
|
|
||
|
Note however that mileage may vary depending on the player.
|
||
|
|
||
|
Things work fine out of the box if you use `media.mpv`. MPV comes with native
|
||
|
youtube-dl support, and the right stuff will be used to play the video smoothly
|
||
|
if youtube-dl or yt-dlp are present on the system.
|
||
|
|
||
|
[`media.vlc`](https://docs.platypush.tech/platypush/plugins/media.mpv.html) and
|
||
|
[`media.gstreamer`](https://docs.platypush.tech/platypush/plugins/media.gstreamer.html)
|
||
|
now provide two different play modes for YouTube-compatible content: _play on
|
||
|
the fly_ and _play with cache_. In play-on-the-fly mode (default) audio and
|
||
|
video content will be mixed on the fly over ffmpeg and piped to the player
|
||
|
process. This means shorter load times, it's a good fit for live streams and
|
||
|
large files, but it also means potentially lower media quality, high chances of
|
||
|
media jitters in case of gaps in the stream being transcoded, and reduced
|
||
|
ability to seek through the media. In play-with-cache mode the transcoded
|
||
|
content will be cached to disk instead. It means waiting a bit longer for the
|
||
|
video to load, and higher disk usage in case of large streams, but also a more
|
||
|
robust and smooth playback experience.
|
||
|
|
||
|
![Screenshot of the media playlist UI, showing a context menu with the existing
|
||
|
"Play" option and the new "Play (With Cache)"
|
||
|
option](https://platypush-static.s3.nl-ams.scw.cloud/screenshots/media-ui-screenshot-1.png)
|
||
|
|
||
|
However I'm investigating a way to pass both an audio and a video URLs to
|
||
|
GStreamer (it doesn't seem to be easily feasible with VLC), so the player can
|
||
|
do its own tuned mixed playback without me having to reinvent the wheel. If I
|
||
|
can sort it out, and manage to avoid big audio offsets in the playback process,
|
||
|
then this could be the default mode for GStreamer.
|
||
|
|
||
|
[`media.mplayer`](https://docs.platypush.tech/platypush/plugins/media.mplayer.html)
|
||
|
only supports play-with-cache mode. The plugin already uses the player's stdin
|
||
|
to communicate commands, and AFAIK MPlayer doesn't support sending both
|
||
|
commands and media bytes to the player. Same goes for
|
||
|
[`media.kodi`](https://docs.platypush.tech/platypush/plugins/media.kodi.html).
|
||
|
|
||
|
[`media.chromecast`](https://docs.platypush.tech/platypush/plugins/media.chromecast.html)
|
||
|
mileage may vary depending on the model of Chromecast. I haven't had much luck
|
||
|
playing audio+video simultaneously when Platypush streams YouTube content to
|
||
|
1st-gen Chromecasts because the new video codecs used by YouTube videos
|
||
|
apparently aren't available on those devices. I've had mixed results by forcing
|
||
|
the container to transcode the video track to H264 (and that is also the new
|
||
|
default configuration for `ytdl_args` for the `media.chromecast` integration),
|
||
|
but there's still a 50/50 chance that the Chromecast will only play the audio.
|
||
|
I've had better luck with more recent Chromecast models though. And I believe
|
||
|
that things should work just fine if you use any modern
|
||
|
Miracast/DLNA-compatible device/dongle. Given the deprecation status of the
|
||
|
Chromecast, and the dubious compatibility with whatever the Google TV folks are
|
||
|
planning next, I'm not even sure if it's worth investing further energies in
|
||
|
for the Chromecast compatibility. `media.chromecast` now also provides a
|
||
|
`use_ytdl` configuration flag - it's set to true by default, but you can
|
||
|
disable if you want to stream YouTube/Facebook/TikTok etc. URLs to your
|
||
|
Chromecast bypassing the Platypush streaming service. This means higher chances
|
||
|
that the content will play fine, but it also means that it'll be played by
|
||
|
whatever compatible app (if available) runs on your Chromecast (i.e.
|
||
|
ads/tracking/account limitations/geo limitations etc.).
|
||
|
|
||
|
Stay tuned!
|