2012-11-09 11 views
6

Sto creando miniature dai video memorizzati nella mia scheda SD, visualizzando le miniature e i relativi nomi nella vista griglia. Nell'evento selezionato dell'elemento della vista a griglia, viene visualizzata una finestra di dialogo che richiede le posizioni x, y, a destra, in basso e quindi incollata all'attività principale. Ho ottenuto i file video e ho cercato di creare una miniatura utilizzando l'archivio multimediale. Sto recuperando le miniature come bitmap, ma la bitmap è nullo. Nella vista della griglia vengono mostrati i nomi dei video e sono in grado di selezionare la miniatura corrispondente e posso dare anche delle posizioni in grado di impostare la miniatura sull'attività principale. Il problema è che la bitmap è null e l'immagine bitmap non viene mostrata (viene mostrato il nome del video del video). Qual è il problema ? Non riesco a capirlo? Plz aiutami? Il mio codice è riportato di seguito. Grazie in anticipo.Restituisce la miniatura del video 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); 

risposta

3

Da ThumbnailUtils.createVideoThumbnail documentazione: May return null if the video is corrupt or the format is not supported.

Per impostazione predefinita, quasi tutti i formati supportati sono mp4 e 3gp. Vedi qui: http://developer.android.com/guide/appendix/media-formats.html per l'elenco completo dei formati multimediali supportati di default.

+0

c'è un modo per ottenere una miniatura dai file .mov ?? ad esempio un video sul server wowza? –

+0

Ma nella galleria posso vedere le miniature; - (Quindi il video non è danneggiato o altro –

-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; 
      } 
     } 

lasciato conoscere il vostro problema è stato risolto o meno.

+0

voglio miniature da sdcard .. comunque fammi controllare ... – Sunny

+0

controlla il link sotto risposta per i sinumeri dalla scheda SD –

+0

ok fammi controllare .. – Sunny

1

Se si sta creando un'anteprima dal video della scheda SD, ciò potrebbe creare ThumbnailUtils.createVideoThumbnail altrimenti utilizzare un cursore.

See this example.

Problemi correlati