일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- docker
- ffmpeg
- macos
- Windows10
- aws
- 행정구역분류
- android studio
- nginx-media-server
- spring cloud config
- ebpf
- Shell script
- Flutter
- dart
- HLS
- VSCode
- wireshark
- kubectl
- namespace
- service
- deployment
- Sysinternals
- Java
- Pod
- configmap
- Android
- aws cli
- golang
- RTMP
- Kubernetes
- Python
- Today
- Total
woonizzooni
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패킷 디코딩 & 장치 출력
> 상세
'FFmpeg' 카테고리의 다른 글
[Windows] ffmpeg으로 화면캡처(capture desktop)해서 rtmp송출 (0) | 2020.11.08 |
---|---|
[macos] ffmpeg으로 화면캡처(capture desktop)해서 rtmp송출 (0) | 2020.03.29 |
macOS ffmpeg 설치 (0) | 2020.01.27 |
FFmpeg Visual Studio 2019 컴파일-2 (동영상 플레이어, C++/MFC, C#/WPF) (4) | 2019.07.24 |
FFmpeg Visual Studio 2019 컴파일-1 (0) | 2019.07.10 |