从服务器播放一些 mp4 文件导致我异常

Playing Some mp4 files from server cause me Exception

我想将视频文件从服务器流式传输到 VideoView 但它会导致问题

videoView=(VideoView)findViewById(R.id.myvideo);
    Uri uri=Uri.parse("http://travel.gockell.com/data/251/videos/2016-06-09_13-21-12.mp4");

    videoView.setVideoURI(uri);

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

错误

D/MediaPlayer: setDataSource IOException happend : java.io.FileNotFoundException: No content provider: http://travel.gockell.com/data/251/videos/2016-06-09_13-21-12.mp4 at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1070) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:925) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:852) at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1094) at android.widget.VideoView.openVideo(VideoView.java:372) at android.widget.VideoView.access00(VideoView.java:73) at android.widget.VideoView.surfaceCreated(VideoView.java:649) at android.view.SurfaceView.updateWindow(SurfaceView.java:599) at android.view.SurfaceView.onPreDraw(SurfaceView.java:181) at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1982) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1062) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5873) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:550) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5536) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1397) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1192) 06-13 14:57:01.734 16590-16590/videoplayer.dreamdeveloper.com.livevideoplayer D/MediaPlayer: Couldn't open file on client side, trying server side 06-13 14:57:01.764 16590-16590/videoplayer.dreamdeveloper.com.livevideoplayer V/MediaPlayer: setVideoSurfaceTexture 06-13 14:57:01.764 16590-16590/videoplayer.dreamdeveloper.com.livevideoplayer V/MediaPlayer-JNI: setAudioStreamType: 3 06-13 14:57:01.764 16590-16590/videoplayer.dreamdeveloper.com.livevideoplayer V/MediaPlayer: MediaPlayer::setAudioStreamType 06-13 14:57:01.764 16590-16590/videoplayer.dreamdeveloper.com.livevideoplayer V/MediaPlayer: setVideoSurfaceTexture 06-13 14:57:01.764 16590-16590/videoplayer.dreamdeveloper.com.livevideoplayer V/MediaPlayer: prepareAsync 06-13 14:57:01.794 16590-16610/videoplayer.dreamdeveloper.com.livevideoplayer D/MediaHTTPConnection: filterOutInternalHeaders: key=User-Agent, val= stagefright/1.2 (Linux;Android 5.0.2) 06-13 14:57:01.874 16590-16590/videoplayer.dreamdeveloper.com.livevideoplayer I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@114c03a5 time:57014665 06-13 14:57:01.944 16590-16605/videoplayer.dreamdeveloper.com.livevideoplayer I/System.out: (HTTPLog)-Static: SBServiceAPI: getService class android.os.ServiceManager 06-13 14:57:01.944 16590-16605/videoplayer.dreamdeveloper.com.livevideoplayer I/System.out: (HTTPLog)-Static: isSBSettingEnabled false 06-13 14:57:01.944 16590-16605/videoplayer.dreamdeveloper.com.livevideoplayer I/System.out: (HTTPLog)-Static: isShipBuild true 06-13 14:57:01.944 16590-16605/videoplayer.dreamdeveloper.com.livevideoplayer I/System.out: (HTTPLog)-Thread-40119-261283142: SmartBonding Enabling is false, SHIP_BUILD is true, log to file is false, DBG is false 06-13 14:57:01.944 16590-16605/videoplayer.dreamdeveloper.com.livevideoplayer I/System.out: (HTTPLog)-Static: isSBSettingEnabled false 06-13 14:57:03.314 16590-16605/videoplayer.dreamdeveloper.com.livevideoplayer V/MediaHTTPConnection: mTotalSize is -1 06-13 14:57:03.324 16590-16610/videoplayer.dreamdeveloper.com.livevideoplayer D/MediaHTTPConnection: setReadTimeOut = 30000ms 06-13 14:57:05.814 16590-18648/videoplayer.dreamdeveloper.com.livevideoplayer D/MediaHTTPConnection: setReadTimeout with 30000ms 06-13 14:57:05.814 16590-18648/videoplayer.dreamdeveloper.com.livevideoplayer I/System.out: (HTTPLog)-Static: isSBSettingEnabled false 06-13 14:57:06.494 16590-18648/videoplayer.dreamdeveloper.com.livevideoplayer V/MediaHTTPConnection: mTotalSize is -1 06-13 14:57:06.494 16590-18648/videoplayer.dreamdeveloper.com.livevideoplayer V/MediaHTTPConnection: Server doesnt support Partial Request 06-13 14:57:06.494 16590-18648/videoplayer.dreamdeveloper.com.livevideoplayer V/MediaHTTPConnection: Return -EPIPE 06-13 14:57:06.494 16590-16610/videoplayer.dreamdeveloper.com.livevideoplayer V/MediaPlayer: message received msg=100, ext1=1, ext2=-2147483648 06-13 14:57:06.494 16590-16610/videoplayer.dreamdeveloper.com.livevideoplayer E/MediaPlayer: error (1, -2147483648) 06-13 14:57:06.494 16590-16610/videoplayer.dreamdeveloper.com.livevideoplayer V/MediaPlayer: callback application 06-13 14:57:06.494 16590-16610/videoplayer.dreamdeveloper.com.livevideoplayer V/MediaPlayer: back from callback 06-13 14:57:06.504 16590-16590/videoplayer.dreamdeveloper.com.livevideoplayer E/MediaPlayer: Error (1,-2147483648) 06-13 14:57:06.504 16590-16590/videoplayer.dreamdeveloper.com.livevideoplayer D/VideoView: Error: 1,-2147483648

请试试这个:

String VideoURL = "http://travel.gockell.com/data/251/videos/2016-06-09_13-21-12.mp4";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.videoview_main);

videoview = (VideoView) findViewById(R.id.VideoView);

try {
    // Start the MediaController
    MediaController mediacontroller = new MediaController(
                VideoViewActivity.this);
    mediacontroller.setAnchorView(videoview);
    // Get the URL from String VideoURL
    Uri video = Uri.parse(VideoURL);
    videoview.setMediaController(mediacontroller);
    videoview.setVideoURI(video);

} catch (Exception e) {
    Log.e("Error", e.getMessage());
    e.printStackTrace();
}

videoview.requestFocus();
videoview.setOnPreparedListener(new OnPreparedListener() {
    // Close the progress bar and play the video
    public void onPrepared(MediaPlayer mp) {

            videoview.start();
    }
});

}

这个对我有用

videoview = (VideoView) findViewById(R.id.VideoView);
try {
    // Start the MediaController
    final MediaController mediacontroller = new MediaController(
            BioskopFilmDetail.this);
    mediacontroller.setAnchorView(videoview);
    // Get the URL from String VideoURL
    Uri video = Uri.parse(URLVIDEO );
    videoview.setMediaController(new MediaController(this){
        public boolean dispatchKeyEvent(KeyEvent event)
        {
            if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP)
                ((Activity) getContext()).finish();                 
            return super.dispatchKeyEvent(event);
        }
    });
    videoview.setVideoURI(video);
} catch (Exception e) {
    Log.e("Error", e.getMessage());
    e.printStackTrace();
}
videoview.requestFocus();
videoview.setOnPreparedListener(new OnPreparedListener() {
    // Close the progress bar and play the video
    public void onPrepared(MediaPlayer mp) {                
        videoview.start();
        //showInterstitialAd();
    }
});

别忘了在清单中添加 <uses-permission android:name="android.permission.INTERNET"/>

感谢大家的帮助,所有代码都很好,代码中没有问题,但问题出在模拟器中,有时播放,有时不播放。在真实设备上工作。