23

请帮忙,如何在离线模式下从原始文件夹播放 android 设备中的视频?

成功示例1:我可以使用以下代码从 SD 卡播放视频。

 Intent intent = new Intent(Intent.ACTION_VIEW);
 String type = "video/mp4";
 Uri uri = Uri.parse("file:///sdcard/test.mp4");
 intent.setDataAndType(uri, type);
 startActivity(intent); 

失败的例子2:问题:我可以把 test.mp4 放到 res/raw 文件夹吗?

 Intent intent = new Intent(Intent.ACTION_VIEW);
 String type = "video/mp4";
 Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.taipei);
 intent.setDataAndType(uri, type);
 startActivity(intent); 

有没有人可以帮助我?请。

4

8 回答 8

54

将视频复制到项目的 res/raw 文件夹中。在 res 文件夹下创建 raw 文件夹。它必须采用受支持的格式(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();

在您的 xml 文件中创建 videoView。

于 2013-03-28T07:02:38.903 回答
10
// To get files from any resource folder (eg: raw, drawable, etc.)
// Use the resource id
int rawId = getResources().getIdentifier(file_name_without_extension,  "raw", getPackageName());

// URI formation
String path = "android.resource://" + getPackageName() + "/" + rawId;

// Set the URI to play video file
videoView.setVideoURI(Uri.parse(path));
于 2014-07-23T11:59:58.683 回答
4

检查此解决方案如何从资产文件夹或原始文件夹在 android 中播放视频?

VideoView videoHolder = new VideoView(this);
//if you want the controls to appear
videoHolder.setMediaController(new MediaController(this));
Uri video = Uri.parse("android.resource://" + getPackageName() + "/" 
+ R.raw.your_raw_file); //do not add any extension
//if your file is named sherif.mp4 and placed in /raw
//use R.raw.sherif
于 2013-03-28T07:01:21.363 回答
2

在我的代码中“applicationdemo”是我的视频文件的名称。

    String video_url = "android.resource://" + context.getPackageName() + "/" + R.raw.applicationdemo;
    final VideoView videoView = findViewById(R.id.dialog_video);
    Uri videoUri = Uri.parse(video_url);
    MediaController mediaController= new MediaController(context);
    mediaController.setAnchorView(videoView);
    videoView.setMediaController(mediaController);
    videoView.setVideoURI(videoUri);
    videoView.requestFocus();
    videoView.start();
于 2019-03-12T08:53:24.573 回答
1

我想,每个人都给出了答案,但没有解释场景。这里的主要问题是,如果我没记错的话,Android 假定来自您的 SD 卡的视频是动态的,在这种情况下,可能不支持或不支持该格式,因此它启用/要求您选择或打开对于其他第三方媒体软件。

虽然您在 RAW 文件夹下播放的任何内容都需要一个处理程序,例如 videoview 或内置媒体播放器,这会得出结论,您放入 RAW 文件夹中的任何内容都应该由 Android 操作系统支持/读取。

但是,这里的线程启动器希望使用第三方媒体播放器播放他的 RAW 文件。

于 2015-09-25T14:36:39.050 回答
0

I struggled with this for dynamic video names. The solution that worked for me was:

//Somewhere set the video name variable
String video+name="myvideo";
//setup up and play video

VideoView videoView=(VideoView)findViewById(R.id.video);
videoView.setVisibility(View.VISIBLE);
String uriPath = "android.resource://"+getPackageName()+"/raw/"+ video_name;
Uri UrlPath=Uri.parse(uriPath);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
videoView.setVideoURI(UrlPath);

videoView.setOnPreparedListener(new OnPreparedListener() {
        public void onPrepared(MediaPlayer mediaPlayer) {
            if (position == 0) {
                try{
                    videoView.requestFocus(); 
                    videoView.start();
                }catch (Exception e){
                    System.out.printf("Error playing video %s\n", e);
                }
            }else{
                videoView.pause();
            }

        }
});

And in XML

<VideoView android:layout_width="300dp"
    android:id="@+id/video"
    android:layout_height="300dp"
    android:orientation="horizontal"
    android:layout_gravity="center" 
    android:keepScreenOn="true"
    />
于 2015-03-10T11:33:13.900 回答
0
   player = ExoPlayerFactory.newSimpleInstance(requireActivity(), new DefaultTrackSelector(), new DefaultLoadControl());
   Uri uri = RawResourceDataSource.buildRawResourceUri(getOfflineVideo(offlinePosition));

   MediaSource mediaSource = new ExtractorMediaSource(uri, new DefaultDataSourceFactory(requireActivity(),
                "MyExoplayer"), new DefaultExtractorsFactory(), null, null);

   //setup  player with mediaSource
于 2021-07-04T07:13:20.040 回答
0

该解决方案将完全帮助您实现您想要的。

VideoView myVideo;
private MediaController media_control;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    myVideo = (VideoView) findViewById(R.id.playVideo);

    Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.bootanimation_nexus);

    media_control = new MediaController(this);

    myVideo.setMediaController(media_control);

    myVideo.setVideoURI(uri);

    myVideo.start();

}
于 2016-10-19T05:09:51.957 回答