我正在使用此代码将视频文件写入android中的Mediastore。当我尝试通过模拟器播放视频或在文件浏览器中签入视频时,视频大小仅为12B。 (我正在android 10中尝试此应用)
而且它没有播放。
在模拟器中,它的谚语无法播放视频。当我单击视频时,在文件中。仅出现黑屏。
但是当我将字节保存在专用数据存储区中时,我可以在模拟器中播放该文件。请帮助。
@Override
protected void onPostExecute(byte[] video){
ContentResolver resolver = getApplicationContext().getContentResolver();
Uri videocollection = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
System.out.println("Resolver --");
System.out.println(resolver);
System.out.println(videocollection);
ContentValues videodetails = new ContentValues();
videodetails.put(MediaStore.Video.Media.DISPLAY_NAME,"Earth_8.mp4");
videodetails.put(MediaStore.Video.Media.MIME_TYPE,"video/mp4");
videodetails.put(MediaStore.Video.Media.RELATIVE_PATH, "Movies/GrailVideos");
videodetails.put(MediaStore.Video.Media.IS_PENDING , 1 );
System.out.println("done till here ");
// videodetails.put(MediaStore.Video.Media.DATA , video);
// MediaStore.Video.Media.EXTERNAL_CONTENT_URI
Uri myvideo = resolver.insert( videocollection , videodetails);
System.out.println("Done......"+ myvideo );
try {
final ParcelFileDescriptor pdf = resolver.openFileDescriptor(myvideo, "w" );
FileDescriptor fd = pdf.getFileDescriptor();
byte[] temp = video;
// FileInputStream input = new FileInputStream(fd);
FileOutputStream output = new FileOutputStream(fd);
output.write(temp);
output.close();
pdf.close();
System.out.println("*&&% DOne .. ");
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("error 1");
} catch (IOException e) {
e.printStackTrace();
System.out.println("error 2");
}
videodetails.put(MediaStore.Video.Media.IS_PENDING , 0 );
resolver.update(myvideo, videodetails , null, null);
final VideoView myvideoview = (VideoView) findViewById(R.id.videoView);
myvideoview.setVideoURI(myvideo);
// myvideoview.setVideoPath(getApplicationInfo().dataDir +"/temp_video.mp4");
myvideoview.start();
}
您可以尝试写字节:
stream = resolver.openOutputStream(myvideo);
try {
int bytesRead;
inputStream = new ByteArrayInputStream(video);
while ((bytesRead = inputStream.read(video)) > 0) {
stream.write(video, 0, bytesRead);
}
inputStream.close();
stream.flush();
stream.close();
} catch (IOException e) {
closeSession(resolver, uriResolve, e);
e.printStackTrace();
}