как воспроизводить видео с URL - PullRequest
39 голосов
/ 12 апреля 2010

Я новичок в разработке android и пытаюсь воспроизвести видео по ссылке. Но это дает ошибку "sorry,we can't play this video". Я перепробовал так много ссылок, но для всех ссылок была показана одна и та же ошибка.

Мой код следующий

public class VideoDemo extends Activity {

        private static final String path ="http://demo.digi-corp.com/S2LWebservice/Resources/SampleVideo.mp4";
 private VideoView video;
 private MediaController ctlr;
 @Override
 public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            getWindow().setFormat(PixelFormat.TRANSLUCENT);
            setContentView(R.layout.videoview);

            video = (VideoView) findViewById(R.id.video);
            video.setVideoPath(path);

            ctlr = new MediaController(this);
            ctlr.setMediaPlayer(video);
            video.setMediaController(ctlr);
            video.requestFocus();
     }
}

Logcat показывает следующее сообщение об ошибке:

04-12 15:04:54.245: ERROR/PlayerDriver(554): HandleErrorEvent: PVMFErrTimeout

Ответы [ 8 ]

47 голосов
/ 17 апреля 2010

Это как-то связано с вашей ссылкой и контентом. Попробуйте следующие две ссылки:

    String path="http://www.ted.com/talks/download/video/8584/talk/761";
    String path1="http://commonsware.com/misc/test2.3gp";

    Uri uri=Uri.parse(path1);

    VideoView video=(VideoView)findViewById(R.id.VideoView01);
    video.setVideoURI(uri);
    video.start();

Начните с «path1», это небольшой легкий поток видео, а затем попробуйте «path», это более высокое разрешение, чем «path1», идеальное высокое разрешение для мобильного телефона.

6 голосов
/ 27 августа 2014
pDialog = new ProgressDialog(this);

    // Set progressbar message
    pDialog.setMessage("Buffering...");
    pDialog.setIndeterminate(false);
    pDialog.setCancelable(false);
    // Show progressbar
    pDialog.show();

    try {
        // Start the MediaController
        MediaController mediacontroller = new MediaController(this);
        mediacontroller.setAnchorView(mVideoView);      

        Uri videoUri = Uri.parse(videoUrl);
        mVideoView.setMediaController(mediacontroller);
        mVideoView.setVideoURI(videoUri);

    } catch (Exception e) {

        e.printStackTrace();
    }

    mVideoView.requestFocus();
    mVideoView.setOnPreparedListener(new OnPreparedListener() {
        // Close the progress bar and play the video
        public void onPrepared(MediaPlayer mp) {
            pDialog.dismiss();
            mVideoView.start();
        }
    });
    mVideoView.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            if (pDialog.isShowing()) {
                pDialog.dismiss();
            }
            finish();               
        }
    });
6 голосов
/ 16 апреля 2010

Попробуйте это:

String LINK = "type_here_the_link";
setContentView(R.layout.mediaplayer);
VideoView videoView = (VideoView) findViewById(R.id.video);
MediaController mc = new MediaController(this);
mc.setAnchorView(videoView);
mc.setMediaPlayer(videoView);
Uri video = Uri.parse(LINK);
videoView.setMediaController(mc);
videoView.setVideoURI(video);
videoView.start();
5 голосов
/ 30 марта 2016

Вы можете сделать это, используя FullscreenVideoView класс. Это небольшой библиотечный проект. В него встроено диалоговое окно с видео-прогрессом:

compile 'com.github.rtoshiro.fullscreenvideoview:fullscreenvideoview:1.1.0'

ваш VideoView xml похож на это

<com.github.rtoshiro.view.video.FullscreenVideoLayout
        android:id="@+id/videoview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

В своей деятельности инициализируйте его следующим образом:

    FullscreenVideoLayout videoLayout;

videoLayout = (FullscreenVideoLayout) findViewById(R.id.videoview);
        videoLayout.setActivity(this);

        Uri videoUri = Uri.parse("YOUR_VIDEO_URL");
        try {
            videoLayout.setVideoURI(videoUri);

        } catch (IOException e) {
            e.printStackTrace();
        }

Вот и все. Удачного кодирования:)

Если хотите узнать больше, посетите здесь

Edit: Gradle путь был обновлен. скомпилируйте его сейчас

compile 'com.github.rtoshiro.fullscreenvideoview:fullscreenvideoview:1.1.2'
1 голос
/ 22 октября 2018

Попробуйте Exoplayer2

https://github.com/google/ExoPlayer

Это очень настраиваемый

    private void initializePlayer() {
         player = ExoPlayerFactory.newSimpleInstance(
             new DefaultRenderersFactory(this),
             new DefaultTrackSelector(), new DefaultLoadControl());

         playerView.setPlayer(player);

         player.setPlayWhenReady(playWhenReady);
         player.seekTo(currentWindow, playbackPosition);

Uri uri = Uri.parse(getString(R.string.media_url_mp3));
     MediaSource mediaSource = buildMediaSource(uri);
     player.prepare(mediaSource, true, false);
    }

private MediaSource buildMediaSource(Uri uri) {
  return new ExtractorMediaSource.Factory(
      new DefaultHttpDataSourceFactory("exoplayer-codelab")).
      createMediaSource(uri);
}

@Override
public void onStart() {
 super.onStart();
 if (Util.SDK_INT > 23) {
   initializePlayer();
 }
}

Проверьте этот URL для более подробной информации

https://codelabs.developers.google.com/codelabs/exoplayer-intro/#2

1 голос
/ 17 декабря 2017

Я тоже застрял с этой проблемой.Я получил правильный ответ от сервера, но не смог воспроизвести видео.После долгого времени я нашел решение здесь .Возможно, в будущем эта ссылка будет недействительной.Итак, вот мой правильный код

    Uri video = Uri.parse("Your link should be in this place "); 
    mVideoView.setVideoURI(video); 

   mVideoView.setZOrderOnTop(true); //Very important line, add it to Your code
    mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
        @Override 
        public void onPrepared(MediaPlayer mediaPlayer) {
  // here write another part of code, which provides starting the video
  }}
1 голос
/ 23 января 2016

пожалуйста, проверьте эту ссылку: http://developer.android.com/guide/appendix/media-formats.html

videoview не может поддерживать некоторые кодек .

я предложил вам использовать медиаплеер, когда вы получите «извините, не могу воспроизвести видео»

0 голосов
/ 01 июня 2016

Проверьте, поддерживает ли ваш телефон формат видео или нет. Даже у меня была проблема при воспроизведении файла 3gp, но он прекрасно воспроизводил файл mp4.

...