Closed sadr0b0t closed 2 years ago
https://github.com/sadr0b0t/yashlang/commit/2ae91be502930473667cefea187173b3520cc227
выбор дорожек видео и аудио в одном диалоге
можно выбрать видео без аудио и адио без видео и ни адио и ни видео
если есть поток видео: -- если аудио потока нет (ни встроенного, ни отдельного), обозначим ситуацию иконкой "🔇" (unicode: muted speaker) -- если поток сохранен локально, обозначим иконкой "💾" (unicode: floppy disk) -- если при этом аудио поток играет онлайн, дополинтельно метка "🎵☁️" (unicode: musical note + cloud) (звук в облаке)
если потока видео нет, но есть поток аудио -- режим аудио-плеера: звук есть, изображения нет (вместо изображения - сейчас пустая панель, должно быть - стандартное превью ролика или стандартная заглушка превью - осталось сделать отдельным коммитом) -- обозначен иконкой "🎵" (unicode: musical note) -- если поток сохранен локально, обозначим иконкой "💾" (unicode: floppy disk)
если ролик загружен, но в диалоге не выбораны ни видео ни адио, будет показана панель с предложением выбрать поток для проигрывания (кнопка вызова диалога)
-- режим аудио-плеера: звук есть, изображения нет (вместо изображения - сейчас пустая панель, должно быть - стандартное превью ролика или стандартная заглушка превью - осталось сделать отдельным коммитом)
реализовано: https://github.com/sadr0b0t/yashlang/commit/7ac5b94c34bbcb724fd429951f836c2250030671
Не забыть: убедиться, что если выбран поток "видео+аудио" и еще специально выбран поток "аудио", плеер должен играть отдельную дорожку аудио, т.к. такой выбор говорит о том, что мы хотим заменить оригинальную дорожку на выбранную (для проигрывания встроенной дорожки можно указать "НЕТ" в выпадающем списке для аудио)
На этот счет пока есть сомнения. В коде для этого случая создается совмещенный MergingMediaSource, но каким образом его обрабатвает плеер, т.е. какую из двух дорожек играет - не ясно. Как проверить тоже пока не ясно. Во всех роликах множественные дорожки аудио по содержанию идентичны, отличаются только битрейтом, отличать на слух с телефона битрейт я пока не в состоянии. Может, найдутся ролики, у которых разные дорожки аудио, например, будут переводы ролика на разных языках - тогда можно будет проверить.
По косвенным признакам играет встроенная дорожка, а не внешняя. В этом тикете https://github.com/sadr0b0t/yashlang/issues/126 если играть ролик отдельно видео и отдельно аудио, то ролик фризится через некороторое количество секунд. Если внешнюю дорожку отключить, то фриза не происходит. Так вот, если выбрать поток видео видео+аудио и вместе с ним внешний поток аудио, то ролик все равно не фризит, т.е., судя по всему, в этой комбинации внешний поток аудио игнорируется, а играет - встроенный. Но это не точно пока.
https://github.com/sadr0b0t/yashlang/commit/f9791b00993bd1e187a27902c42270ee3b440291
Дополнение к https://github.com/sadr0b0t/yashlang/issues/131#issuecomment-1182549587
Продолжение истории отсюда: https://github.com/sadr0b0t/yashlang/issues/15
Сейчас можно выбрать только поток видео в выпадающем списке. Аудио выбирается первый из доступных. Можно сделать диаложек, в котором доступные видео и аудио потоки будут в двух выпадающих списках.
Вот здесь такой диалог реализован для выбора потоков для закачки: https://github.com/sadr0b0t/yashlang/issues/8#issuecomment-1177218370
Можно использовать такой же для выбора потоков для проигрывания.
В списках доступных потоков присутствует опция NONE/НЕТ и отключать её не планирую, т.к., например, для потоков видео+аудио отдельный поток аудио не следует выбирать. А еще автоматически появится возможность выбрать один поток аудио без видео. Это может быть просто удобно уже в текущем видео и это будет совсем близко к реализации режима аудио-плеера https://github.com/sadr0b0t/yashlang/issues/7
Т.о. появление этого диалога сразу ставить вопрос проигрывания аудио без видео (это нужно реализовать здесь же или сделать новый тикет). Для этого нужно:
Добавить в плеер два новых экрана состояний: когда выбран поток аудио, но не выбрано видео и когда не выбраны ни видео, ни аудио
для варианта аудино без видео варианты: -- вместо ролика показывать статическую картинку - иконку ролика с сервиса или картинку-заглушку -- показать название ролики и сообщение в середине экрана -- или можно вообще перенести туда кнопки играть/пауза и сделать их большими)
для варианта ни видео ни аудио какое-то сообщение с предложением выбрать хотя бы одну дорожку
вариант видео без аудио: помечать специальной иконкой (символ "нет звука" из юникода) в том же поле, в котором сейчас показано качество выбранной дорожки
Если для проигрывания выбрана дорожка "оффлайн", помечать специальной иконкой (символ "дискета" из юникода) в том же поле, в котором сейчас показано качество выбранной дорожки -- Здесь нюансик: что рисовать, если дорожка видео оффлайн, а аудио - онлайн. Не рисовать дискетку не правильно. Рисовать вторую дискетку перечеркнутую или что-то в таком духе?
Этой же иконкой можно помечать такие дорожки в списках выбора дорожек для проигрывания