2014-02-18 178 views
5

我想播放视频,但没有运气,所以我正在测试一些裸露的骨骼代码,看看问题是什么。以下不工作,我真的不知道为什么:Android:如何从URL播放mp4视频?

清单:

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

您尝试另一个URI的MP4视频的开始。 –

+0

您确定该视频存在吗? – VinayVeluri

+0

http://s1133.photobucket.com/albums/m590/Anniebabycupcakez/?action=view & current = 1376992942447_242.mp4 –

回答

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

我尝试请求重点。没有区别。 – spacitron

+0

该示例在模拟器上不起作用。你应该使用真正的手机 – Rollyng

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

我想您所呼叫vid.start()之前VideoView处于正确状态,请尝试以下操作:

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

或者从网址视频只是通过您的网址进入Uri.parse()方法