로봇이동체의 카메라에서 영상을 받아 UI에 뿌려주는 플랫폼을 만들기위한 동영상 배경지식 정리.
사진 - PNG
동영상 - OpenCV, FFmpeg, DirectShow
지도 - ??
네트워크 - 소켓통신 Window <-> Linux
Linux에서 카메라 제어
- Camera Device Driver 설치 ( pwc, video4linux, xawtv)
- FFmpeg 설치 (configure, make, make install)
- FFserver 설치 (ffserver.conf 파일 수정)
- FFserver 실행
- FFmpeg 카메라 연결 - ffmpeg -g -f video4linux -r 30 -s 160x120 -i /dev/video0 http://localhost:8090/feed1.ffm
- 웹에서 http://ip:8090/stream.asf
동영상은 영상 + 오디오
Digital Container Format
- 동영상/오디오 코덱을 이용하여 데이터를 저장하는 방식과 재생 동기화 정보 등의 부가 정보를 담고 있는 파일형식. ex> .mp4, .asf, .avi 등
인코딩
- 원본 영상 데이터로부터 특정 동영상 코덱으로 변환 하는것.
먹싱
- 인코딩 된 데이터를 Digital Container Format파일에 담는것.
디먹싱
- 먹싱과 반대의 개념으로 동영상 파일로 부터 비트 스트림 데이터를 추출 하는것.
디코딩
- 디먹싱을 하게 되면 어떤 코덱으로 인코딩 되었는지를 알 수 있다. 알아낸 코덱으로 원본 데이터 영상을 얻는 것.
FFmpeg
- 크로스 플랫폼을 지원하는 오픈소스 멀티미디어 프레임워크이다. FFmpeg을 이용해 인코딩/디코딩, 트랜스코딩, 먹싱/디먹싱, 스티림은 물론 재생까지 멀티미디어와 관련한 거의 모든 기능을 다 갖추고 있다.
FFmpeg library
- libavcodec : 오디오/비디오의 인코더/디코더
- libavformat : 오디오/비디오 Container Format의 muxer/demuxer
- libavutil : FFmpeg 개발 시 필요한 다양한 유틸리티
- libpostproc : video post-processing
- libswscale : 비디오의 image scaling, color-space, pixel-format 변환
- libavfilter : 인코더와 디코더 사이에서 오디오/비디오를 변경하고 검사
- libswresample : 오디오 리샘플링
원본 데이터 추출 과정
- 동영상 -> 디먹싱(libavformat을 거쳐 분리) -> 비디오 코덱 정보 + 오디오 코덱 정보 + 비디오 비트 스트림 + 오디오 비트 스트림 -> 디코딩(libavcodec에서 알아낸 코덱 정보로 디코딩) -> 비디오 픽셀 데이터 + 오디오 PCM 데이터
- 동영상 데이터를 디먹싱 과정을 통해서 비디오,오디오 코덱정보를 알아내고 비디오,오디오 비트 스트림 데이터를 얻는다. 그 다음 디먹싱 과정에서 알아낸 코덱정보를 가지고 비트 스트림 데이터를 디코딩 한다. 그러면 비디오의 원본 데이터와 오디오의 원본 데이터를 얻을 수 있다.