Android:如何从URL播放mp4视频?

时间:2014-02-18 09:39:47

标签: java android xml video

我正在尝试播放视频,但没有运气,所以我正在测试一些简单的代码来查看问题所在。以下不起作用,我不确定原因:

清单:

<?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>

MainActivity:

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

5 个答案:

答案 0 :(得分:12)

示例代码:

@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();
    }
}

答案 1 :(得分:3)

你的Uri不是真的。试试这个Uri。请检查此链接http://androidcodeexamples.blogspot.in/2011/08/how-to-play-mp4-video-in-android-using.html

Uri vidUri = Uri.parse("http://s1133.photobucket.com/user/Anniebabycupcakez/media/1489553974996_37622.mp4.html");

答案 2 :(得分:3)

我认为你在VideoView处于正确状态之前调用vid.start(),试试这个:

vid.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            vid.start();
        }
    });
vid.setVideoURI(videoUri);

您还可以使用setOnErrorListener()注册一个监听器,该监听器可能会为您提供有关其失败原因的更多信息。

答案 3 :(得分: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不要忘记requestfocus

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();

答案 4 :(得分: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();

或从网址获取视频只需将您的网址传递给Uri.parse()方法