安卓:如何从URL播放MP4视频?

6

我正在尝试播放视频,但是一直没有成功,因此我正在使用一些基本的代码进行测试,以查看问题所在。以下代码不起作用,而我并不确定原因:

清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.videotest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    <uses-permission
    android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.videotest.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

主活动:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        VideoView vid = (VideoView) findViewById(R.id.videoView1);
        Uri vidUri = Uri.parse("http://somewebsite.com/somevideo.mp4");
        vid.setVideoURI(vidUri);
        vid.setMediaController(new MediaController(this));        
        vid.start();
     }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

activity_main:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <VideoView
        android:id="@+id/videoView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true" />
</RelativeLayout>

运行代码时出现了以下错误:

02-18 10:12:44.071: E/MediaPlayer(8357): java.io.FileNotFoundException: No content provider: http://somewebsite.com/somevideo.mp4

请尝试使用另一个URI来启动mp4视频。 - Jigar Shekh
你确定这个视频存在吗? - Vinay Veluri
http://s1133.photobucket.com/albums/m590/Anniebabycupcakez/?action=view& current=1376992942447_242.mp4 - Jigar Shekh
5个回答

13

示例代码:

@Override
protected void onCreate(Bundle savedInstanceState)
     // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    try {
        setContentView(R.layout.videodisplay);
        String link="http://s1133.photobucket.com/albums/m590/Anniebabycupcakez/?action=view&amp; current=1376992942447_242.mp4";
        VideoView videoView = (VideoView) findViewById(R.id.VideoView);
        MediaController mediaController = new MediaController(this);
        mediaController.setAnchorView(videoView);
        Uri video = Uri.parse(link);
        videoView.setMediaController(mediaController);
        videoView.setVideoURI(video);
        videoView.start();
    } catch (Exception e) {
        // TODO: handle exception
        Toast.makeText(this, "Error connecting", Toast.LENGTH_SHORT).show();
    }
}

5

将您的代码放入try{}catch(Exception e){}块中。 - Jigar Shekh

4
我认为你是在VideoView处于正确状态之前调用了vid.start(),请尝试以下操作:
vid.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            vid.start();
        }
    });
vid.setVideoURI(videoUri);

你还可以使用setOnErrorListener()注册监听器,以获取更多有关失败原因的信息。

0
@Override
public void surfaceCreated(SurfaceHolder holder) {

    Uri video = Uri.parse("android.resource://" + getPackageName() + "/"
            + R.raw.abc);
    try {
        mp.setDataSource(this, video);
        mp.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    }

    mp.setDisplay(holder);
    mp.start();

或者从 URL 获取视频,只需将您的 URL 传递到 Uri.parse() 方法中即可。


0
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);

    webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl(""http://somewebsite.com/somevideo.mp4"");

}

如果使用VideoView,请不要忘记请求焦点

VideoView myVideoView = (VideoView)findViewById(R.id.myvideoview);
myVideoView.setVideoURI(Uri.parse("http://somewebsite.com/somevideo.mp4"));
myVideoView.setMediaController(new MediaController(this));
myVideoView.requestFocus();
myVideoView.start();

我尝试了request focus,但没有任何改变。 - spacitron
这个例子在模拟器上无法运行。你应该使用真实的手机。 - Rollyng

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