Giter Club home page Giter Club logo

yuroyami / syncplay-mobile Goto Github PK

View Code? Open in Web Editor NEW
116.0 6.0 5.0 19.56 MB

📱 Unofficial Syncplay client app for Android and iOS. Watch stuff in sync with your friends. Works well with Syncplay on PC. Fully written in Kotlin and Compose multiplatform.

Kotlin 95.98% Java 0.74% Makefile 0.24% C++ 2.08% C 0.15% Ruby 0.28% Swift 0.54%
android sync synchronization syncplay syncplay-client syncplay-protocol video-player kotlin jetpack-compose java media exoplayer mpv mpv-player compose-multiplatform ios iphone kotlin-multiplatform-mobile mobile

syncplay-mobile's Introduction

Syncplay for Mobile (Android & iOS)


Syncplay for Mobile

Syncplay - The Unofficial Mobile Client (for Android and iOS)

Syncplay Android on GitHub releases Syncplay Android on IzzyOnDroid Repo

Syncplay comes bundled with multiple built-in video players on both platforms.
More info is available throughout this readme.
Note: The IzzyOnDroid Android release only contains ExoPlayer

Table of Contents

Introduction

OS - AndroidOS - iOS
Version ReleaseWritten Languageis Maintained?LicenseRequirementRequirement

Syncplay Mobile is a unofficial Syncplay client brings the remarkable functionality of Syncplay PC client to the mobile platforms (Android and iOS). You can synchronize media playback with your friends, allowing you to watch videos together, even when you're physically apart.

It includes real-time chat functionality, enabling seamless communication while enjoying synchronized playback on your Android or iOS device. You can use Syncplay Mobile with your friends who also use Syncplay Mobile, or Syncplay on PC.

Cannot run on Android versions below Android 6.0 Marshmallow and iOS 14.0

Features

  • Seamless compatibility with Syncplay's official PC client.
  • Offers the same core functionality as Syncplay for PC, with a meticulously rewritten Syncplay protocol from Python to Kotlin.
  • Bundled with multiple video players with varying capabilities.
  • Real-time colorful chat functionality, including support for emojis.
  • Extensive range of settings and preferences for customization.
  • Multi-language support (Currently available in English, Chinese, French and Arabic, with more languages coming soon).

How to use

How to use (Android)

Usage on Android is fairly simple:

  • Download the latest release APK from here.
  • Install the APK. If any installation issues arise, uninstall the previous version of the app before installing the new one.
  • Open Syncplay. Specify a username of your choice, a room name of your choice (Tell your friends about it). Select a server from the list (Tell your friends about this one too)
  • Click "Join Room". You will be taken to the Room screen. You're all set. Tell your friends to join the same room and server.
  • ...and that's it. Load the same video file as your friends and enjoy the synchronized playback.

How to use (iOS)

The iOS version cannot be distributed in package format (like Android's APKs). The only ways to install an app on iOS are to either compile this project by yourself on your macOS, or someone would kindly donate to host this app on the Apple app store (the fee is a yearly $99). The iOS app compiles and runs without issues on any iOS device with 14.0 (I assume this can be lowered further but I didn't try).

Capabilities

General capability chart

The UI on both Android and iOS are 99.9% identical, minus some differences due to platform-specific behavior. This chart table will demonstrate things that work, and things that do not work, on each platform and video player.

Feature Android iOS
Chat

Settings & Preferences

Shared Playlists

✔ (Untested)
Video players - mpv (Default)
- ExoPlayer
- VLC
- VLC (Default)
- AVPlayer
Supports TLS

✔ (Netty)

✔ (SwiftNIO)
Picture-in-Picture (PIP) mode

✔ (only AVPlayer)
Can save shortcuts

✔ (Unstable)

Video player capability chart

Some video players are more potent than others in certain areas. Here's a general overview to help you quickly pick the best contender

Feature mpv
Android
ExoPlayer
Android
VLC
Android
AVPlayer
iOS
VLC
iOS
Supported
formats
Most formats (including mkv and HEVC) Depends on device capabilities All formats Depends on device capabilities All formats
Stability with Syncplay Stable (recommended) Mildly Stable Experimental Broken (for now) Alpha
Supports Subtitles (including sideloaded ones)

Best (via libass) ✔

Basic support

No

Can play from URLs/URIs

Supports Chapters

No

No

Architecture

  • UI: Compose multiplatform
  • Architecture: modular (mostly MVVM)
  • Network backbone: Netty (Android), SwiftNIO (iOS) and Ktor (both)
  • Preferences: Jetpack Datastore
  • Integrated media players: Android: Exoplayer (via media3) - mpv (via libmpv) - VLC (via libVLC) iOS: AVPlayer (via AVFoundation) - VLC (via MobileVLCKit)

F.A.Q

If my friend uses Syncplay on PC, can I watch with them ?

  • Yes, you can. Syncplay Android is made to be interoperable.

On Android, I get an error saying "App not installed" upon installing the app. What's wrong ?

  • Uninstall the older version before installing the new one.

Where is the iOS release ?

  • The release has to be uploaded to the Apple app store to make it available to everyone, which I do not own. Volunteers are welcome.

Translating

Syncplay is available in the following languages :

  • If you want to contribute with a translation in a language that isn't available in Syncplay, or
    enhance the actual translations, please refer to #30

Feedback

Feel free to file an issue or a feature request.

If there's anything you'd like to chat about, please feel free to open a new discussion.

Build Process

Requirement: Android Studio Jellyfish or newer. If you want to build the iOS version, you will also need to have Xcode 15.2 or newer. Your Android Studio will need to have the Kotlin Multiplatform Mobile plugin installed. Simply open the repo project using its GitHub link and build the app. It won't require any further tweaking.

Acknowledgments

Thanks to Official Syncplay for maintaining and open-sourcing such an
amazing software.

Thanks to Et0h for his amazing hard work on official Syncplay and
for lending a hand in our issues tracker section.

Thanks to soredake for their thorough testing.

Thanks to everyone who contributed with translations for the app.

License

Syncplay for Android is under
the AGPL-3.0 Open-Source License

syncplay-mobile's People

Contributors

yuroyami avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

syncplay-mobile's Issues

Russian translation

I'm ready to make Russian translation. What can I do to translate it?
Is there any Excel list with strings or something?
Also how about these strings to contain sprintf patterns to allow to make translation in right way?

package renamed again?

Do you plan to rename the app every month? It originally started as com.gintoki.syncplay, got renamed to com.chromaticnoob.syncplay at 2022-07-10, and now (just a month later) was again renamed to com.reddnek.syncplay. Each rename means it becomes a different app. There will be no update notifications (or updates at all) for the currently installed app, users need to uninstall and reinstall. Thus, keeping renaming it every month means manually checking and switching every month – which I doubt is in the best interest of your users.

So: Will this be the last time, or do you plan to continue the renaming? Because as nice as the app is (and thanks for making it available freely and under a FOSS license!), next time I'll rather drop it.

Apologies for the rant, but this is rather unnerving. 😢

Port the remaining functions of Shared Playlists and fix its current bugs

Syncplay Android has the following known bugs when it comes to Shared Playlists:

  • When a user joins a room that has users playing a file other than the first on top of the list, the user loads the first video anyway. This is an inconvenience and a bug to be fixed.
  • During scrolling syncplay's Shared Playlists, some files may appear "playing" while they are not (a bug in the RecyclerView adapter)

Syncplay Desktop has the following features that should be ported to Syncplay Android:

  • Ability to set media directories inside the room the room.
  • Ability to set trusted domains (When URL support is added)
  • Saving and loading a playlist to/from a local file.
  • Shuffle controls
  • Basically every other option when you right-click in the shared playlists section in Syncplay Desktop.

Readiness has no significant effect on playback among users

On Syncplay Desktop, users can choose whether or not the readiness of the room's users affects the playback or not. For instance, if someone else isn't ready, the playback of the video stops for the user until everyone is ready.

For now, Syncplay Android only shows readiness to others without actually making it affect anything. That should be changed as per the the Desktop client.

Unable to customize service

The software can only use the official server, but its delay is too high for me. I built the server myself, but I can't input it here

Picture-in-picture mode

Syncplay should go into PIP (picture-in-picture) mode when minimized (which appears as a floating window above other apps, which can be dismissed). Said feature allows for background playback and also maintaining the connection state.

Can you add Chinese language

This project is so good
Can you add Chinese language, please send me a language template and I will translate it

Make settings (especially UI settings) accessible from within the room

There should be no need for the user to exit the room just to change some of the User Interface (UI) elements, such as the opacity/transparency of texts, their size ...etc. There should be a quickly-accessible menu somewhere to adjust and tweak such things from within the room.

Set Offset feature port

Set Offset setting (which exists on Syncplay PC's GUI), is a (deprecated) feature that allows users to adjust video playback offset without affecting the current announced video position.

MediaInfo feature to show the video file's media info

Some video file formats (such as 12-bit HEVC) do not really play on Syncplay Android due to the limited functionality of some device's integrated codecs/decoders. It would be useful if users could know a detailed breakdown of the video file's contents and tracks through a Media-Info feature.

Port OSD message control

  • OSD msgs checkable settings which Syncplay Desktop has and should be ported to Android :

    Include events in your room (this is already happening, on by default, should be disableable on Android)
    Include events from non-operators in managed rooms (off by default on Desktop, not implemented yet on Android)
    Include events from other rooms (off by default on Desktop, not implemented yet on Android)
    Include slowing down / rewinding notifications. (on by default on Desktop, implemented only for rewinding on Android as of yet, as normal msgs)
    Include warnings (on by default, warnings are being cast as normal msgs, should be shown red with their unique color)

Replacing the integrated player

Syncplay Android currently relies on Google's ExoPlayer to play media. On some devices, some formats may not be supported, some other devices are slow and are inefficient using Software Acceleration.

To make sure all formats are supported and Hardware Acceleration is supported, Syncplay Android can use other integral players such as libVLC, IJK Player...etc

These players are built upon FFmpeg, which means all decoding is done natively.

Pros:

  • Hardware Acceleration would be supported.
  • All media formats would be supported.
  • Reading from some raw streams would be made possible.

Cons:

  • Increased app size by about 60 MBs for libVLC and 20 MBs for IJK Player.
  • Less stable and controllable player.

Workarounds:
To overcome the app size issue, I might resort to some peculiar measures:

  • Deploying different flavors for the APK, one that uses ExoPlayer, one for libVLC, and one for IJKPlayer. These flavors will be named for instance: syncplay-android-Vx.x.x-exo.apk etc.

  • Use one APK, but allow the user to download playera as plugins (downloadable at runtime)

Surely, the latter is tougher to implement. I might come around to using the first option. I would have to wrap the syncplay player in a factory class that returns a unified player which simulates all players without ambiguity.

This would be a nice touch since official Syncplay supports multiple players, that are capable of multiple different things.

No way to reconnect after leaving the room for too long (app in background)

If you leave Syncplay-android in the background for far too long, the device might restrict its activity and therefore would drop the connection to the server. As a result, the user would be kicked out of the room due to inactivity. After returning to the app, the user will see that he got dropped out of the room with no ability to reconnect.

This is not a major issue as users can easily leave the room and join it again, but they would have to load their videos (and subtitles) all over again and they would lose all the message history.

It's a bit of an inconvenience. Therefore, there should be a feature that allows users to reconnect to the room if they return to it after leaving it in the background for a bit of time.

Real filenames are not being used, file indexing IDs are being used instead

When it comes to Syncplay, file names are an important piece of information to share among a room's users in order to know whether they're playing the same file or not. Syncplay currently does not load the real filenames, which is a major drawback thanks to new Android guidelines on how to manage the device's storage and files. This will be fixed in the next version.

Lagging Behind control

ExoPlayer does not provide a good set of methods or interfaces to control videos' playback speed. However, a way to control speed should be implemented in order to port the following settings:

When the main user lags behind:

  • Checkable option: Fast-forward when lagging behind (on by default on Desktop).
  • Checkable option: Don't slow down or rewind others when lagging behind (off on Desktop, and is still experimental).

When others lag behind:

  • Checkable option: Slow down on minor desync (On by default on Desktop)
  • Checkable option: Rewind on major desync (Already implemented on Android, even rewind threshold is adjustable, but there has to be an option to disable it)

No display of video.

The app installs well, runs OK, slightly difficult to set the the file list.
However on running, only the audio runs, synch with the server.
But video file does not display on the app.
Am I missing something?
Synchronisation indeed but only audio!

Video constantly fast forwarding when trying to pause & resume

If I'm hosting a syncplay session on Windows and using the android syncplay client, things work well if the video file is paused on Windows and then plays when the android syncplay client has joined. However, if the syncplay android client pauses & resumes, then the client is never is able to smoothly resume. It constantly stutters and fast forwards. Similarly, if the windows host skips around in the file without pausing and resuming, the android client has the same issue.

Is there a workaround? I just want to be able to sync up if resuming a file without the constant stutters.

Also, I haven't been able to host a room from android without issues for clients. Does the android app have similar settings to the windows syncplay server? I didn't see the same options for syncing as I did in the windows app.

Thanks for your work on this.

youtube support

It would be nice if this can have youtube (and other sites) support with the help of yt-dlp like mpv on desktop.

Add language track preferences.

Syncplay Android is both an Android client for Syncplay and a video player. Since users on Desktop can customize their players outside Syncplay, then Syncplay Android has to offer similar functionality that mimics those players. Language track preferences would be a nice addition.

Add Video by url

Firstly thanks for this project... Kind of buggy but still works great. As a future request can you add option to stream/play video from url instead of local storage

Subtitle text outline

It would be nice if syncplay can have settings for subtitle text outline to make it easier to read, like in mpv for example.

Example of outline from mpv:
Снимок экрана 2023-02-07 171121

Landscape for main screen in tablets

Hi! First than nothing congrats for publishing the app to the Google Play Store, I hope it gains the recognition it deserves.
And now, going to what concerns us. This is not a big deal but I mostly use my tablet in landscape and the app main screen seems to be forced into portrait which makes it a little uncomfortable. I hope you could improve this in the next release.
Thank you in advance.

Empty message history

Message history is appearing empty as of version 0.8.0. Should be fixed by next version.

The inability to synchronize (0.10.0 - BETA)

If you start syncing between android and windows. Then on a Windows machine, the video will rewind to the beginning, due to the time difference when the video on android will go further. And so it goes on until the end of time. However, v0.9.0 - BETA does not behave like this, and it works stably
windows 21h2 (22000.1165) - syncplay 1.6.9
android 11 - syncplay-android 0.10.0 - BETA
I understand that the problem may not be on the syncplay-android side, I'm just sharing my observations

Ability to adjust the reconnection attempt interval

When the connection drops, Syncplay Android attempts to reconnect every 2 seconds until a connection is established.

This results in a recurrent, annoying, persistent and undiscardable popup every 2 seconds which barely leaves the user any ability to close the app. Increasing the interval up to 3 seconds would help smooth things out, as well as adding an option to tweak it.

EDIT: Fixed in 0.11.1.

I successfully streamed!

我在MIXplorer里加入了webdav然后在Syncplayer里选择webdav中的文件夹,于是我可以在线播放了!
图片

Any place to leave reviews?

GitHub definately have to have Reviews or Testimonials feature.

In that case I will write that you made my dream come true which is to be with girlfriend or alone watching something on PC and then will be able to go to kitchen or to WC with having phone playing synced video. Thanks to origin developer, but any way thanks to you too for your time. Definitely syncplay, yt-dlp, aria2c browser extension, even if they technically hard to be used, they made lives of peoples much comfortable, which is incredibly amazing! Probably some day I will see iOS implementation. (yes I know about Apple Developer Subscription or whereever)

Thank you very much! Take care!

TLS not working.

The TLS (Transport Layer Security) connection is not getting established. As a consequence, Syncplay now connects to the servers via a bare unprotected TCP/IP socket.

For many people, this is neither a priority nor an issue. But most of us prefer a secured connection over TLS/SSL if possible, which is one of the major features for Desktop's Syncplay.

This will be fixed asap.

Port the managed room functionality

PC Syncplay provides various helpful methods of syncing rooms. A room where there is an operator who controls when to pause, play or seek, is called a managed room. Syncplay Android does not include this functionality yet.

video player requests

Need more features to the video player.. Like doubt tap (left/right) to backward/forward. option to edit subtitle size and location(x axis) and plese try to add audio and subtitle delay.... These features could really be helpful

Port the functionality of original Syncplay's Shared Playlists

One of the most amazing features of Syncplay is the Shared Playlists feature. As easy as it is to implement it on Desktop, it can be quite challenging on Android due to the limited functionality and permissions.

Yet, there is no such thing as "no way", the feature will be ported soon to Android.

Room Details box is clickable, and not scrollable

The user base utilizes Syncplay in a variety of ways. Some rooms can contain more than 2 or 3 persons. Room Detail box can only show 3 or 4 people max (Changes with the device screen resolution). The box is not scrollable, and also is clickable which interrupts and blocks the user's toich gestures.

The box should be scrollable, and unclickable.

No error shows up when loading a non-video file or a non-subtitle file.

As a consequence to the hotfix 0.5.2a for the issue #4 , there is no error showing up when loading a non-video file, or when loading a subtitle file that isn't actually a subtitle file.

A toast shows up that says "Loaded file successfully" but the files aren't in fact loaded successfully. This will be fixed in accordance with #5

Parallel room sessions

Exiting a room with the "Back" button causes the room to close 'visually' only, while the protocol is still working in the background. Joining the same room again proves that the old joining session is still there, which causes a "parallelity" of sessions.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.