Android獲取在線視頻的縮略圖方式對比

現在Android視頻的處理越來越多,下面介紹的是Android獲取在線/網絡視頻的縮略圖:

1、方式一,使用Android原生API,MediaMetadataRetriever,代碼如下:

MediaMetadataRetriever retr = new MediaMetadataRetriever();
retr.setDataSource(newsItem.getUrl(),new HashMap<String, String>());
Bitmap bitmap =  retr.getFrameAtTime();
holder.imageView.setImageBitmap(bitmap);
Log.e("圖片",bitmap.toString());

上面標紅的地方是關鍵,如果是獲取本地視頻的縮略圖就不用後面的參數;

此種方式經過驗證:耗時3秒左右

2、方式二 :創建FFmpegMediaMetadataRetriever對象

 FFmpegMediaMetadataRetriever mm=new FFmpegMediaMetadataRetriever();
 mm.setDataSource(path);//獲取文件縮略圖
    Bitmap bitmap=mm.getFrameAtTime(); 

此種方式沒有親測過耗時,不過應該和方式一差不多;

3、方式三:集成FFMPEG,調用FFMPEG命令獲取視頻縮略圖:

給大家推薦一個比較簡單集成FFMPEG的方法,

(1)、直接在builid文件中 添加下面的依賴:

compile 'com.writingminds:FFmpegAndroid:0.3.2'

(可能有最新版本,大家可以去嘗試下)

(2)、新建一個application類,在onCreat()方法中初始化:

private void initFFmpegBinary(Context context) {

   try {
      FFmpeg.getInstance(context).loadBinary(new LoadBinaryResponseHandler() {
         @Override
         public void onFailure() {
         }
      });

   } catch (FFmpegNotSupportedException e) {
      e.printStackTrace();
   }
}

(3)新建工具類調用FFMPEG命令行去獲取縮略圖,代碼如下:

/sdcard/test.MOV:標明的是視頻源,可以是在線視頻地址,也可以是本地視頻地址

/sdcard/a.jpg :標明的是獲取視頻縮略圖之後保存的地址

0.001:表示的是獲取視頻第1秒的縮略圖
352x240:表示的是獲取到的縮略圖的大小

String cmd = "i /sdcard/test.MOV -y -f image2 -t 0.001 -s 352x240 /sdcard/a.jpg "
String[] command = cmd.split(" ");
try {
    FFmpeg.getInstance(context).execute(command, new ExecuteBinaryResponseHandler() {
        @Override
        public void onFailure(String s) {
    
             Log.e("失敗",s);
        }

        @Override
        public void onSuccess(String s) {
          
            Log.e("成功",s);
        }
        @Override
        public void onStart() {
           
            Log.e("開始","1");
        }
        @Override
        public void onFinish() {
            Log.e("完成","3");
        }
    });
} catch (FFmpegCommandAlreadyRunningException e) {
    e.printStackTrace();
}
方式3,使用FFMPEG命令可以獲取絕大多數視頻格式縮略圖,如:MP4、MOV、TS、AVI 等一些主流視頻格式,而且速度很快。

上面介紹了3種獲取縮略圖的方法,不過大家要注意下,如果獲取的圖片較大、很多的話就得處理了,防止OOM等一些基本問題。





 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章