woonizzooni

ffplay 분석 본문

FFmpeg

ffplay 분석

woonizzooni 2019. 7. 24. 07:06

2013년 중순경 Android용 FFmpeg기반 MediaPlayer를 제작하면서 분석했던 내용을 공유해본다.

커다란 종이에 막 낙서하는 것을 좋아해서 visio를 애용했엇다.

파일 정리하다가 나온김에 흔적을 남겨본다.

 

 

o 참고 사항

당시 ffmpeg-1.2.1을 이용했었고, 조금지나 2버전이 나왔던 기억인데 지금은 4버전까지 나왔네.
> 응용 앱 소스 위치 변경
   ffmpeg.c, ffplay.c, ffserver.c등 ref app소스들이 ffmpeg/*밑에 있었는데
   지금은 ffmpeg/fftools/*밑으로 이동

> API변경
  avformat_alloc_context() > avformat_open_input() > avformat_find_stream_info() > ... 후에
  av_read_frame() > avcodec_get_frame() > avcodec_decode_video2() ... 이러던 것이
  avcodec_send_packet() > avcodec_receive_frame() 등으로 변경된 것이 보인다.

이렇듯 최신 소스로 분석된 내용은 아니라는 점을 참고 바란다.

 

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패킷 디코딩 & 장치 출력

 

 

> 상세

 

 

Comments