2012-11-09 14 views
6

私はSDカードに保存されたビデオからサムネイルを作成しており、サムネイルとその名前をグリッド表示しています。グリッドビューの項目選択イベントでは、ダイアログをポップアップしてx、y、右、下の位置を求めて、それをメインアクティビティに貼り付けます。ビデオファイルを取得し、メディアストアを使用してサムネイルを作成しようとしましたが、サムネイルをビットマップとして取得していますが、ビットマップはnullです。グリッドビューでは、ビデオ名が表示され、対応するサムネイルを選択することができ、サムネイルをメインアクティビティに設定することもできます。問題は、ビットマップがヌルで、ビットマップイメージが表示されないことです(テキストはビデオ名が表示されている)。どうしたの ?私はそれを把握することはできませんか? Plzは私を助ける?私のコードは以下の通りです。前もって感謝します。ビデオサムネイルreturn null

 if (f.isFile()) { 
     if (fName.endsWith(".mpg") 
    || fName.endsWith(".mov") 
    || fName.endsWith(".wmv") 
    || fName.endsWith(".rm") 
    || fName.endsWith(".mp4")) { 
    tv.setText(fName); 
    path = f.getAbsolutePath(); 
    System.out.println("Video file path=>"+path); 


thumb = ThumbnailUtils.createVideoThumbnail(f.getAbsolutePath(),MediaStore.Video.Thumbnails.MICRO_KIND); 


    if(thumb==null) 
     { 
     /**Every time it printing null**/ 
     System.out.println("Thumb is null"); 

     } 
     iv.setImageBitmap(thumb); 

答えて

3

ThumbnailUtils.createVideoThumbnailドキュメントから:デフォルトでMay return null if the video is corrupt or the format is not supported.

、ほぼすべてのサポートされる形式はMP4や3GPあります。既定でサポートされているメディア形式の完全な一覧については、http://developer.android.com/guide/appendix/media-formats.htmlを参照してください。

+0

.movファイルからサムネイルを取得する方法はありますか?たとえば、wowzaサーバーのビデオなど? –

+0

ギャラリーにはサムネイルが表示されます。 - (ビデオが壊れていないかどうか –

-1
Try this code. It is getting the thumbnail of videos from urls. instead of pass the path of sd card .it will help you . Dont forgot to add internet permission in manifest file. 
public class VideoThumbnailActivity extends Activity { 

    public static final String Downloader = null; 
    static String uri1="http://daily3gp.com/vids/lucky_guy.3gp"; 
    static String uri2="http://daily3gp.com/vids/reporter_hit_by_plane.3gp"; 
    static String uri3="http://daily3gp.com/vids/motorcycle_wipesout_explodes.3gp"; 
    static String uri4="http://commonsware.com/misc/test2.3gp"; 
    public static String uri_array[]={uri1,uri2,uri3,uri4,uri1,uri2,uri3,uri4,uri1,uri2,uri3,uri4}; 


    ImageView imageView; 
    String url; 
    Gallery ga1,ga2; 

    /** Called when the activity is first created. */ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     imageView = (ImageView)findViewById(R.id.imageView); 
     ga1 = (Gallery)findViewById(R.id.gallery1); 
     ga1.setAdapter(new ImageAdapter(getApplicationContext())); 
     imageView.setImageBitmap(ThumbnailUtils.createVideoThumbnail(uri_array[0], MediaStore.Video.Thumbnails.FULL_SCREEN_KIND)); 

     //on click event on gallery 
     ga1.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View view, final int position,long arg3) { 
      imageView.setImageBitmap(ThumbnailUtils.createVideoThumbnail(uri_array[position], MediaStore.Video.Thumbnails.FULL_SCREEN_KIND)); 

      //on click event on imageview to play video 
      imageView.setOnClickListener(new OnClickListener() { 

          @Override 
          public void onClick(View view) { 
           // TODO Auto-generated method stub 
           Intent intent = new Intent(getApplicationContext(),PlayActivity.class); 
           intent.putExtra("path",uri_array[position]); 
           startActivity(intent); 
          } 
         }); 

         } 

       }); 

      } 

      public class ImageAdapter extends BaseAdapter { 

       private Context ctx; 
       int imageBackground; 

       public ImageAdapter(Context c) { 
        ctx = c; 
        TypedArray ta = obtainStyledAttributes(R.styleable.Gallery1); 
        imageBackground = ta.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 1); 
        ta.recycle(); 
       } 

       @Override 
       public int getCount() { 

        return uri_array.length; 

       } 

       @Override 
       public Object getItem(int arg0) { 

        return arg0; 
       } 

       @Override 
       public long getItemId(int arg0) { 

        return arg0; 
       } 

       @Override 
       public View getView(int position, View view, ViewGroup arg2) { 

        ImageView iv = new ImageView(ctx); 
        Bitmap curThumb = null; 
        curThumb = ThumbnailUtils.createVideoThumbnail(uri_array[position],MediaStore.Video.Thumbnails.FULL_SCREEN_KIND); 
        iv.setImageBitmap(curThumb); 
        iv.setScaleType(ImageView.ScaleType.FIT_XY); 
        iv.setLayoutParams(new Gallery.LayoutParams(150,120)); 
        iv.setBackgroundResource(imageBackground); 
        return iv; 
      } 
     } 

私はあなたの問題が解決するかしない知っています。

+0

私はSDカードからサムネイルをしたい...とにかく、それは私の中で働いていなかったあなたのreply..butため – Sunny

+0

は、SDカード –

+0

からthumnailsについては、以下の回答のリンクをチェックし、[OK]私はチェックしてみましょう...私はチェックしてみましょう場合によっては:( – Sunny

1

SDカードビデオからサムネイルを作成する場合は、ThumbnailUtils.createVideoThumbnailが作成されます。それ以外の場合はカーソルを使用します。

See this example