AndroidStudioのJavaにてMediaPlayerを使用して
RTP、RTSPのストリーミング再生をしたいのですが、うまくいきません。
どなたかご教授頂けないでしょうか。
java
1コード 2package com.example.aishin.browser; 3 4import android.support.v7.app.AppCompatActivity; 5import android.os.Bundle; 6 7import java.io.IOException; 8 9import android.app.Activity; 10import android.graphics.PixelFormat; 11import android.annotation.SuppressLint; 12import android.media.MediaPlayer; 13import android.os.Bundle; 14import android.net.Uri; 15import android.util.Log; 16import android.view.KeyEvent; 17import android.view.SurfaceHolder; 18import android.view.SurfaceView; 19import android.view.WindowManager; 20import android.widget.MediaController; 21import android.widget.MediaController.MediaPlayerControl; 22 23 24public class VideoActivity extends AppCompatActivity implements SurfaceHolder.Callback, MediaPlayerControl { 25 26 private static final String TAG = "VideoPlayer"; 27 28 private SurfaceHolder mHolder; 29 private SurfaceView mPreview; 30 private MediaPlayer mMediaPlayer = null; 31 private MediaController mMediaController; 32 33 @Override 34 protected void onCreate(Bundle savedInstanceState) { 35 super.onCreate(savedInstanceState); 36 setContentView(R.layout.activity_video); 37 38 // スクリーンセーバをオフにする 39 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 40 getWindow().setFormat(PixelFormat.TRANSPARENT); 41 42 mPreview = (SurfaceView) findViewById(R.id.surface); 43 mHolder = mPreview.getHolder(); 44 mHolder.addCallback(this); 45 46 // MediaPlayerを利用する 47 mMediaPlayer = new MediaPlayer(); 48 // MediaControllerを利用する 49 mMediaController = new MediaController(this); 50 mMediaController.setMediaPlayer(this); 51 mMediaController.setAnchorView(mPreview); 52 53 } 54 55 @SuppressLint("NewApi") 56 protected void onResume() { 57 super.onResume(); 58 // allow to continue playing media in the background. 59 // バックグラウンド再生を許可する 60 //requestVisibleBehind(true); 61 } 62 63 public boolean onDestroy(MediaPlayer mp, int what, int extra) { 64 Log.d(TAG, "onDestroy"); 65 if (mp != null) { 66 mp.release(); 67 mp = null; 68 } 69 return false; 70 } 71 72 @Override 73 public void surfaceCreated(SurfaceHolder paramSurfaceHolder) { 74 Log.d(TAG, "surfaceCreated"); 75 // URLの先にある動画を再生する 76 Uri mediaPath = Uri.parse("rtp://@224.1.1.1:6090"); 77 try { 78 mMediaPlayer.setDataSource(this, mediaPath); 79 mMediaPlayer.setDisplay(paramSurfaceHolder); 80 mMediaPlayer.prepare(); 81 mMediaPlayer.start(); 82 } catch (IllegalArgumentException e) { 83 e.printStackTrace(); 84 } catch (IllegalStateException e) { 85 e.printStackTrace(); 86 } catch (IOException e) { 87 e.printStackTrace(); 88 } 89 } 90 91 @Override 92 public void surfaceChanged(SurfaceHolder paramSurfaceHolder, int paramInt1, 93 int paramInt2, int paramInt3) { 94 } 95 96 @Override 97 public void surfaceDestroyed(SurfaceHolder paramSurfaceHolder) { 98 Log.d(TAG, "surfaceDestroyed"); 99 if (mMediaPlayer != null) { 100 mMediaPlayer.release(); 101 mMediaPlayer = null; 102 } 103 } 104 105 // ここから先はMediaController向け -------------------------- 106 @Override 107 public boolean dispatchKeyEvent(KeyEvent event) { 108 Log.d(TAG, "KeyCode:"+ event.getKeyCode()); 109 if (event.getKeyCode() != KeyEvent.KEYCODE_BACK) { 110 if (!mMediaController.isShowing()){ 111 mMediaController.show(); 112 } else { 113 mMediaController.hide(); 114 } 115 } 116 return super.dispatchKeyEvent(event); 117 } 118 @Override 119 public void start() { 120 mMediaPlayer.start(); 121 } 122 @Override 123 public void pause() { 124 mMediaPlayer.pause(); 125 } 126 @Override 127 public int getDuration() { 128 return mMediaPlayer.getDuration(); 129 } 130 @Override 131 public int getCurrentPosition() { 132 return mMediaPlayer.getCurrentPosition(); 133 } 134 @Override 135 public void seekTo(int pos) { 136 mMediaPlayer.seekTo(pos); 137 } 138 @Override 139 public boolean isPlaying() { 140 return mMediaPlayer.isPlaying(); 141 } 142 @Override 143 public int getBufferPercentage() { 144 return 0; 145 } 146 @Override 147 public boolean canPause() { 148 return true; 149 } 150 @Override 151 public boolean canSeekBackward() { 152 return true; 153 } 154 @Override 155 public boolean canSeekForward() { 156 return true; 157 } 158 @Override 159 public int getAudioSessionId() { 160 return 0; 161 } 162 163} 164 165
xml
1コード 2<?xml version="1.0" encoding="utf-8"?> 3<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 4 android:orientation="vertical" 5 android:layout_width="fill_parent" 6 android:layout_height="fill_parent" 7 > 8 9 <SurfaceView android:id="@+id/surface" 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" /> 12 13</LinearLayout>
こちらのサイトをほぼほぼ参考にしています。
eMediaPlayer.prepare()のところで
java.io.IOException: Prepare failed.: status=0x1
のエラーが出る状態です。
またhttpのストリーミングなどはできるのですが30秒程度再生を続けると
surfaceCreatedが繰り返される状況になります。
VLCプレイヤーなどからは問題なく再生される為、ストリーミングサーバーは問題無いかと思われます。
※リアルタイムエンコーダを使用しています。
どなたかわかる方ご教授頂けないでしょうか?
AndroidStudio 3.3.2
AndroidVersion9
言語 Java
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。