Он проигрывает отдельное маленькое видео по кругу.
Когда скролю на 4-ый айтем -> получаю ошибку:
Video codec error
DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, null, video/avc, avc1.4D4028, -1, null, [686, 784, 60.0], [-1, -1])
Caused by: android.media.MediaCodec$CodecException: Error 0xfffffff4
Как пофиксить ?
Экзоплеер использует хардварные декодеры для видео. Их количество ограничено и на разных девайсах оно разное. Когда пихаешь экзоплеер в вьюпейджер ты для каждой страницы создаёшь новый экзоплеер который использует 1 декодер. Тебе нужно ограничить количество страниц вьюпейджера которые рисуются за границей экрана. По дефолту там вроде 1 текущая + 2 по краям. Попробуй захардкодить чтоб всегда только 1 была. Я не помню возможно ли это в вью пейджере. Возможно придется костылить чтоб экзоплеер не рисовался на страницах которые не на экране в данный момент.
или ограничить количество плееров некоторым пулом, откуда доставать плеер и возвращать, если уже не нужен
тут тоже такой момент - иногда нужно преподготавливать плеер, чтобы следующая вкладка игралась без лага поэтому зависит от кейса
Ну можно попробовать два экзоплеера хранить в пуле для текущей страницы и для следующей. Следующую страницу предсказывать на основе направления скролла пейджера юзером. Если вдруг юзер решил поскроллить в обратном направлении то ничего не поделать будет лаг.
все так - но зависит от задачи еще раз - может человеку достаточно вообще 1 плеер всегда держать. некоторые устройства просто не дадут создать вам больше 1 плеера из-за ограничения на декодер.
А можно его заставить юзать softwere декодеры ? Если будет хотя б 1 девайс, который может только 1 декодер то лагов не избежать...
Экзоплеер это не поддерживает так как нужно ффмпег тащить. Есть другие плееры которые это поддерживают. Я юзал mpv в одном из проектов. Он автоматом умеет переключаться на софтверный декодинг если хадрварный фейлится.
Обсуждают сегодня