Я хочу передать очень большое видео (скажем, 5000x5000), и я хочу обрезать его, чтобы показать фрагменты 1000x1000.В настоящее время я делаю это, передавая видео через TextureView.SurfaceTextureListener.Масштабирование видео до такой степени, что один фрагмент соответствует моему виду и может быть воспроизведен.Вот небольшой фрагмент:
Matrix matrix = new Matrix();
matrix.setScale(scaleX, scaleY, 0, 0);
matrix.postTranslate(positionX, positionY);
textureView.setTransform(matrix);
Однако, поскольку это такое большое видео, некоторые устройства не могут его воспроизвести.Меньшие видео работают хорошо, даже с тем же кодеком.Кажется, что для декодирования требуется слишком много времени, чтобы играть.Это даже произошло, когда я сохранил видео в ресурсах.(может быть, как-то связано с вторым ответом в этом вопросе )
Я пытался использовать ffmpeg, но когда я это сделал, согласно этому вопросу , я получилСообщение об ошибке в ExecuteBinaryResponseHandler.onFailure(): "CANNOT LINK EXECUTABLE "/data/user/0/packageName/files/ffmpeg": /data/data/packageName/files/ffmpeg: has text relocations"
.Таким образом, кажется, что ffmpeg
больше не является вариантом, и никогда не будет, в соответствии с этими вопросами:
Итак, несколько вопросов по этому поводу.
- Есть ли альтернатива ffmpeg, которая позволяет мне обрезать видео программно и с высокой производительностью, прежде чем они будут декодированы проигрывателем?
- Есть ли способ ограничить Android загрузкой только видимых частей видео после масштабирования?Повышение производительности моей первой попытки, масштабирование видео до точки, где я вижу только определенную область?
- Есть ли способ, кроме понижения качества моего видеоисточника, гарантировать, что устройство может воспроизводить видео, или, по крайней мере, программно определить, что видео не может быть воспроизведено?
- Есть ли другой метод или обходной путь, который я могу использовать, чтобы показать обрезанную часть видео?
ОБНОВЛЕНИЕ
Как предлагается в комментариях, до кипенияэто сводится к одному вопросу: есть ли способ для меня обрезать видео программно из URL, чтобы оно воспроизводилось на всех современных устройствах?