Android视频开发简易方法


一些简易的视频开发代码。


一、视频的读取,显示

安卓提供了一个VideoView类,用起来很方便。如果仅仅是播放视频,这个类足够用了。但是扩展性不好。

它继承自SurfaceView并实现了MediaPlayerControl接口,并封装了一个MediaPlayer对象。如果有兴趣可以仿照他自己实现一个,方便扩展。

文章有很多,不赘述了。

视频读取最麻烦是缩略图的显示。尤其是在2.2之前。2.2提供了一个ThumbnailUtils类,可以方便的取到缩略图,但是之前的版本没有。需要手动取。

不多说了,上代码。

  1. String whereClause = MediaStore.Video.Media.DATA + " = '" + "/sdcard/DCIM/Camera/2011-03-12_11-07-40_252.3gp" + "'";  
  2. Cursor cursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,  
  3.         new String[] { MediaStore.Video.Media._ID }, whereClause, nullnull);  
  4. if (cursor == null || cursor.getCount() == 0) {  
  5.     return;  
  6. }  
  7. cursor.moveToFirst();  
  8. int videoId = cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media._ID));  
  9.   
  10. BitmapFactory.Options options = new BitmapFactory.Options();    
  11. options.inDither = false;    
  12. options.inPreferredConfig = Bitmap.Config.ARGB_8888;    
  13. Bitmap bm = Thumbnails.getThumbnail(getContentResolver(), videoId,  Images.Thumbnails.MINI_KIND, options);    
2.2则做了封装。

二、视频的保存

保存视频需要把视频保存到媒体库中。代码:

  1. ContentValues values = new ContentValues(3);  
  2.     long current = System.currentTimeMillis();  
  3.     values.put(MediaStore.Video.Media.TITLE, "video" + f.getName());  
  4.     values.put(MediaStore.Video.Media.DATE_ADDED, (int) (current / 1000));  
  5.     values.put(MediaStore.Video.Media.MIME_TYPE, "video/3gpp");  
  6.     values.put(MediaStore.Video.Media.DATA, f.getAbsolutePath());  
  7.     ContentResolver contentResolver = getContentResolver();  
  8.     Uri base = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;  
  9.     Uri newUri = contentResolver.insert(base, values);  
  10.     sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri));  

相关内容