Android Story

[ Android ] FFmpeg Rtsp Player 사용하기

WhiteDuck 2016. 12. 27. 15:09


FFmpeg에 대한 세팅은 


[Android] FFmpeg 패캐지 연동하기


에서 살펴보았다.


// 본글은 여러 블로그를 참고하여 작성되었습니다. //

// 작성 일자 : 2016.12.27 //


이번 포스팅에서는 FFmpeg은 jni에서 java에서는 Surface를 사용하여 Rtsp Player를 만들어보고자 한다.


다만 VideoStream에 국한적인 플레이어이니 참고바란다.


이후에 AudioStream 연동에 대해서 해보고 난 뒤 포스팅할 예정이다.


 

참고 : 

    Android+FFmpeg+ANativeWindow视频解码播放


사실 참고한 곳에 더 잘 나와있다.


저번시간에 FFmpeg 3.x 버전으로 세팅하였었는데, 자사의 개발 서버와 FFmpeg 을 맞추는 것이 좋을 것 같아,


FFmpeg 2.8.10 버전으로 세팅하였음을 알린다.



test rtsp uri :  "rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov"




우선 파일 트리는 다음과 같다.




Activity에서는 RtspPlayView를 생성하는 데 소스에는 uri를 생성자 파라미터에 포함하였다. 


이왕이면 setDataSource() 같은 메소드로 따로 분류하여 적용하는 것이 깔끔해 보일 것이다.






 


RtspPlayer에서는 NDKAdapter를 통해서 JNI를 참조하고, MainActivity의 SurfaceView에 전달한다.





NDKAdapter는 JNI 라이브러리를 불어오는 역할만 수행한다.




이제 MakeProject 뒤에 NDKAdapter.java 를 javah 하면 jni에서 사용할 .h 파일이 생긴다. ( 모르시는 분은 [Android] FFmpeg 패캐지 연동하기 을 참고하세요)


이것을 적용할 interface.c 파일을 만들고 다음과 같이 기입한다.





Android.mk 파일은 VideoPlayer 라이브러리를 생성하도록 하고, interface.c를 사용한다.




다만, 여기에서 주의할 점은 Surface를 jni에서 사용하기 위해서 Native_window를 사용하였다는 것이다.


이 것을 얻어오기 위해서 


jni

└ include

        └  android

                  └ native_window.h

                  └ native_window_jni.h


 

와 같이 배치한다. 각 파일은 NDK 경로의 platforms 하위에서 검색하면 나온다. 


여러개나 나오지만 Android-version이 달라 여러개가 나올뿐 소스는 같다. ( 몇개만 확인해 봤을때 )


저자는 /home/user/Android/Sdk/ndk-bundle/platforms 에서 native_window를 검색하였다.


이제 jni를 ndk-build를 사용하면 끝




반응형