Я захватил видео с помощью моей пользовательского видео активности и кодируемого его в base64, используя этот методсохранить массив байт как .mp4 файл и воспроизвести его в VideoView андроида
private String encodeVideoTobase64(Uri uri , int index)
{
String videodata = "";
String[] filePathColumn = { MediaStore.Video.Media.DATA };
Cursor cursor = this.getContentResolver().query(uri,filePathColumn, null, null, null);
String videoPath;
try{
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
videoPath = cursor.getString(columnIndex);
}
catch(Exception e)
{
videoPath = PathsOfVideos.get(index);
}
try {
@SuppressWarnings("resource")
FileInputStream v_input = new FileInputStream(videoPath);
ByteArrayOutputStream objByteArrayOS = new ByteArrayOutputStream();
byte[] byteBufferString = new byte[1024];
for (int readNum; (readNum = v_input.read(byteBufferString)) != -1;)
{
objByteArrayOS.write(byteBufferString, 0, readNum);
System.out.println("read " + readNum + " bytes,");
}
videodata = MyBase64.encodeBytes(byteBufferString);//Base64.encodeToString(objByteArrayOS.toByteArray(), Base64.DEFAULT);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return videodata;
}
Затем я послал закодированное видео на сервер ,
Теперь я хочу получить строку base64 видео, декодировать его и отобразить на видео. Я попытался преобразовать строку base64 в массив байтов, а затем сохранить его на мобильном телефоне, а затем отобразить его в виде видео с помощью этого кода.
protected void showInstVideo(int pos) {
// TODO Auto-generated method stub
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_video);
//Decode String To Video With mig Base64.
String encodedString = r.getRecipeInstructions().get(pos).getVideoStr();
if (encodedString.compareTo("")!=0) {
byte[] decodedBytes = MiGBase64.decodeFast(encodedString.getBytes());
try {
Date date=new Date();
String filename="/rec"+ date.toString().replace(" ", "_").replace(":", "_")+".mp4";
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root+"/MyAppName");
if (!myDir.exists())
myDir.mkdir();
File file = new File (myDir, filename);
FileOutputStream out = new FileOutputStream(file);
out.write(decodedBytes);
out.close();
VideoView instvideo = (VideoView) dialog.findViewById(R.id.vvdetails);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(instvideo);
Uri video = Uri.parse(file.getPath());
instvideo.setVideoURI(video);
if (video != null)
{
dialog.show();
instvideo.start();
}
} catch (Exception e) {
// TODO: handle exception
Log.e("Error", e.toString());
}
}
}
Но папка/MyAppName не создается так видео не сохраняется, и, конечно, в результате я не могу воспроизвести видео.
Не могли бы вы помочь мне найти то, что мне не хватает? Заранее спасибо
Примечание: код работает правильно и не улавливает любое исключение
добавляемые Вы <использует-разрешение андроида: имя = "android.permission.WRITE_EXTERNAL_STORAGE" /> разрешение –
Да это разрешение существует. Но там что-то странное, я обнаружил, что ВСЕ созданные папки появляются внезапно. Я не знаю. В чем причина того, что они не появлялись мгновенно. У вас есть идея? –
Да. Операции с файлами занимают некоторое время. Вам нужно использовать AsynchTask. Для этого .. И проверьте, что onPostExecute завершено. –