您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
安卓视频时长获取及java中java.lang.String强轉int的實現
发布时间:2021-06-25 22:50:34编辑:雪饮阅读()
視頻時長的獲取,在安卓中一般如果通過SurfaceView的getHolder添加回調來獲取的。
但是今天這裏要實現的是不依賴與界面SurfaceView(當然感覺通過SurfaceView也可以不讓界面顯示出來同時能獲取到視頻時長,不過沒有實踐過,不是今天的重點,暫且不做分析)來直接實現視頻時長獲取。
那麽視頻的時長獲取,可以是這樣
private String getPlayTime(String mUri)
{
String duration=null;
android.media.MediaMetadataRetriever mmr = new android.media.MediaMetadataRetriever();
try {
if (mUri != null)
{
HashMap<String, String> headers = null;
if (headers == null)
{
headers = new HashMap<String, String>();
headers.put("User-Agent", "Mozilla/5.0 (Linux; U; Android 4.4.2; zh-CN; MW-KW-001 Build/JRO03C) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/1.0.0.001 U4/0.8.0 Mobile Safari/533.1");
}
Log.i("mUri路径",mUri);
//mmr.setDataSource(mUri, headers);
//setDataSource(Context context,Uri uri);
mmr.setDataSource(mUri);
} else
{
//mmr.setDataSource(mFD, mOffset, mLength);
}
duration = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_DURATION);//时长(毫秒)
String width = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);//宽
String height = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);//高
Log.i("代码获取的视频时长",duration);
//Toast.makeText(MainActivity.this, "playtime:"+ duration+"w="+width+"h="+height, Toast.LENGTH_SHORT).show();
} catch (Exception ex)
{
Log.e("TAG", "MediaMetadataRetriever exception " + ex);
} finally {
mmr.release();
}
return duration;
}
{
String duration=null;
android.media.MediaMetadataRetriever mmr = new android.media.MediaMetadataRetriever();
try {
if (mUri != null)
{
HashMap<String, String> headers = null;
if (headers == null)
{
headers = new HashMap<String, String>();
headers.put("User-Agent", "Mozilla/5.0 (Linux; U; Android 4.4.2; zh-CN; MW-KW-001 Build/JRO03C) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/1.0.0.001 U4/0.8.0 Mobile Safari/533.1");
}
Log.i("mUri路径",mUri);
//mmr.setDataSource(mUri, headers);
//setDataSource(Context context,Uri uri);
mmr.setDataSource(mUri);
} else
{
//mmr.setDataSource(mFD, mOffset, mLength);
}
duration = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_DURATION);//时长(毫秒)
String width = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);//宽
String height = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);//高
Log.i("代码获取的视频时长",duration);
//Toast.makeText(MainActivity.this, "playtime:"+ duration+"w="+width+"h="+height, Toast.LENGTH_SHORT).show();
} catch (Exception ex)
{
Log.e("TAG", "MediaMetadataRetriever exception " + ex);
} finally {
mmr.release();
}
return duration;
}
這裏的headers感覺是多餘的,因爲這個方法是百度查資料拿到的,但是實際上,這裏原來它是這樣寫的
mmr.setDataSource(mUri, headers);
這一句雖然也沒有錯誤,但是在目前我設備運行就錯誤了,據説這個好像是安卓7之後有調整。
所以我修改為
mmr.setDataSource(mUri);
另外
mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_DURATION)
這裏對於extractMetadata方法的調用獲取來的時長是string類型的,但是你嘗試强制轉換為int卻是不能,這裏提示java.lang.string不能直接轉換為int,
那麽我們只能用int的始祖integer來强制解析為int了。
int duration=Integer.parseInt(getPlayTime(vi.getAbsolutePath()));
我們這裏將上面這個方法就按它的意思以string返回,那麽對於調用這個getPlayTime方法処只需要用Integer.parseInt强制解析為int即可。相當於integer向下轉型了。
关键字词:安卓,視頻時長獲取,java中java.lang.String