FFmpeg 에서 디버깅 메시지 출력하게하는 함수
av_log_set_level(AV_LOG_DEBUG);
x264로 인코딩할 경우에 데이터는 NAL이라는 것으로 사용되는 것 같음.
분석 결과
0x00 0x00 0x00 0x01 또는
0x00 0x00 0x01 로 시작되는 것이 Start Code 같음.
키 프레임의 경우 총 3~4개의 NAL로 구성되어있는 듯함.
처음 프레임의 경우에는 인코더 정보에 대한 문자열을 포함하여 4개의 NAL로 구성되며,
다음부터 키프레임은, 3개의 NAL로 구성된다.
Start Code 뒤에
0x67, 0x68, 0x41, 0x01, 0x65, 0x06
이런식으로 나오는데
분석 결과
0x06 : NAL_SEI 맨 처음 프레임에서 나오는데, uuid와 기타 코덱 정보를 가지고 있다.
0x67 : NAL_SPS
0x68 : NAL_PPS
0x41 : NAL_SLICE -> 일반적인 프레임에서 나옴
0x01 : NAL_SLICE -> 일반적인 프레임에서 나옴
0x65 : NAL_SLICE_IDR -> 키 프레임에서 나온다.
참고
enum nal_unit_type_e
{
NAL_UNKNOWN = 0,
NAL_SLICE = 1,
NAL_SLICE_DPA = 2,
NAL_SLICE_DPB = 3,
NAL_SLICE_DPC = 4,
NAL_SLICE_IDR = 5, /* ref_idc != 0 */
NAL_SEI = 6, /* ref_idc == 0 */
NAL_SPS = 7,
NAL_PPS = 8,
NAL_AUD = 9,
NAL_FILLER = 12,
/* ref_idc == 0 for 6,9,10,11,12 */
};
x264 분석 방법
소스 코드 분석 후, 적당한 곳에 로그 함수를 추가한다.
예제
x264_log( h, X264_LOG_DEBUG, "Nal num=%d, size=%d type=%d ref_idc=%d%s\n",
kk, (*pp_nal)[kk].i_payload, (*pp_nal)[kk].i_type, (*pp_nal)[kk].i_ref_idc, psz_message);
그리고 파일을 저장하고,
컴파일을 다시 수행한다. 획득한 dll을 새로 덮어씌워서 ffmpeg을 돌리면, 로그가 찍힌다.
'Programming > MFC-C++' 카테고리의 다른 글
Wave 출력 및 waveOutClose 함수, Callback 함수와의 연동 (0) | 2013.04.18 |
---|---|
IK SVM (Fast Intersection / Additive Kernel SVMs) (0) | 2013.04.08 |
Kinect for Window & OpenNI 동시 설치 및 사용하기 (0) | 2013.03.26 |
ffmpeg 관련 정보 (0) | 2013.02.16 |
임베디드 최적화 관련 함수 (0) | 2013.01.28 |