ffplay 분석
2013년 중순경 Android용 FFmpeg기반 MediaPlayer를 제작하면서 분석했던 내용을 공유해본다.
커다란 종이에 막 낙서하는 것을 좋아해서 visio를 애용했엇다.
파일 정리하다가 나온김에 흔적을 남겨본다.
o 참고 사항
당시 ffmpeg-1.2.1을 이용했었고, 조금지나 2버전이 나왔던 기억인데 지금은 4버전까지 나왔네. > 응용 앱 소스 위치 변경 ffmpeg.c, ffplay.c, ffserver.c등 ref app소스들이 ffmpeg/*밑에 있었는데 지금은 ffmpeg/fftools/*밑으로 이동 > API변경 이렇듯 최신 소스로 분석된 내용은 아니라는 점을 참고 바란다. |
o ffplay 내부 구조
> Main포함 5개 쓰레드로 구성 (색으로 구분)
쓰레드별 동작을 이해하고, jni로 java와 어떤 데이터를 주고 받을지,
Video/Audio 렌더링을 어떻게 시켜야 할지 고민했었다.
1) Main :: 라이브러리, SDL초기화, read_thread()생성, event_loop() : 화면 출력, 사용자 키 입력 & 제어
2) read_thread() : 파일 혹은 네트워크 스트림 열고 subtitle/video/audio 각 쓰레드 생성 & 패킷 큐잉
3) subtitle_thread() : 자막 디코딩 등 자막 관련 동작 수행
4) video_thread() : 패킷 디코딩 & YUV to RGB변환 -> SDL_PushEvent() : event_loop()에 전달
5) SDL_RunAudio() : SDL내부 쓰레드로 audio패킷 디코딩 & 장치 출력
> 상세