audio/subtitles
I want to simplify audiotracks/subtitles selection

- 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
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
AVPlayerItemto 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 ?
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
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
AVPlayerItemselect method
If you have any question, please ask !
PS: do not pay attention to unit tests, I had to adjust them...
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 the one that you used for demo should have both