Skip to content

Releases: warren-bank/Android-ExoPlayer-AirPlay-Receiver

v2.0.7

30 Mar 21:17
Compare
Choose a tag to compare
improve title displayed in notification for active media item

add position of item in media queue:
  [p/t] => position of total

v2.0.6

30 Mar 06:54
Compare
Choose a tag to compare
customize "PlayerNotificationManager"

hide notification when queue is empty

v2.0.5

30 Mar 02:11
Compare
Choose a tag to compare
remove unnecessary class import

v2.0.4

29 Mar 23:28
Compare
Choose a tag to compare
initialize visibility of buttons that display with PlayerControlView

v2.0.3

29 Mar 21:11
Compare
Choose a tag to compare
fix: convert file paths in playlists to file: URIs

* this worked correctly in the 'v01' branch
  because playlists were processed differently

* in 'v01':
  - after media items were extracted from a playlist,
    each item was added to exoplayer's media queue individually
  - the workflow for adding a single playlist item
    followed the same path as any other media item,
    and this included normalizing file paths

* in 'v02':
  - after media items are extracted from a playlist,
    all items are added to exoplayer's media queue atomically
  - this list of new playlist items needed normalization

* additionally:
  - remove UTF-8 BOM when reading a file from storage
* particular case:
  - Total Commander has a great feature to easily create playlists
  - right-click context menu for media files includes: 'Add to Queue'
  - Total Commander plays the media file in its own internal player
  - additional media files can be added to its queue (same approach)
  - Total Commander can save its queue of media files to a playlist
    * file extension is: .m3u8
    * file format is: UTF-8 with BOM
  - to play this playlist in ExoAirPlayer:
    * the .m3u8 file extension is treated as an HLS VOD manifest
      - each video in the playlist will play in sequential order
      - each video is NOT parsed out of the playlist,
        nor individually added to the ExoPlayer media queue
    * if the file extension is simply changed to: .m3u
      - everything works as expected

* additionally:
  - suddenly the "PlayerNotificationManager" PendingIntent
    stopped working; maybe it's only under certain conditions.. idk
  - error:
    java.lang.SecurityException: Permission Denial: starting Intent {
      cmp=.ui.VideoPlayerActivity
    }
    from null (...) not exported
  - fix:
    * in AndroidManifest.xml, add to VideoPlayerActivity:
      android:exported="true"

v2.0.2

29 Mar 07:44
Compare
Choose a tag to compare
add "PlayerNotificationManager"

needs a few finishing touches, but works great

v2.0.1

28 Mar 09:56
Compare
Choose a tag to compare
enable feature: repeat mode

* default mode  = repeat all
* toggle button = repeat all, repeat one, none

notes:
======

* a concerning issue is how ExoPlayer stops streaming HLS video
  when the server is unreliable and buffer can become depleted
  (ie: response time for chunk requests varies widely)
* anecdotally, this feature seems to help; but it's not a fix

v2.0.0

28 Mar 07:52
Compare
Choose a tag to compare
completely fixed the Threading issue

* now that all calls to ExoPlayer are made on the main UI Thread:
  - all features appear to work perfectly without any quirks
  - logcat is as clean as a whistle
    * contains crazy verbose logging
    * not a single warning or error after lots of testing

status:
=======

* atm, I'm just happy that this open-heart surgery went so well;
  the end result is pretty much exactly what I set out to achieve

* next steps, I want to add a notification with playback controls.
  - buttons to:
    * pause/resume, skip to prev/next track, etc
  - click to:
    * open video player activity
    * rebind exoplayer to a playerview
      - note: low-level way to achieve this now is to either:
        * play an empty URL (SPA validation requires whitespace)
            ie: curl -X POST -d "" "${ip}/play"
        * use a new endpoint that hasn't yet been added to the SPA
            ie: curl -X POST -d "" "${ip}/show-player"
  - this is all off-the-shelf stuff,
    but I need to wire it into the PlayerManager

v1.0.24

28 Mar 02:25
Compare
Choose a tag to compare
fix: copy/paste mistake

v1.0.23

25 Mar 23:02
Compare
Choose a tag to compare
never bind to a network interface that doesn't support multicast

effectively filters connected VPN tunnels

observations:
=============

* OpenVPN for Android
  - when VPN is connected before service is started on receiver:
    * service correctly binds to LAN interface (not VPN)
    * clients on LAN can communicate with receiver through service
  - when service is started before VPN is connected on receiver:
    * same behavior once VPN is connected
  - links:
      https://github.com/schwabe/ics-openvpn
  - tested with v0.6.64:
      https://f-droid.org/archive/de.blinkt.openvpn_145.apk

* strongSwan (IKEv1, IKEv2)
  - when VPN is connected before service is started on receiver:
    * service correctly binds to LAN interface (not VPN)
    * clients on LAN cannot communicate with receiver through service
  - when service is started before VPN is connected on receiver:
    * same behavior once VPN is connected
  - links:
      https://wiki.strongswan.org/projects/strongswan/wiki/AndroidVPNClient
      https://download.strongswan.org/Android/
  - tested with v1.9.6:
      https://download.strongswan.org/Android/strongSwan-1.9.6.apk