마이클 니더마이어(Michael Niedermayer)의 주도하에 개발되고 있는 모든 동영상, 음악, 사진 포맷들의 디코딩과 인코딩을 목표로 만들어지고 있는 LGPL과 GPL 라이선스를 따르는 오픈 소스 프로젝트
ffmpeg를 설치하는 방법은 아래 링크를 통해 다운 받을 수 있다.
(윈도우에서는 환경변수를 설정해줘야 rtsp 관련 라이브러리를 사용할 떄 사용할 수 있다.)
https://ffmpeg.org/download.html
개요 = ffmpeg 매우 빠른 비디오 및 오디오 컨버터로서 ~~ 하라고 적혀있다.
EX) ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
우선 첫 ffmpeg를 보면
위의 ffmpg 예시를 보여준다.
ffmpeg -i 입력.avi -r 24 출력.avi
필터링 부분에서는 decode frames -> (filter) => filter frames -> encoder -> 완성 이러한 느낌의 그림과 설명이 있다.
복사 부분은 스트림을 카피한 다는 것과 선택한다는 부분인데
input -> demuxer -> 데이터 패킷! -> muxer -> 완성
이런 느낌으로 해독 인코딩을 안한다고 한다.
선택같은 경우에는 -map을 통해 선택하는데 각 스트림 선택 출력 제어 옵션을 설정하나 건너뛸 수 있다는 설명인 거 같았다.
기본적인 스트림 세그먼트화에 사용되는 것으로 (분할)
HTTP 라이브 스트리밍
(재생 목록 파일과 하나 이상의 세그먼트 파일을 만든다.)
segment 보다 구체적인 구현
ffmpeg rtsp 설명 페이지 (24.32)
https://www.ffmpeg.org/ffmpeg-all.html#segment_002c-stream_005fsegment_002c-ssegment
대충 설명을 보면 프로토콜 처리기가 아닌 muxer or DeMuxer 역할은 한다고 되어있다.
(muxer = 여러 입력을 하나로 합치는 과정)
= RTSP 전송 프로토콜 선택. (muxer같은 경우에는 tcp, udp 만 지원, RTSP는 기본적으로 stateful 이다.)
전송을 요청을 할 때엔 주로 TCP 가 사용된다.
잘 사용을 안해서 모르겠지만 (filter_src: 협상된 피어 주소 허용, listen: 수신 연결 서버 역할 등 이라 적혀있다.)
서버 허용할 미디어 유형이다. (video, audio, data)
로컬 udp 포트 설정
초기 연결 설정 최대 시간 제한 설정
패킷 처리를 위해 버퍼링할 패킷 수
소켓 tcp 시간 초과 설정
(이 외에는 대부분 통신에 대한 것들이라 생략한다.. )
EX) 최대 재주문 지연 시간 0.5초 UDP 통신
ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4