[컴][안드로이드] 간단한 RTSP client

mms / rtsp / streaming /



Media Playback 을 통해서
ref. 2 에서 간단한 Media Player 의 예제들을 볼 수 있다.
ref. 4 는 Media Player 에 대한 자세한 이야기를 확인할 수 있다.
ref. 5 에서는 audio 를 저장하는 방법을 알 수 있다.


Android 가 지원하는 media 와 관련된 network protocols

ref.3 을 보면 android 에서 지원하는 Media format 들을 확인할 수 있다. Media 와 관련된 지원 가능한 protocol 도 알 수 있다.
  • RTSP (RTP, SDP)
  • HTTP/HTTPS progressive streaming
  • HTTP/HTTPS live streaming draft protocol:
    • MPEG-2 TS media files only
    • Protocol version 3 (Android 4.0 and above)
    • Protocol version 2 (Android 3.x)
  • HTTPS : Not supported before Android 3.0


service 로 만드는 것은 다음으로 미루고 이번에는 단순 Activity 에서 만들어 보기로 하자.



Internet Permission

<uses-permission android:name="android.permission.INTERNET" />

RTSP 니까 당연히 internet permission 이 필요하다. ^^



MediaPlayer class

android 에서 제공하는 media 관련 framework 에 MediaPlayer class 가 있는데 이 녀석으로 audio, video 의 fetch / decode / play 를 할 수 있다. 여러 경로의 media source 를 지원한다.(local file, local URIs, remote URLs)

더욱 자세한 이야기는 ref. 3 을 보면 된다. 위에서 이야기한 "Android 가 지원하는 media 와 관련된 network protocols" 의 내용이 이 MediaPlayer class 의 내용이라고 봐도 무방할 듯 하다.

ref. 4 에 나오는 streaming 을 play 하는 source code 이다. 이 소스보다는 ref. 2 에 있는 소스가 좀 더 자세하다.

String url = "http://........"; // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.start();


ref. 4 에 나오는 주의사항에 URL 을 streaming 할 때 그 file 이 progressive download 가 가능해야 한다. 고 한다.


onPrepared()

prepare() 호출은 실행하는 데에 오래걸린다. 왜냐하면 fetching 과 media data 를 decoding 하는 작업을 이 안에서 하기 때문이다. 그래서 이녀석은 UI thread 에서 호출하면 안된다.(이유는 대충 알듯 해서 생략, 자세한것은 ref. 4를 보자)

그래서 다른 thread 를 만들고 거기서 prepare() 를 실행하고, 끝나면 다시 main thread 에 알려주는 방식을 택해야 하는데, 이부분을 android 에서 prepareAsync() 를 이용해서 쉽게 사용할 수 있도록 해 놨는데, prepare()를 직접 호출하는 대신에 prepareAsync() 를 호출하고 이 prepareAsync 가 호출하는 onPrepared() 를 override 해서 원하는 작업을 하면 된다.(ref. 2 소스 참고)

이것과 관련한 source 는 ref. 2 에서 볼 수 있다. onPrepared 부분만 가져오면 아래와 같다.

// Attach to when audio file is prepared for playing
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
 @Override
 public void onPrepared(MediaPlayer mp) {
  mediaPlayer.start();
 }
});


MediaPalyer State diagram


출처 : ref. 6



RTSP client

위의 "MediaPlayer class" 부분에 있는 code 를 이용해서 rtsp 를 재생시킬 수 있다. 이렇게 만든 간단한 sample code 는 아래에서 확인할 수 있다.





References

  1. libstreaming/RtspClient.java at master · fyhertz/libstreaming · GitHub
  2. Video and Audio Playback and Recording | CodePath Android Cliffnotes
  3. Supported Media Formats | Android Developers
  4. Media Playback | Android Developers
  5. Audio Capture | Android Developers
  6. MediaPlayer | Android Developers


댓글 없음:

댓글 쓰기