質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2960閲覧

AndroidStudio MediaPlayerでRTP、RTSPの再生について

dev-beginner

総合スコア25

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2021/08/11 01:25

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ExoPlayerを使用した方法に切り替える事にしました。
見て頂いた方、ありがとうございました。

投稿2021/08/18 09:32

dev-beginner

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問