无法播放该视频。Android VideoView 播放由 Android 设备录制的 MP4 视频。

23

enter image description here

我已经查找了其他格式的现有潜在解决方案,但仍然出现了上述错误。

最后,我使用相同的设备录制了视频,并将其用作此应用程序的资源,但它仍然无法正常工作。

设备:SGS2,联想a820

视频类型:MPEG-4 video (video/mp4)

    videoView = (VideoView)findViewById(R.id.videoView);
    videoView.setVideoPath("android.resource://raw/sample.mp4");
    videoView.start();

请查看线程以获取解释。 - intrepidkarthi
这个答案对我有用:https://stackoverflow.com/questions/59882785/cant-play-this-video-error-using-url-with-videoview-and-mediacontroller#:~:text=Add%20a%20comment-,1,Hope%20this%20will%20help.,-Share - Hila Grossbard
9个回答

19
请参考下面的代码片段...问题出在路径声明上..
 String uriPath = "android.resource://"+getPackageName()+"/"+R.raw.aha_hands_only_cpr_english;
        Uri uri = Uri.parse(uriPath);
        mVideoView.setVideoURI(uri);

就是这样了...


在此之后添加mVideoView.start(); - Piyush Kumar

12

我尝试了之前提到的一切方法,但结果显示播放mp4文件需要网络权限。

<uses-permission android:name="android.permission.INTERNET" />

1
public class videoplayer extends Activity {
    private static final String Videos_URL = "*your URI*";

    private VideoView myVideoView;
    private int position = 0;
    private ProgressDialog progressDialog;
    private MediaController mediaControls;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Get the layout from video_main.xml
        setContentView(R.layout.activity_main);

        if (mediaControls == null) {
            mediaControls = new MediaController(this);
        }

        // Find your VideoView in your video_main.xml layout
        myVideoView = (VideoView) findViewById(R.id.videoView);

        // Create a progressbar
        progressDialog = new ProgressDialog(this);
        // Set progressbar title
        progressDialog.setTitle("ABCDEFGH");
        // Set progressbar message
        progressDialog.setMessage("Loading...");

        progressDialog.setCancelable(false);
        // Show progressbar
        progressDialog.show();

        try {
            Uri video = Uri.parse(Videos_URL);
            myVideoView.setVideoURI(video);
            myVideoView.setMediaController(mediaControls);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }

        myVideoView.requestFocus();
        myVideoView.setOnPreparedListener(new OnPreparedListener() {
            // Close the progress bar and play the video
            public void onPrepared(MediaPlayer mp) {
                progressDialog.dismiss();
                myVideoView.seekTo(position);
                if (position == 0) {
                    myVideoView.start();
                } else {
                    myVideoView.pause();
                }
            }
        });

    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putInt("Position", myVideoView.getCurrentPosition());
        myVideoView.pause();
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        position = savedInstanceState.getInt("Position");
        myVideoView.seekTo(position);
    }
}

谢谢Andrii。实际上我已经快要上课迟到了。 :-) - Arjun Singh

1

尝试以下代码...

videoView = (VideoView)this.findViewById(R.id.videoView);
String path = "android.resource://" + getPackageName() + "/" + R.raw.video_file;
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
videoView.start();

1
请确保解码器(目标SDK)支持您使用的视频格式。您可以使用VLC播放器将视频格式转换为所需格式。在我的情况下,我将MP4转换为WebM文件并在VideoView中加载它。
以下是获取文件路径并播放视频的方法。
String path = "android.resource://" + getPackageName() + "/" + R.raw.sample;
VideoView videoView = (VideoView)findViewById(R.id.videoView);
videoView.setVideoURI(Uri.parse(path));
videoView.start()

来源: 视频格式和编解码器支持 https://developer.android.com/guide/topics/media/media-formats.html


0

对于联想a820手机,以下是所需内容:

- MP4/WMV/H.264/H.263 player
- MP3/WAV/WMA/eAAC+ player

请确保您的视频符合以上编解码器格式。


0

我认为问题出在我们尝试播放视频的设备上,有时它不支持。 我尝试在Linux模拟器上运行它。


0

只需将您的代码替换为此代码,它就可以正常工作:

VideoView videoView = findViewById(R.id.videoView);
        videoView.setVideoPath("android.resource://" + getPackageName() + "/" + R.raw.sample);
        videoView.start();

虽然这可能回答了问题,但你应该[编辑]你的答案,包括解释如何这个代码块回答了问题。这使得你的答案对那些以后遇到相同问题的人更有用。 - Hoppeduppeanut

-1
尝试以下代码,它可以正常工作..........
VideoView videoView=(VideoView)findViewById(R.id.videoView);
videoView.setVideoPath("android.resource://"+getPackageName()+"/"+R.raw.videoname;
videoView.start();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接