Sailfin - a Jellyfin client for Sailfish OS thread

The icon of Sailfin: a stylized Sailfin fish, which also happens to resemble a play icon, in a half-circle half-square shape Sailfin - a Jellyfin client for Sailfish OS

Jellyfin is a free multimedia server that puts you in control of your media. Stream to any device from your own server, with no strings attached. Your media, your server, your way.

Sailfin allows you to connect to your Jellyfin server and stream media of it to your Sailfish device!

This is still an alpha version. Code may be unstable, design may be suboptimal and features are missing!

Feel free to ask any questions, report bugs and suggest features in this thread!

Screenshots

Show screenshots

Links

  • Available at OpenRepos.net
  • Not yet available in Harbour. I will try to release it over there once the application gets more stable and some of the fundamental functions are implemented and I have stopped creating a new release every other day. I don’t want to overload the QA team :slight_smile:
  • Source code available at GitHub

Bug reporting:

Please use one of the following methods if you want to report an bug:

Known issues

  • No video quality selection possible
  • Sailfin will verly likely force Jellyfin to transcode your video, as it only contains a hardcoded device profile for now.
  • The page transitions are a bit sluggish — probably since Sailfin loads and updates its UI while
    a page transition is in progress.

Planned features

I won’t guarantee anything, but this is the roadmap for the application I currently have in mind

Soon

  • Synchronize playback progress with the Jellyfin server Added in v0.3.0
  • Minor UI adjustments, like displaying errors better
  • Better video playback options (e.g. streaming quality, changing options while streaming)

Later

  • Music playback
  • More advanced photo viewer (swiping through folders, etc)
  • More accurate device profile generation
  • Marking content as favourite or watched

One day

  • Remote controlling other sessions, like selecting content on your phone and playing it on your TV.

Unlikely ever implemented (by me)

My main motivation for this project is to fulfil my personal needs. Some of these features are unnecessary for my usage and since this is an unpaid, hobby project, I consider these features out of scope for this application:

  • Editing metadata — please do your fingers a favour and use a device with a proper keyboard :slight_smile:
  • Advanced music/video playback beyond what QtMultimedia offers.
    • Think of gapless playback, equalizers and so on. Please synchronize your music to your phone with Syncthing or similar and use a more advanced music player.
  • Full, two way media synchronisation.
  • Live television and DVR - I don’t have the proper hardware and a television subscription to test it out.
12 Likes

Nice could be.a replacement for.my logitech media server aka squeeze / box / server

I noticed your app in Storeman some time ago not knowing what Jellyfin is and yesterday I found something more about Jellyfin by accident while surfing the web. Very nice to see a native app for that (and is also mentioned on the Jellyfin website… :wink:).
I would love to take a deeper look at this but didn’t get get the server part running yesterday.
But :+1:t4: thumbs up for native apps!

If you want to have a quick demo, you can connect to “https://demo.jellyfin.org”. Right now the credentials are “demo” as user and an empty password.

Oh, got it running now. I’m still to much Linux newbie and missed to install other things first. Now my Jellyserver is running… Nice thing, and it even works with books!
But now I’m curious for the further improvements of the sailfish app… :wink:

1 Like

Sailfin 0.3.0 has been released on OpenRepos! Changelog:

  • [Playback]: New: playback progress is reported to the Jellyfin server.
  • [Playback]: New: resume partly played items or start playing from the beginning if desired.
  • [UI] Added: if an image cannot be loaded, it will have a random background colour.
  • [Collections]: Added: allow specifying sort order (Ascending, Descending)
  • [General]: Improved: Added video fallback page to allow unknown video types to be played, although without extra metadata.
  • [General]: Improved: Added folder fallback, so unknown collection types are at least displayed without metadata.
  • [Icon] Improved: icon now looks more like a Sailfin fish

Known issues:

  • The RPM is larger than it should be, due to a library not getting stripped.
  • Sometimes changing the sort order breaks things
4 Likes

Thank you very much for this application. I have been using it intermittently the past few weeks. Most videos (in fact almost all) force my rather weak server to transcode the videos to a lower profile. This makes me choose a web browser, not the sailfish browser indeed :smile:, for play back of very high quality videos where it doesn’t force any transcoding. Positive to see the feature to select video quality is in your road-map which will hopefully mitigate forced server side transcoding.

Once again, great application. Thank you!

2 Likes

Right now I sort of have implemented DirectPlay, so it will try avoid transcoding on the server side if possible. It should arrive in the next release!

Note that if you select any subtitles, the server still will encode the subtitles into the video format, since Qt’s Media Player does not support subtitles.

1 Like

@ahappyhuman, I can give you credentials to my TVHeadend server if you want to test it out. DM if you’d like that.

Version 0.4.0 has been released to OpenStores! As for the new features, the biggest one is the new but still basic music player. To support the music player, a whole lot of code had to be written on the C++ side of things, is also the reason why this release took a long time. The upside of this is that it had to be done no matter what to support some of the more upcoming features I have in mind, such as downloading parts of the library of your device.

Additionally, Sailfin will now try to play video’s without transcoding first. Only if it seems it notices that certain codecs are not supported, the bitrate exceeds the maximum or if multiple audio streams are present , it will ask the server to transcode. Transcoding can also be entirely disabled for if the server runs on a Raspberry Pi or a similar device that cannot handle transcoding that well.

Furthermore, some miscellaneous UI tweaks have been made to the application and I’ve also compiled an aarch64 version for the Xperia 10 II.

I’ve tried my best to make sure that there are no regressions compared to the previous version, but since the C++ side was completely rewritten I expect that there still might be some that I haven´t found. Please let me know if you find any of them.

Some screenshots of the new music player


What is next?

As for the next release, I do not know on which thinks I want to focus myself, so I’d like to ask you which features you’d want to see. Please use the poll below to let me know about what I really should consider the next update. If it’s not in there, you can always suggest something by replying to this message as well, these are just the things I came up with.

  • Adding support for livestreams
  • Improved video playback (video quality selection, change settings without stopping video playback, etc)
  • The ability to act as a remote for other Sailfin instances (e.g. the TV applications)
  • Improved library navigation (more sort options, filters, search, dedicated pages for artists instead of generic ones etc)
  • Improved landscape and tablet layout
  • Improved photo viewer (zoom gestures, left/right swipe gesture to browse pictures)
  • Improved media player (shuffle implementation, modifying playlists, adding items to the queue while playing etc)
  • Displaying more details about items, such as the list of actors in a movie, more metadata etc
  • Synchronization (keeping a folder with music or series downloaded on the device for offline use)
  • SyncPlay
  • Better code documentation

0 voters

3 Likes

Is starting to download the next song once the current one on the playlist has been fetched considered an advanced feature which will not be implemented? I have an issue of having very choppy audio at the beginning part of the song due to not having very fast internet on my phone. Depending on the bitrate of the song it can continue to be choppy for quite a long time but eventually will settle. So having the next song on the playlist start downloading while the current is still playing would probably improve the experience a lot and I’d have to deal with the choppy audio/waiting for it to gather enough buffer only with the first song.

And/or a better buffer management would be nice too, so it would automatically wait till a reasonable amount of buffer has been gathered before playing, depending on the download speed and bitrate/size of the file.

I cannot edit the first post any more, so some information is outdated. Right now I’m working on rewriting parts of the media player to:

  1. Allow controlling remote Jellyfin instances (maybe other apps/devices later as well, such as mpd or DLNA)
  2. Allow other media player implementations other than QMediaPlayer, since QMediaPlayer offers very little control. You basically can give it an url, ask it nicely to play it and hope for the best. I’m considering using gstreamer (and keep QMediaPlayer as a fallback for other platforms than Linux), since from reading the documentation I can get more control over buffer management and other things that would be nice, such as choosing the correct audio track and subtitles without having to ask the Jellyfin server to transcode the media.

Right now, I want to get number 1 working first and then I’ll be looking at number 2.

4 Likes

Hi @ahappyhuman, for Whisprfish I had asked the moderators to make it a Wiki post. That means the whole community can edit the first post, but that’s working out pretty well for us. You might want to consider that!

Thanks for Jellyfin :heart:

2 Likes

Version 0.5.0 is released to OpenRepos! After a long time, longer than I hoped at least, I managed to find some time, finish and polish the features I was working on (the last bit of polish is always the hardest :slight_smile: ).

Highlighted features :

  • Control other Jellyfin devices! Open the pulley menu on the main page, select “Remote control”, select your device and pick a film, video or song as usual. The selected media should now play on the selected device!
  • You can select any library to be your main page or keep the default of all libraries. Say, you’d only play music through Sailfin, you can simply set the Music library as your main page.
  • Specialised pages for artists, playlists and the music library have been added
  • Log easier in on other devices using Quick Connect! On an other device running a Jellyfin client, press
  • A Russian translation has been added, with thanks to mbarashkov (GitHub)

Screenshots showcasing new features

Other features/changes

  • Long press a track to directly navigate to the artist page
  • Added a contributor list
  • The information page for a film now displays the films backdrop instead of the poster, since it fits better in the available space
  • A list of contributors has been added, as well as a link to the repository, on the info page

Bugs fixed:

  • The app should no longer freeze on startup when connecting over HTTPS (hopefully, it is just a workaround)
  • Media lockscreen controls work again
  • Lists with more than 100 items no longer keep only repeating the first 100 items to infinity
9 Likes

That’s so cool!!
I suppose this only works for devices logged in on the same account? Didn’t see my Kodi instance around, but that one has its own account (for shared watch state, mainly)

1 Like

It works for all devices that Jellyfin thinks of as controllable by the user, since determining which devices can be controlled is done on the server-side.

You can allow an user to control devices of other users in the settings of that user:

If the top checkbox is checked, it will allow you to control sessions of other users as well. Sadly, Jellyfin does not allow for finer-grained access permissions, but I hope this works well enough in your situation.

1 Like

Niiiice that seems to work. Will test decently tonight ^^

1 Like