마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

setDataSource()로 rtsp경로를 받아오질 못합니다.

0 추천
String path = "rtsp://192.168.60.195/cho/s.mp4-muxed.mp4";
  Uri uriparse = Uri.parse(path);

mediaplayer.setDataSource(getApplicationContext(), uriparse); 와 같이 path를 지정하고 setDataSource()를 통해

가져오려는데 logcat에

05-06 15:32:02.511: I/MediaPlayer(29996): path is null
05-06 15:32:02.511: D/MediaPlayer(29996): Couldn't open file on client side, trying server side
05-06 15:32:02.511: E/MediaPlayer(29996): Unable to to create media player
05-06 15:32:02.511: V/CUSTOM_VIDEO_PLAYER(29996): IOExceptionsetDataSource failed.: status=0x80000000
 

와 같이 뜨며 실행되지 않고 죽어버립니다. path가 null이라길래 경로가 잘못되었나싶어 다 확인해봤는데

와우자, vlc, 그리고 테스트하려는 갤럭시텝 내부플레이어에선 모두 잘 동작합니다. 문제가 뭔지 모르겠네요.

아래는 소스코드입니다.

 

 

 

package com.example.video;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnInfoListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnSeekCompleteListener;
import android.media.MediaPlayer.OnVideoSizeChangedListener;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.MediaController;
import android.widget.MediaController.MediaPlayerControl;
import android.widget.TextView;

 

 

public class MainActivity extends Activity {
 
 Display currentDisplay;
 
 SurfaceView surfaceview;
 SurfaceHolder surfaceholder;
 View mainView;
 TextView statusview;
 
 MediaPlayer mediaplayer;
 MediaController controller;
 int videowidth =0;
 int videoheight = 0;
 
 boolean readyToPlay;
 
 public final static String LOGTAG = "CUSTOM_VIDEO_PLAYER";

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  
  surfaceview = (SurfaceView)findViewById(R.id.surfaceView1);
  surfaceholder=surfaceview.getHolder();
  surfaceholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  
  mainView = this.findViewById(R.id.MainView);
  statusview = (TextView)findViewById(R.id.statusview);
  mediaplayer =  new MediaPlayer();  
  
  Uri uriparse = Uri.parse("rtsp://192.168.60.195/cho/s.mp4-muxed.mp4");
  
  

   try
   {
   
    mediaplayer.setDataSource(getApplicationContext(), uriparse);
   } catch (IllegalArgumentException e) {
    
    // TODO Auto-generated catch block
    Log.v(LOGTAG, "IllegalArgumentException" + e.getMessage());
    finish();
   } catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    Log.v(LOGTAG, "IllegalStateException" + e.getMessage());
    finish();
    
   } catch (IOException e) {
    // TODO Auto-generated catch block
    Log.v(LOGTAG, "IOException" + e.getMessage());
    finish();
   }
   
   statusview.setText("MediaPlayer DataSource Set");
   currentDisplay = getWindowManager().getDefaultDisplay();
   controller =  new MediaController(this);
   
  
  surfaceholder.addCallback(new Callback() {
   
   public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    Log.v(LOGTAG, "surfaceDestroyed Called");
   }
   
   public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    Log.v(LOGTAG, "surfaceCreated Called");
    mediaplayer.setDisplay(surfaceholder);
    statusview.setText("MediaPlayer Display Surface Set");
    try {
     mediaplayer.prepareAsync();
    } catch (IllegalStateException e) {
     // TODO: handle exception
     Log.v(LOGTAG, "IllegalStateException" + e.getMessage());
     finish();
    }
    statusview.setText("MediaPlayer Preparing");
    
   }
   
   public void surfaceChanged(SurfaceHolder holder, int format, int width,
     int height) {
    // TODO Auto-generated method stub
    Log.v(LOGTAG, "surfaceChanged Called");
    
   }
  });
wonie86 (300 포인트) 님이 2013년 5월 6일 질문
mediaplayer.setOnErrorListener(new OnErrorListener() {
   
   public boolean onError(MediaPlayer mp, int what, int extra) {
    // TODO Auto-generated method stub
    Log.v(LOGTAG, "onError Called");
    statusview.setText("MediaPlayer Error");
    if(what == MediaPlayer.MEDIA_ERROR_SERVER_DIED){
     Log.v(LOGTAG, "Media Error, Server Died" + extra);
    }else if(what == MediaPlayer.MEDIA_ERROR_UNKNOWN){
     Log.v(LOGTAG, "Media Error, Error Unknown" + extra);
    }
    return false;
   }
  });
  
  mediaplayer.setOnCompletionListener(new OnCompletionListener() {
   
   public void onCompletion(MediaPlayer mp) {
    // TODO Auto-generated method stub
    Log.v(LOGTAG, "onCompletion Called");
    statusview.setText("MediaPlayer Playback Completed");
    
   }
  });
  
  mediaplayer.setOnInfoListener(new OnInfoListener() {
   
   public boolean onInfo(MediaPlayer mp, int what, int extra) {
    // TODO Auto-generated method stub
    statusview.setText("MediaPlayer OnInfo Called");
    if(what == MediaPlayer.MEDIA_INFO_BAD_INTERLEAVING){
     Log.v(LOGTAG, "Media Info, Media Info Bad Interleaving" + extra);
    }else if(what == MediaPlayer.MEDIA_INFO_NOT_SEEKABLE){
     Log.v(LOGTAG, "Media Info, Media Info Not Seekable" + extra);
    }else if(what == MediaPlayer.MEDIA_INFO_UNKNOWN){
     Log.v(LOGTAG, "Media Info, Media Info Unknown" + extra);
    }else if(what == MediaPlayer.MEDIA_INFO_VIDEO_TRACK_LAGGING){
     Log.v(LOGTAG, "Media Info, Media Info Video Track Lagging" + extra);
    }else if(what == MediaPlayer.MEDIA_INFO_METADATA_UPDATE){
     Log.v(LOGTAG, "Media Info, Media Info Metadata Update" + extra);
    }
    return false;
   }
  });
  
  mediaplayer.setOnPreparedListener(new OnPreparedListener() {
   
   public void onPrepared(MediaPlayer mp) {
    // TODO Auto-generated method stub
    Log.v(LOGTAG, "onPrepared Called");
    statusview.setText("MediaPlayer OnPrepared");
    
    videowidth = mp.getVideoWidth();
    videoheight = mp.getVideoHeight();
    
    if(videowidth > currentDisplay.getWidth() || videoheight > currentDisplay.getHeight()){
     float heightRatio = (float) videoheight / (float) currentDisplay.getHeight();
     float widthRatio = (float) videowidth / (float) currentDisplay.getWidth();
     
     if(heightRatio > 1 || widthRatio > 1){
      if(heightRatio > widthRatio){
       videoheight = (int) Math.ceil((float) videoheight / (float) heightRatio);
       videowidth = (int) Math.ceil((float) videowidth / (float) heightRatio);
      }else{
       videoheight = (int) Math.ceil((float) videoheight / (float) widthRatio);
       videowidth = (int) Math.ceil((float) videowidth / (float) widthRatio);
      }
     }
    }
    surfaceview.setLayoutParams(new LayoutParams(videowidth, videoheight));
    
    controller.setMediaPlayer((MediaPlayerControl) getApplication());
    controller.setAnchorView(mainView);
    controller.setEnabled(true);
    controller.show();
    
    
    mp.start();
    statusview.setText("MediaPlayer Started");
   }
  });
  
  mediaplayer.setOnSeekCompleteListener(new OnSeekCompleteListener() {
   
   public void onSeekComplete(MediaPlayer mp) {
    // TODO Auto-generated method stub
    Log.v(LOGTAG, "onSeekComplete Called");
   }
  });
  
  mediaplayer.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() {
   
   public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
    // TODO Auto-generated method stub
    videowidth = mp.getVideoWidth();
    videoheight = mp.getVideoHeight();
    
    if(videowidth > currentDisplay.getWidth() || videoheight > currentDisplay.getHeight()){
     float heightRatio = (float) videoheight / (float) currentDisplay.getHeight();
     float widthRatio = (float) videowidth / (float) currentDisplay.getWidth();
     
     if(heightRatio > 1 || widthRatio > 1){
      if(heightRatio > widthRatio){
       videoheight = (int) Math.ceil((float) videoheight / (float) heightRatio);
       videowidth = (int) Math.ceil((float) videowidth / (float) heightRatio);
      }else{
       videoheight = (int) Math.ceil((float) videoheight / (float) widthRatio);
       videowidth = (int) Math.ceil((float) videowidth / (float) widthRatio);
      }
     }
    }
    surfaceview.setLayoutParams(new LayoutParams(videowidth, videoheight));
   }
  });
  
  mediaplayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {
   
   public void onBufferingUpdate(MediaPlayer mp, int percent) {
    // TODO Auto-generated method stub
    statusview.setText("MediaPlayer Buffering: " + percent + "%");
    Log.v(LOGTAG, "MediaPlayer Buffering: " + percent + "%");
   }
  });
  
  controller.setMediaPlayer(new MediaPlayerControl() {
   
   public void start() {
    // TODO Auto-generated method stub
    mediaplayer.start();
   }
   
   public void seekTo(int pos) {
    // TODO Auto-generated method stub
    mediaplayer.seekTo(pos);
   }
   
   public void pause() {
    // TODO Auto-generated method stub
    if(mediaplayer.isPlaying()){
     mediaplayer.pause();
    }
   }
   
   public boolean isPlaying() {
    // TODO Auto-generated method stub
    return mediaplayer.isPlaying();
   }
   
   public int getDuration() {
    // TODO Auto-generated method stub
    return mediaplayer.getDuration();
   }
   
   public int getCurrentPosition() {
    // TODO Auto-generated method stub
    return mediaplayer.getCurrentPosition();
   }
   
   public int getBufferPercentage() {
    // TODO Auto-generated method stub
    return 0;
   }
   
   public boolean canSeekForward() {
    // TODO Auto-generated method stub
    return true;
   }
   
   public boolean canSeekBackward() {
    // TODO Auto-generated method stub
    return true;
   }
   
   public boolean canPause() {
    // TODO Auto-generated method stub
    return true;
   }
  });
  
  
 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  // TODO Auto-generated method stub
  if(controller.isShowing()){
   controller.hide();
  }else {
   controller.show();
  }
  return false;
 }
 


}

여기까지가 소스전부입니다. 무엇이 문제일까요....도와주세요ㅜㅠ

1개의 답변

0 추천
매니페스트파일에

인터넷사용 권한은 주셧나요?
얼룩돼지 (15,720 포인트) 님이 2013년 5월 6일 답변
...