/*단말기는 Odroid입니다.
로컬에 있는 testmp4.mp4 영상은 이상없이 잘 재생됩니다.
 rtsp 소스는 h.264, mp4, 320x240, 256Kbps, Frame입니다.
VLC 플레이어에서 이상없이 재생되는거 확인했습니다.*/

/*java.io.IOException: Prepare failed.: status=0xFFFFFFFF 이 문제 해결 방법을 모르겠습니다. 조언부탁드립니다.
log는 맨 아래 첨부하였습니다. */

/*
오디오는 나오는데 영상이 나오지 않습니다.  조언 부탁드립니다.
02-19 12:44:05.923: ERROR/OMXAVC_MFC(1655): SsbSipMfcDecExe fail: m_cMfcBuffSize is [1895]
02-19 12:44:05.923: ERROR/OMXAVC_MFC(1655): MfcDecodeSlice fail


그리고 WiFi로 접속한 후에 가만히 놔두면 Logcat에
"02-23 11:24:02.788: ERROR/WifiHW(1689): [1706],wifi.c:476, wifi_send_command(): reply:FAIL"
라는 메시지가 주기적으로 나타납니다. 저만 그런건지 아니면 다른 분들은 그런지 알고 싶습니다.
*/


Log
02-19 12:43:56.138: DEBUG/AndroidRuntime(4171): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
02-19 12:43:56.138: DEBUG/AndroidRuntime(4171): CheckJNI is ON
02-19 12:43:56.183: DEBUG/AndroidRuntime(4171): --- registering native functions ---
02-19 12:43:56.208: INFO/jdwp(4171): received file descriptor 18 from ADB
02-19 12:43:56.348: INFO/ActivityManager(1693): Starting activity: Intent { flags=0x10000000 comp={org.example.rtspplayer/org.example.rtspplayer.RtspPlayer} }
02-19 12:43:56.378: DEBUG/AndroidRuntime(4171): Shutting down VM
02-19 12:43:56.378: DEBUG/dalvikvm(4171): DestroyJavaVM waiting for non-daemon threads to exit
02-19 12:43:56.378: DEBUG/dalvikvm(4171): DestroyJavaVM shutting VM down
02-19 12:43:56.378: DEBUG/dalvikvm(4171): HeapWorker thread shutting down
02-19 12:43:56.378: DEBUG/dalvikvm(4171): HeapWorker thread has shut down
02-19 12:43:56.378: DEBUG/jdwp(4171): JDWP shutting down net...
02-19 12:43:56.378: DEBUG/jdwp(4171): +++ peer disconnected
02-19 12:43:56.378: INFO/dalvikvm(4171): Debugger has detached; object registry had 1 entries
02-19 12:43:56.378: DEBUG/dalvikvm(4171): VM cleaning up
02-19 12:43:56.383: DEBUG/dalvikvm(4171): LinearAlloc 0x0 used 641284 of 4194304 (15%)
02-19 12:43:56.413: INFO/SurfaceFlinger(1693): WC-DEB: [0-Init] registerBuffers - VideoLock(0)
02-19 12:43:56.488: WARN/PlayerDriver(1655): Using generic video MIO
02-19 12:44:00.918: INFO/VideoMIO(1655): [WC DEG] Start - Playing Contents Num = 1
02-19 12:44:00.938: INFO/ActivityManager(1693): Displayed activity org.example.rtspplayer/.RtspPlayer: 4593 ms
02-19 12:44:01.923: INFO/AudioHardwareALSA(1655): Initialized ALSA PLAYBACK device AndroidPlayback
02-19 12:44:01.923: DEBUG/AudioHardwareALSA(1655): Set PLAYBACK PCM format to S16_LE (Signed 16 bit Little Endian)
02-19 12:44:01.923: DEBUG/AudioHardwareALSA(1655): Using 2 channels for PLAYBACK.
02-19 12:44:01.923: DEBUG/AudioHardwareALSA(1655): Set PLAYBACK sample rate to 44100 HZ
02-19 12:44:01.923: DEBUG/AudioHardwareALSA(1655): Buffer size: 4096
02-19 12:44:01.923: DEBUG/AudioHardwareALSA(1655): Latency: 92879
02-19 12:44:05.923: ERROR/OMXAVC_MFC(1655): SsbSipMfcDecExe fail: m_cMfcBuffSize is [1895]
02-19 12:44:05.923: ERROR/OMXAVC_MFC(1655): MfcDecodeSlice fail
02-19 12:44:06.963: DEBUG/dalvikvm(1754): GC freed 350 objects / 18520 bytes in 54ms
02-19 12:44:10.928: ERROR/OMXAVC_MFC(1655): SsbSipMfcDecExe fail: m_cMfcBuffSize is [37]
02-19 12:44:10.928: ERROR/OMXAVC_MFC(1655): MfcDecodeSlice fail
02-19 12:44:12.018: DEBUG/dalvikvm(1941): GC freed 252 objects / 16520 bytes in 62ms
02-19 12:44:15.933: ERROR/OMXAVC_MFC(1655): SsbSipMfcDecExe fail: m_cMfcBuffSize is [2003]
02-19 12:44:15.933: ERROR/OMXAVC_MFC(1655): MfcDecodeSlice fail
02-19 12:44:17.283: DEBUG/VolumePanel(1693): onVolumeChanged(streamType: 3, flags: 17)
02-19 12:44:17.283: DEBUG/VolumePanel(1693): onShowVolumeChanged(streamType: 3, flags: 17), index: 8
02-19 12:44:17.288: INFO/NotificationService(1693): enqueueToast pkg=android
callback=android.widget.Toast$TN@43749c00 duration=0
02-19 12:44:17.548: DEBUG/VolumePanel(1693): onVolumeChanged(streamType: 3, flags: 0)
02-19 12:44:20.053: DEBUG/VolumePanel(1693): onVolumeChanged(streamType: 3, flags: 17)
02-19 12:44:20.053: DEBUG/VolumePanel(1693): onShowVolumeChanged(streamType: 3, flags: 17), index: 9
02-19 12:44:20.053: INFO/NotificationService(1693): enqueueToast pkg=android
callback=android.widget.Toast$TN@43749c00 duration=0
02-19 12:44:20.148: DEBUG/VolumePanel(1693): onVolumeChanged(streamType: 3, flags: 0)
02-19 12:44:45.943: ERROR/OMXAVC_MFC(1655): SsbSipMfcDecExe fail: m_cMfcBuffSize is [913]
02-19 12:44:45.943: ERROR/OMXAVC_MFC(1655): MfcDecodeSlice fail
02-19 12:44:50.943: ERROR/OMXAVC_MFC(1655): SsbSipMfcDecExe fail: m_cMfcBuffSize is [41]
02-19 12:44:50.943: ERROR/OMXAVC_MFC(1655): MfcDecodeSlice fail
02-19 12:44:55.948: ERROR/OMXAVC_MFC(1655): SsbSipMfcDecExe fail: m_cMfcBuffSize is [1904]
02-19 12:44:55.948: ERROR/OMXAVC_MFC(1655): MfcDecodeSlice fail
02-19 12:45:00.963: ERROR/OMXAVC_MFC(1655): SsbSipMfcDecExe fail: m_cMfcBuffSize is [35]
02-19 12:45:00.963: ERROR/OMXAVC_MFC(1655): MfcDecodeSlice fail
02-19 12:45:05.968: ERROR/OMXAVC_MFC(1655): SsbSipMfcDecExe fail: m_cMfcBuffSize is [2080]
02-19 12:45:05.968: ERROR/OMXAVC_MFC(1655): MfcDecodeSlice fail
02-19 12:45:10.968: ERROR/OMXAVC_MFC(1655): SsbSipMfcDecExe fail: m_cMfcBuffSize is [34]
02-19 12:45:10.968: ERROR/OMXAVC_MFC(1655): MfcDecodeSlice fail
*/

package org.example.test;

import android.app.Activity;
import android.os.Bundle;
import java.io.IOException;
import android.content.Context;
import android.media.MediaPlayer;
import android.view.*;

public class Test extends Activity {
    /** Called when the activity is first created. */
    private Preview mPreview;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mPreview = new Preview(this);
        setContentView(mPreview);
    }
}

class Preview extends SurfaceView implements SurfaceHolder.Callback {
    SurfaceHolder mHolder;
    MediaPlayer video = new MediaPlayer(); 
   
    Preview(Context context) {
        super(context);
       
        // SurfaceHolder.Callback을 설정함으로써 Surface가 생성/소멸되었음을
        // 알 수 있습니다.
        mHolder = getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public void surfaceCreated(SurfaceHolder holder) {
                video.setDisplay(mHolder);
         
        try {
            video.setDataSource("rtsp://192.168.0.175:8554/cam1");
//            video.setDataSource("/sdcard/testmp4.mp4");
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            video.prepare();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        video.start();
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        video.stop();
        video = null;
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {     
        // 표시할 영역의 크기를 알았으므로 해당 크기로 Preview를 시작합니다.
        mHolder.setFixedSize(w, h);
        video.start();
    }

}

///////////////////////////////////////////////////////////////////////////
///////////////////////////////      LOG    ///////////////////////////////
///////////////////////////////////////////////////////////////////////////

02-18 15:24:28.883: DEBUG/dalvikvm(6264): GC freed 1335 objects / 82256 bytes in 54ms
02-18 15:24:35.183: DEBUG/AndroidRuntime(6282): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
02-18 15:24:35.183: DEBUG/AndroidRuntime(6282): CheckJNI is ON
02-18 15:24:35.228: DEBUG/AndroidRuntime(6282): --- registering native functions ---
02-18 15:24:35.233: INFO/jdwp(6282): received file descriptor 18 from ADB
02-18 15:24:35.388: INFO/ActivityManager(1755): Starting activity: Intent { flags=0x10000000 comp={org.example.test/org.example.test.Test} }
02-18 15:24:35.413: DEBUG/AndroidRuntime(6282): Shutting down VM
02-18 15:24:35.418: DEBUG/dalvikvm(6282): DestroyJavaVM waiting for non-daemon threads to exit
02-18 15:24:35.418: DEBUG/dalvikvm(6282): DestroyJavaVM shutting VM down
02-18 15:24:35.418: DEBUG/dalvikvm(6282): HeapWorker thread shutting down
02-18 15:24:35.418: DEBUG/dalvikvm(6282): HeapWorker thread has shut down
02-18 15:24:35.418: DEBUG/jdwp(6282): JDWP shutting down net...
02-18 15:24:35.418: DEBUG/jdwp(6282): +++ peer disconnected
02-18 15:24:35.418: INFO/dalvikvm(6282): Debugger has detached; object registry had 1 entries
02-18 15:24:35.418: DEBUG/dalvikvm(6282): VM cleaning up
02-18 15:24:35.433: DEBUG/dalvikvm(6282): LinearAlloc 0x0 used 641284 of 4194304 (15%)
02-18 15:24:35.463: INFO/SurfaceFlinger(1755): WC-DEB: [0-Init] registerBuffers - VideoLock(0)
02-18 15:24:45.403: WARN/ActivityManager(1755): Launch timeout has expired, giving up wake lock!
02-18 15:24:45.413: WARN/ActivityManager(1755): Activity idle timeout for HistoryRecord{437d07d8 {org.example.test/org.example.test.Test}}
02-18 15:24:50.453: DEBUG/dalvikvm(1805): GC freed 193 objects / 10208 bytes in 42ms
02-18 15:24:55.513: ERROR/MediaPlayer(6264): error (-1, 0)
02-18 15:24:55.513: WARN/System.err(6264): java.io.IOException: Prepare failed.: status=0xFFFFFFFF
02-18 15:24:55.513: WARN/System.err(6264):     at android.media.MediaPlayer.prepare(Native Method)
02-18 15:24:55.513: WARN/System.err(6264):     at org.example.test.Preview.surfaceCreated(Test.java:55)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.SurfaceView.updateWindow(SurfaceView.java:352)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.SurfaceView.dispatchDraw(SurfaceView.java:259)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.View.draw(View.java:5841)
02-18 15:24:55.513: WARN/System.err(6264):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.View.draw(View.java:5841)
02-18 15:24:55.513: WARN/System.err(6264):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
02-18 15:24:55.513: WARN/System.err(6264):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1847)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.ViewRoot.draw(ViewRoot.java:1217)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1030)
02-18 15:24:55.513: WARN/System.err(6264):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1482)
02-18 15:24:55.513: WARN/System.err(6264):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-18 15:24:55.513: WARN/System.err(6264):     at android.os.Looper.loop(Looper.java:123)
02-18 15:24:55.513: WARN/System.err(6264):     at android.app.ActivityThread.main(ActivityThread.java:3948)
02-18 15:24:55.513: WARN/System.err(6264):     at java.lang.reflect.Method.invokeNative(Native Method)
02-18 15:24:55.513: WARN/System.err(6264):     at java.lang.reflect.Method.invoke(Method.java:521)
02-18 15:24:55.513: WARN/System.err(6264):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
02-18 15:24:55.513: WARN/System.err(6264):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
02-18 15:24:55.513: WARN/System.err(6264):     at dalvik.system.NativeStart.main(Native Method)

02-18 15:24:55.513: ERROR/MediaPlayer(6264): start called in state 0
02-18 15:24:55.513: ERROR/MediaPlayer(6264): error (-38, 0)
02-18 15:24:55.513: ERROR/MediaPlayer(6264): start called in state 0

02-18 15:24:55.513: ERROR/MediaPlayer(6264): error (-38, 0)
02-18 15:24:55.518: WARN/PlayerDriver(2609): PVMFInfoErrorHandlingComplete
02-18 15:24:55.523: ERROR/MediaPlayer(6264): Error (-38,0)
02-18 15:24:55.523: INFO/ActivityManager(1755): Displayed activity org.example.test/.Test: 20133 ms
02-18 15:24:55.538: ERROR/MediaPlayer(6264): Error (-38,0)