简体   繁体   English

Android:如何播放资产中的视频?

[英]Android: how to play video from assets?

I am making an application in which I have to show video from assets folder in a Fragment .我正在制作一个应用程序,我必须在其中显示Fragment资产文件夹中的视频。 Can anyone help me do this?谁能帮我做这个? Do I need to use VideoView in XML? XML需要用VideoView吗?

Instead of accessing from assests,You must copy the video into your project's res/raw folder.您必须将视频复制到项目的 res/raw 文件夹中,而不是从资产中访问。 Create raw folder under res folder.在 res 文件夹下创建 raw 文件夹。 It must be in a supported format (3gp, wmv, mp4 ) and named with lower case, numerics, underscores and dots in its filename likewise:video_file.mp4.它必须是受支持的格式(3gp、wmv、mp4),并且在其文件名中以小写、数字、下划线和点命名,例如:video_file.mp4。

VideoView view = (VideoView)findViewById(R.id.videoView);
String path = "android.resource://" + getPackageName() + "/" + R.raw.video_file;
view.setVideoURI(Uri.parse(path));
view.start();
VideoView view = (VideoView)findViewById(R.id.videoView);
String path = "android.resource://" + getPackageName() + "/" + R.raw.video_file;
view.setVideoURI(Uri.parse(path));
view.start();

It's AkashG's code, but I remember that R here is not from the Android class.是AkashG的代码,不过我记得这里的R不是Android类的。 It's from your own project.它来自您自己的项目。

You first need to convert your video into the InputStream and then save it to the user's internal storage, then display it and delete that file when the video is finished.您首先需要将您的视频转换为InputStream ,然后将其保存到用户的内部存储中,然后显示它并在视频完成后删除该文件。

try{
     String path = Environment.getExternalStorageDirectory()+"/"+APP_NAME()+"/videos/"+ls+"/" ;
     InputStream input = getAssets().open("vid/dal.mp4");
     String name = System.currentTimeMillis() +".mp4";
     File f = new File(path);
     f.mkdirs();
     int size = input.available();

     FileOutputStream output = new FileOutputStream(new File(path+name));
     byte data[] = new byte[4096];
     long total = 0;
     int count;
     while ((count = input.read(data)) != -1) {
          output.write(data, 0, count);
          total += count;
          if (size <= total) {
              break;
          }
     }
     output.flush();
     output.close();
     input.close();

     //Toast.makeText(VideoPlayer.this , "file created !" , Toast.LENGTH_LONG).show();

     Uri uri = Uri.parse(path+name) ;

     videoView.setVideoURI(uri);

     videoview.start();

}cath(Exception e){
}

I have already suffered from same problem, u should prefer project's res/raw folder instead of assets.我已经遇到了同样的问题,你应该更喜欢项目的 res/raw 文件夹而不是资产。 Create raw folder under res folder.在 res 文件夹下创建 raw 文件夹。 Save video file in a supported format (3gp, wmv, mp4 ) and named with lowercase, numerics, underscores and dots in its filename likewise:filename.3gp into the raw folder.以支持的格式(3gp、wmv、mp4)保存视频文件,并在其文件名中使用小写、数字、下划线和点命名likewise:filename.3gp到 raw 文件夹中。

VideoView videoview = (VideoView) findViewById(R.id.VideoView);

String uriPath = "android.resource://your application package name/raw/your 
wmv/mp4/3gp file in res/raw path without extension";

videoview.setVideoURI(Uri.parse(uriPath));

videoview.start();

you can use the MediaItem to play a video from assets您可以使用 MediaItem 播放资产中的视频

    val playerView = view.findViewById<StyledPlayerView>(R.id.player)

    val player = ExoPlayer.Builder(context!!).build()
    
    val videoUri = Uri.parse("asset:///test.mp4")
    val item = MediaItem.fromUri(videoUri)

    player.addMediaItem(item)
    playerView.player = player

    player.prepare()

Playing Video(sample.mp4) present in res/ raw folder, along with the Media Controller播放 res/raw 文件夹中的视频 (sample.mp4) 以及媒体控制器

// Import Statements // 导入语句

import android.widget.VideoView;
import android.widget.MediaController;

public class youractiviy extends Activity {

private VideoView videoView;
private MediaController mediaController;

protected void onCreate(Bundle savedInstanceState) {
 // Your Startup code
 videoView = (VideoView) findViewById(R.id.video_view);
 videoView.setVideoPath("android.resource://" + getPackageName() + "/" + R.raw.sample); 
 mediaController = new MediaController(TestActivity.this);
 mediaController.setAnchorView(videoView);
 videoView.setMediaController(mediaController);
 videoView.start();

}
}

// XML Code // XML 代码

<VideoView
        android:id="@+id/video_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM