про разработку на ios - постараюсь наиболее подробно обрисовать ситуацию. Используем react native track player 1.1.3 , react-native-video 3.2.1 и react-native-airplay-ios. В главном компоненте используется Video компоненты для слайдера. При логине пользователь может воспроизводить треки с удаленного стриминг сервера а также через Airplay стримить на другие устройства. При логауте юзера во время стриминга на другое устройство начинается стрим видоса из слайдера - нечто подобное описывал пользователь здесь - https://www.reddit.com/r/apple/comments/7tmpyv/its_really_annoying_when_youre_playing_a_video/ Пробовал использовать РН Airplay.disconnect () который вроде как должен отключать хост устройство от стриминга на удаленное устройство. Этот метод соответствует нативному коду - https://github.com/gazedash/react-native-airplay-ios/blob/master/ios/RNAirplay.m#L35 как я понял он просто удаляет observer т.е. мы перестаем просто отслеживать уведомления https://developer.apple.com/documentation/foundation/nsnotificationcenter/1413994-removeobserver?language=objc? Мне же нужно сделать переключение на хост устройство. Пробовал в нативный код в данный метод добавить такие строки [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; - вроде как мы должны изменить категорию что изменит route "направление стримминга" https://developer.apple.com/documentation/avfoundation/avaudiosession/1616583-setcategory
Но это не помогло. Пробовал такую строчку [[AVAudioSession sharedInstance] setOutputDataSource:nil error:nil]; в надежде что у меня сбросятся вообще выходные устройства. Но тщетно. Также нашел такое - https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/AirPlayGuide/OptingInorOutofAirPlay/OptingInorOutofAirPlay.html#//apple_ref/doc/uid/TP40011045-CH3-SW1 пробовал использовать allowsExternalPlayback - https://developer.apple.com/documentation/avfoundation/avplayer/1387441-allowsexternalplayback для видео компонента который вроде как должен предотвращать стрим видео через airplay - не помогло. Кто-нибудь работал с Airplay сталкивался с такого рода багом в нативе?
#Airplay Вообщем добавил такие строчки в вызов Airplay.disconnect() [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:(nil)]; [[AVAudioSession sharedInstance] setActive:YES error:nil]; [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:(nil)]; но есть проблема что вызов первый раз отрабатывает норм и [[[AVAudioSession sharedInstance] currentRoute] outputs] меняется с Airplay на мой девайс. Но вот второй раз такого не происходит хотя каждый метод(строчки выше) возвращают YES. Может у кого-то есть идеи что я делаю не так?
Обсуждают сегодня