// 본글은 여러 블로그를 참고하여 작성되었습니다. //
// 작성 일자 : 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를 사용하면 끝
'Android Story' 카테고리의 다른 글
[Android ] 안드로이드 UI 디자인, Framer (1) | 2017.12.22 |
---|---|
[ Android ] JavaCV 연동 (0) | 2017.03.30 |
[ Android ] 틴트(오버레이) 색상 지정하기 (0) | 2017.03.28 |
[ Android ] 줄번호 설정 (0) | 2017.01.13 |
[ Android ] Network type (0) | 2016.12.19 |
[ Android ] FFplay 문서 번역 (0) | 2016.12.13 |
[ Android ] FFMpeg 패키지 연동하기 (15) | 2016.12.13 |
[ Android ] inflate (0) | 2016.12.07 |