mediaplayer를 이용하여 동영상 재생 플레이어를 개발중입니다.
기본적인 재생이나 그러한 것들은 모두 잘 되는데, 한가지 Streaming Contents 재생 시 특히 느린 3G 망일 때에만 Life Cycle에 따라
오동작을 보이고 있습니다.
더 구체적인 것은 다음과 같습니다.
- 최초 Activity가 실행하면서 영상물 재생 (Local File / Streaming 구분없이 잘 됩니다.)
- 재생 중 임의의 화면 전환이 발생
예를 들어 전화가 왔다거나 Home key를 눌러 Home Screen으로 이동이 되었거나 등등...
- 다시 앱으로 복귀하여 이어서 재생 시
이때, Local File 및 Streaming 일때 Wi-Fi 망까지는 정상적으로 재생이 잘 되는 것 같은데,
특히나 느린 3G망에서 재생이 거의 안되거나 Activity가 아예 다시 실행이 되어
영상의 처음부터 재생이 되는 것을 확인 하였습니다.
물론 이런 현상이 모두 발생하는 것은 아니고 진저브레드에서는 정상적으로 동작을 하고 있습니다.
허니컴이나 아이스크림 샌드위치의 경우 오동작을 보이더군요...;;;
아무래도 이러한 원인이 Life Cycle에 따른 이슈로 봐야 할 것 같은데, onResume / onPause에서 다른 분들은 Media Player 자체를 어떻게
컨트롤 하시는가 해서 이렇게 글을 올려 봅니다.
즉, 동영상 플레이어를 개발하실때, 주요 Life Cycle을 어떻게 처리들을 하시는지요?
제가 개발한 녀석의 경우 뭔가 부족해 보이는 것이 있어서 그런진 몰라두 오동작을 하는게 무작정 OS Version 탓을 하는건 또 아닌거 같아 조심스레 글을 남겨 봅니다.
고수 분들의 많은 의견 부탁드립니다. (_ _)
ps : 혹시나 해서 디버깅을 하면서 확인된 사항을 몇자 더 작성해봅니다.
3G로 Streaming 재생 시 그냥 재생을 하면 잘 되는 반면, 재생 중 home key로 한번 나갔다 복귀 하면 이어서 재생을 시도 하는 척(?)을 하다가 media server died! 라는 메시지들이 일부 보이던데...왜 이러는지 솔직히 감이 잘 안잡히네요..ㅡㅜ..




오디오만 사용하면 문제가 없지만 허니콤 이상 버젼에서는 Surface 화면의 버퍼(ANativeWindow)를 구해 그 버퍼에 디코딩 된 결과를 바로 쓰게 되어 있어서, 홈같은 버튼을 눌러 빠져 나갈 경우, Surface가 Destroyed 되면서 디코딩을 못하기 때문에 재생이 안 됩니다.
(편법으로 Surface가 Destroyed 되지 않도록 했더니 홈을 눌러도 동작은 되긴 합니다만.. 위험하겠죠..; )
VideoView.java 의 suspend, resume 부분을 보면 아이스크림의 경우 resume 시 mediaplayer 를 다시 생성 후 재생되었던 위치까지 seek해서 플레이가 되게 되어 있습니다. 이 부분을 참조하여 작성하시길 권장합니다.