Можно отображать миниатюру видео с URL-адреса на Android 4 и выше?

Оба из них отлично работают на эмуляторе (2.3.3), но на реальном устройстве (Nexus S с 4.1.2 ) изображение не отображается для миниатюры. Я также попытаюсь запустить его на Android 4 Emulator. Если я установил по умолчанию android:src для ImageView, он больше не отображается. Это заставляет меня думать, что он заменен, но ImageView пуст.

public class MainActivity extends Activity {

    ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        img = (ImageView)findViewById(R.id.img_thumbnail);
        new MyAsync().execute("http://commonsware.com/misc/test.mp4");
    }

    //This version is still not working, but it more readable (edited: Selvin).
    public class MyAsync extends AsyncTask<String, Void, Bitmap>{

        @Override
        protected Bitmap doInBackground(String... objectURL) {
            //return ThumbnailUtils.createVideoThumbnail(objectURL[0], Thumbnails.MINI_KIND);
            return ThumbnailUtils.extractThumbnail(ThumbnailUtils.createVideoThumbnail(objectURL[0], Thumbnails.MINI_KIND), 100, 100);
        }

        @Override
        protected void onPostExecute(Bitmap result){
             img.setImageBitmap(result);
        }
    }
}

Я знаю, что ранее был задан аналогичный вопрос, Отображение миниатюр видео в Android-устройстве с удаленного URL-адреса видео, но я уже пробовали этот и тот же результат.

Почему это не работает на устройстве и как он работает?

Ответ 1

Используйте FFmpegMediaMetadataRetriever, чтобы извлечь миниатюру в нужном месте: FFmpegMediaMetadataRetriever

Ответ 2

Это невозможно для Android и Java, и насколько я знаю какой-либо другой язык, не загружая все видео (исправьте меня, если я ошибаюсь). Не зря, что YouTube и другие крупные видеоуслуги предоставляют простой API для получения большого пальца видео. Так что, если сервер, на котором проживают видео, не поддерживает этот вид API, вызовите его в неудачу.

Ответ 3

Столкнулась с той же проблемой в 2.3, когда пыталась сделать эскиз из файла, который был расположен в папке кеша. Установка флажков разрешения решила проблему:

videoFile.setReadable(true, false);