diff --git a/markdown/Play-all-media-everywhere.md b/markdown/Play-all-media-everywhere.md new file mode 100644 index 0000000..90a4024 --- /dev/null +++ b/markdown/Play-all-media-everywhere.md @@ -0,0 +1,79 @@ +[//]: # (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 ) +[//]: # (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!