2015-10-24 6 views
1

Я использую TextureView для воспроизведения видео с моего сервера App Engine. Я могу воспроизвести видео, если я открою ссылку в браузере. Но MediaPlay следующих ошибки не найден файл, а затем не будучи собираемся играть видеоMediaPlayer не может воспроизводить видео с url

I/MediaPlayer: Need to enable context aware info 
E/MediaPlayer-JNI: QCMediaPlayer mediaplayer NOT present 
D/MediaPlayer: setDataSource IOException happend : 
D/MediaPlayer: java.io.FileNotFoundException: No content provider: https://companycloud.appspot.com/watchvideo/?videoid=1234567771234567 
D/MediaPlayer:  at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1074) 
D/MediaPlayer:  at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:927) 
D/MediaPlayer:  at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:854) 
D/MediaPlayer:  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1085) 
D/MediaPlayer:  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1059) 
D/MediaPlayer:  at com.company.app.android.fragment.VideoFragment.playNewVideo(VideoFragment.java:411) 
D/MediaPlayer:  at com.company.app.android.fragment.VideoFragment.access$400(VideoFragment.java:63) 
D/MediaPlayer:  at com.company.app.android.fragment.VideoFragment$1.onReceive(VideoFragment.java:120) 
D/MediaPlayer:  at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297) 
D/MediaPlayer:  at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46) 
D/MediaPlayer:  at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116) 
D/MediaPlayer:  at android.os.Handler.dispatchMessage(Handler.java:102) 
D/MediaPlayer:  at android.os.Looper.loop(Looper.java:145) 
D/MediaPlayer:  at android.app.ActivityThread.main(ActivityThread.java:5837) 
D/MediaPlayer:  at java.lang.reflect.Method.invoke(Native Method) 
D/MediaPlayer:  at java.lang.reflect.Method.invoke(Method.java:372) 
D/MediaPlayer:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388) 
D/MediaPlayer:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) 
D/MediaPlayer: Couldn't open file on client side, trying server side 
10-24 12:25:26.665 6742-7036/com.company.app.android E/MediaPlayer: error (1, -2147483648) 
10-24 12:25:26.685 6742-6742/com.company.app.android E/MediaPlayer: Error (1,-2147483648) 
+0

Почему бы не использовать VideoView? –

+0

У меня возникало много проблем с видеовидео, поэтому я переключился. Но, конечно, это не решение проблемы. Знаете ли вы, что TextureView не может работать? – learner

ответ

0

Ну, я не могу комментировать и с тех пор нет никакого шифра посмотреть, вот несколько советов:

1) Решение работает для Android версии 4.0 или выше.

Инициализировать объект MedialPlayer внутри метода onSurfaceTextureAvailable() и поместить его в блок try/catch.

Parse Uri. Поскольку объект Ari обычно используется для передачи ссылки на ContentProvider.

@Override 
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i2) { 
    Surface surface = new Surface(surfaceTexture); 

    try { 
     mMediaPlayer= new MediaPlayer(); 
     // parse the URL path 
     mMediaPlayer.setDataSource(getApplicationContext(), Uri.parse(URL_PATH)); 
     mMediaPlayer.setSurface(surface); 
     mMediaPlayer.setLooping(true); 

     mMediaPlayer.prepareAsync(); 


     mMediaPlayer.setOnBufferingUpdateListener(this); 
     mMediaPlayer.setOnCompletionListener(this); 
     mMediaPlayer.setOnVideoSizeChangedListener(this); 
     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

     // Play video when the media source is ready for playback. 
     mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mediaPlayer) { 
       mediaPlayer.start(); 
      } 
     }); 

    } catch (IllegalArgumentException e) { 
     Log.d(TAG, e.getMessage()); 
    } catch (SecurityException e) { 
     Log.d(TAG, e.getMessage()); 
    } catch (IllegalStateException e) { 
     Log.d(TAG, e.getMessage()); 
    } catch (IOException e) { 
     Log.d(TAG, e.getMessage()); 
    } 
} 

Также для потоков предпочитают использовать prepareAsync(), так как она возвращается немедленно, а не блокирует, пока достаточное количество данных не было буферизацией. вызов метода MediaPlayer.prepareAsync(), поскольку вы используете конструктор для создания объекта MediaPlayer.

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

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if (mMediaPlayer != null) { 
     mMediaPlayer.stop(); 
     mMediaPlayer.release(); 
     mMediaPlayer = null; 
    } 
} 

Надеется, что это помогает!

+0

Извините, что нет кода. Он находится здесь http://stackoverflow.com/questions/33288303/bufferqueue-has-been-abandoned-when-playing-video-with-textureview. Кроме того, я пробовал модифицировать свой путь и по-прежнему получал те же ошибки. – learner

Смежные вопросы