一,做視頻上傳首先第一步要從相冊里選取視頻,這一步。我的上篇博客中已經講過了。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 66 && resultCode == RESULT_OK && null != data) {
Uri selectedVideo = data.getData();
String[] filePathColumn = {MediaStore.Video.Media.DATA};
Cursor cursor = getContentResolver().query(selectedVideo,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String videopath = cursor.getString(columnIndex);
cursor.close();
submit_vd_ad.setText(VIDEOPATH);
}
if (resultCode != Activity.RESULT_OK) {
return;
}
}
看這里的代碼videopath ,就是選擇好視頻后的地址了。
二,得到了視頻的地址,我們一般就要對視頻進行壓縮了,也就是我們今天的重點。
視頻壓縮,網上的例子和demo五花八門,比比皆是。但是你下載下來,一運行總是存在這樣那樣的問題,無法滿足自己的需求。可能你差一步就成功了,但是最終你還是有不明白的地方放棄了。
今天android君,就給大家推薦一個非常好用的視頻壓縮工具,並且是踩完坑的介紹。呵呵
這里先附上庫的github鏈接地址:https://github.com/Tourenathan-G5organisation/SiliCompressor。
自己親自試了一下,壓縮的速度還挺快的,而且壓縮完視頻清晰度也是不錯的,極力推薦使用,最主要的是使用也很方便就是一句代碼的事,並附帶加上注意事項(非常重要)
new Thread() {
@Override
public void run() {
super.run();
try {
/**
* 視頻壓縮
* 第一個參數:視頻源文件路徑
* 第二個參數:壓縮后視頻保存的路徑
*/
String comPressPath = SiliCompressor.with(getActivity()).compressVideo(filePath, dirPath);
// if (!StringUtil.isEmpty(comPressPath)) {
// notCompressedVideo.setCompressPath(comPressPath);
// compressVideo();
// } else {
// stopCompress("失敗");
// }
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}.start();
這里有兩個問題需要注意:1,就是要放到子線程執行。
2,(重要):都看到只需要執行一行代碼,但是里面的參數你弄懂了嗎。第一個參數一目了然不需多講,就是我們返回的文件地址。
第二個參數是壓縮后保存的路徑,注意這個地址一定要是你目錄中存在的,這個地址你如果寫不對基本你就會一直搞不對。例如你的地址是storage/0,那么返回的comPressPath就是storage/0/xxx;
你如果真沒弄對弄懂。就這樣寫肯定沒錯。
String path= SiliCompressor.with(activity).compressVideo(videopath ,Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath());
好了,講到這里就可以上傳了。你們可以參考我的demo;
demo中用了原生HttpURLConnection提交文件上傳(用的這種)和okttp兩種方式(我注釋掉了,可以直接打開);
有問題歡迎留言,稍后奉上demo下載地址和項目截圖;