ModernAVPlayer icon indicating copy to clipboard operation
ModernAVPlayer copied to clipboard

audio/subtitles

Open yaroslavlvov opened this issue 5 years ago • 5 comments

I want to simplify audiotracks/subtitles selection

image

  • Want to provide something like this

Subtitles var currentSelectedSubtitle: ModernSubtitle { get } getAvailableSubtitles() -> [ModernSubtitle] selectSubtitle(ModernSubtitle)

AudioTacks var currentSelectedAudioTrack: ModernAudioTrack { get } getAvailableAudioTracks() -> [ModernAudioTrack] selectAudioTrack(ModernAudioTrack)

Where is the best place to implement this according to the current implementation Guessing as part of PlayerMediaItem Protocol and cast it when getting currentMedia from ModerAVPlayer instance

yaroslavlvov avatar Nov 21 '20 10:11 yaroslavlvov

As I think you did, I read apple article: https://developer.apple.com/documentation/avfoundation/media_playback_and_selection/selecting_subtitles_and_alternative_audio_tracks

I think we could work with ModernAVPlayer Plugin System (PlayerPlugin):

  • Media is loaded, plugin system call: func didLoad(media: PlayerMedia, duration: Double?)
  • I can add a AVPlayerItem (from custom protocol) param to this method
  • Then in the plugin, you can download group and options
  • Then use the AVPlayerItem to select group and options previously download

In this case, I just have to provide in didLoad player plugin method the AVPlayerItem previously loaded.

For information, add PlayerPlugin is done on ModernAVPlayer init

what do you think ?

raphrel avatar Nov 21 '20 13:11 raphrel

As I understand I can cast PlayerMedia to PlayerMediaItem in this method, right? Not quite get why there are two separate, however, plugin system will work for me, I was just thinking that this feature could be useful for others potentially and worth implementing internally

yaroslavlvov avatar Nov 21 '20 16:11 yaroslavlvov

ok, I just created a new branch -> you can now use it to access AVPlayerItem and AVAsset when item is loaded and call all methods suggested by Apple

I suggest you create a new GitHub open source repository to create a swift package for the plugin. (can be access by anybody, to use or update it)

  • Create a new Swift Package Project
  • Create your plugin code
  • Use ModernAVPlayer repo or another one to create iOS example to test it ** Inject your plugin in ModernAVPlayer init ** Access to AVPlayerItem from didLoaded delegate method ** Start async task to download group and options ** Choose options you need (you will have iOS example in the project) ** Apply from AVPlayerItem select method

If you have any question, please ask !

PS: do not pay attention to unit tests, I had to adjust them...

raphrel avatar Nov 22 '20 14:11 raphrel

HI @yaroslavlvov ,

can you share a url of a media with subtitle or alternative audio tracks ?

I may try to help if I have some time

raphrel avatar Nov 29 '20 09:11 raphrel

@raphrel the one that you used for demo should have both

yaroslavlvov avatar Nov 29 '20 09:11 yaroslavlvov