µ¿¿µ»óÀº ÆÄÀÏ Æ÷¸ËÀ̶ó±âº¸´Ù´Â ½ºÆ®¸²ÀÇ ÁýÇÕÀ¸·Î ±¸¼ºµÈ ÄÁÅ×À̳ÊÀÌ´Ù. ½ºÆ®¸²Àº
¿¬¼ÓÀûÀÎ ¹ÙÀÌÆ®¸¦ ½Ã°£¼øÀ¸·Î ÀúÀåÇØ ³õÀº °ÍÀÌ´Ù. º¸ÅëÀº ºñµð¿À, ¿Àµð¿À·Î
±¸¼ºµÈ 2°³ÀÇ ½ºÆ®¸²À» °¡Áø´Ù.
ºñµð¿À ½ºÆ®¸²¿¡´Â ½Ã°£ È帧º°·Î »çÁøÀÌ ¿¬¼ÓÀûÀ¸·Î ÀúÀåµÇ¾î ÀÖ°í ¿Àµð¿À ½ºÆ®¸²¿¡´Â »ç¿îµå »ùÇÃÀÌ µé¾î ÀÖ´Ù. ±×¸²À» ¼ø¼´ë·Î º¸¿© ÁÖ¸ç »ç¿îµå¸¦ ¿¬ÁÖÇÏ¸é µ¿¿µ»óÀÌ Àç»ýµÈ´Ù.
¿µÈ´Â °¢±¹ ¾ð¾îº°·Î ¿Àµð·Î ½ºÆ®¸² ¿©·¯ °³¸¦ Æ÷ÇÔÇÏ´Â °æ¿ìµµ ÀÖ°í ÀÚ¸·À̳ª ±× ¿ÜÀÇ ½ºÆ®¸²À» °¡Áö±âµµ ÇÑ´Ù. ½ºÆ®¸²ÀÌ ¸î °³³ª µé¾î ÀÖ´ÂÁö´Â Æ÷¸Ë ÄÁÅؽºÆ®ÀÇ nb_streams ¸â¹ö·Î
Á¶»çÇÏ¸ç °¢ ½ºÆ®¸²Àº streams ¸â¹ö¿¡ ÀúÀåµÇ¾î ÀÖ´Ù.
½ºÆ®¸²À» ÀÐÀ¸·Á¸é ¸ÕÀú ¾î¶² ½ºÆ®¸²ÀÌ streams ¹è¿ÀÇ ¾îµð¿¡
µé¾î ÀÖ´ÂÁö ÷ÀÚ¸¦ ã¾Æ¾ß ÇÑ´Ù. Åë»ó 0¹øÀÌ ºñµð¿ÀÀÌ°í 1¹øÀÌ ¿Àµð¿ÀÀÌÁö¸¸ ²À ±×·± °ÍÀº ¾Æ´Ï´Ù. streams ¹è¿À» ¼øȸÇϸç
codecpar->codec_type ¸â¹ö¸¦ ÀÐ¾î º¸¸é ¿Àµð¿À ½ºÆ®¸²ÀÎÁö, ºñµð¿À ½ºÆ®¸²ÀÎÁö ¾Ë ¼ö ÀÖ´Ù.
½ºÆ®¸²¿¡´Â ¿©·¯ °¡Áö º¹ÀâÇÑ Á¤º¸°¡ µé¾î ÀÖÀ¸¸ç ÀÌ Á¤º¸¸¦ Àоî Àç»ýÇÑ´Ù. ³»ºÎ
±¸Á¶°¡ ±²ÀåÈ÷ º¹ÀâÇÏ´Ï ´ÙÀ½ Ç׿¡¼ ÀÚ¼¼È÷ ¿¬±¸ÇØ º¸ÀÚ. ´Ü¼øÈ÷ ½ºÆ®¸²ÀÇ Á¤º¸¸¦ Á¶»ç¸¸ ÇØ º¸°í ½Í´Ù¸é
´ÙÀ½ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
void av_dump_format(AVFormatContext *ic, int index,
const char *url, int is_output)
Æ÷¸Ë ÄÁÅؽºÆ® ÇÚµé°ú ½ºÆ®¸²ÀÇ Ã·ÀÚ, ÆÄÀϸíÀ» Àü´ÞÇÑ´Ù. ¸¶Áö¸· Àμö´Â ÀÔ·Â¿ë ½ºÆ®¸²À̸é 0, Ãâ·Â¿ë ½ºÆ®¸²À̸é 1ÀÌ´Ù. Àç»ýÇÒ ¶§´Â ½ºÆ®¸²¿¡¼ Á¤º¸¸¦ ÀÐÀ¸¹Ç·Î ÀԷ¿ëÀ̸ç ÀÎÄÚµùÇÒ
¶§´Â Ãâ·Â¿ëÀÌ´Ù. ºñµð¿À, ¿Àµð¿À ½ºÆ®¸²À» ã¾Æ Á¤º¸¸¦ Ãâ·ÂÇØ
º¸ÀÚ.
AVFormatContext* fmtCtx;
int vidx = -1, aidx = -1;
int main(void) {
int
ret = avformat_open_input(&fmtCtx, "c:\\mpstudy\\fire.avi", NULL,
NULL);
if
(ret != 0) { return -1; }
avformat_find_stream_info(fmtCtx,
NULL);
for
(unsigned i = 0; i < fmtCtx->nb_streams; i++) {
if
(fmtCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
vidx
= i;
}
if
(fmtCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
aidx
= i;
}
}
printf("video
= %d¹ø, audio = %d¹ø\n\n",
vidx, aidx);
av_dump_format(fmtCtx,
vidx, "c:\\mpstudy\\fire.avi", 0);
avformat_close_input(&fmtCtx);
return
0;
}
video = 0¹ø, audio = 1¹ø
Input #0, avi, from 'c:\mpstudy\fire.avi':
Metadata:
album
: NV CS 103
encoder
: Lavf58.20.100
Duration: 00:00:10.18, start: 0.000000, bitrate: 1074 kb/s
Stream #0:0: Video: mpeg4 (Simple Profile) (FMP4 / 0x34504D46), yuv420p,
640x480 [SAR 1:1 DAR 4:3], 1053 kb/s, 29.97 fps, 29.97 tbr, 29.97 tbn, 30k tbc
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 8000 Hz, mono, fltp, 8
kb/s
Æ÷¸Ë ÄÁÅؽºÆ®¸¦ ¿¬ÈÄ nb_streams±îÁö
·çÇÁ¸¦ µ¹¸ç °¢ ½ºÆ®¸²ÀÇ Å¸ÀÔÀ» Á¶»çÇÑ´Ù. ºñµð¿ÀÀ̸é vidx¿¡
÷ÀÚ¸¦ ´ëÀÔÇÏ°í ¿Àµð¿ÀÀ̸é aidx¿¡ ÷ÀÚ¸¦ ´ëÀÔÇÏ¿© µÎ ½ºÆ®¸²À» ã´Â´Ù. Åë»ó ºñµð¿À 0¹ø, ¿Àµð¿À 1¹øÀÌ´Ù.
°Ë»öÇÑ ½ºÆ®¸²¿¡ ´ëÇØ Á¶»çÇÏ¸é ¾ÆÁÖ º¹ÀâÇÑ Á¤º¸°¡ Ãâ·ÂµÇ´Âµ¥
ºñµð¿À¸¸ Á¶»çÇصµ °ü·Ã ¿Àµð¿À Á¤º¸±îÁö °°ÀÌ ³ª¿Â´Ù. ºñµð¿À ±æÀÌ´Â
10.18ÃÊÀÌ°í mpeg4 ÄÚµ¦À¸·Î ¾ÐÃàµÇ¾î ÀÖÀ¸¸ç »ö»ó Æ÷¸ËÀº yuv420pÀÌ°í Å©±â´Â 640 * 480ÀÌ´Ù. ¿Àµð¿À´Â mp3 Æ÷¸ËÀ̸ç 8K ¸ð³ëÀÌ´Ù.
ÇÑ Å¸ÀÔ¿¡ ´ëÇØ ¿©·¯ °³ÀÇ ½ºÆ®¸²ÀÌ ÀÖ´Â °æ¿ì ¾î¶² ½ºÆ®¸²ÀÌ
ÃÖÀûÀÎÁö ã¾Æ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î À½¼ºÀÌ Çѱ¹¾î¿Í ¿µ¾î µÎ °³·Î ³ìÀ½µÇ¾î ÀÖÀ¸¸é ½ÃûÀÚ¿¡ µû¶ó ¸Â´Â
À½¼ºÀ» °ñ¶ó Áà¾ß ÇÑ´Ù. ÀÌ ÀÛ¾÷À» Á÷Á¢ Çϱ⠱ÍÂúÀ¸¸é ¼øȸÇÒ ÇÊ¿ä ¾øÀÌ ´ÙÀ½ ÇÔ¼ö·Î ÃÖÀû ½ºÆ®¸²À»
ã´Â´Ù.
int av_find_best_stream (AVFormatContext
*ic,enum AVMediaType type,int wanted_stream_nb, int related_stream, AVCodec **
decoder_ret, int flags)
ÇÚµé°ú ½ºÆ®¸² Á¾·ù, ¿øÇÏ´Â
½ºÆ®¸² ¹øÈ£, °ü·Ã ½ºÆ®¸², ÄÚµ¦À» µ¹·Á ¹ÞÀ» º¯¼ö µîÀ»
ÁöÁ¤ÇÑ´Ù. ´ëºÎºÐ -1À̳ª
NULLÀ» ÁöÁ¤ÇÏ¸é µÈ´Ù. À§ ¿¹Á¦ÀÇ ·çÇÁ¸¦ ´ÙÀ½ ÄÚµå·Î ´ëüÇصµ Àß µ¿ÀÛÇÑ´Ù.
vidx =
av_find_best_stream(pCtx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);
aidx = av_find_best_stream(pCtx,
AVMEDIA_TYPE_AUDIO, -1, vidx, NULL, 0);
ºñµð¿À ½ºÆ®¸²À» ¸ÕÀú ã°í ÀÌ ½ºÆ®¸²°ú °ü·ÃµÈ ¿Àµð¿À
½ºÆ®¸²À» ã´Â´Ù. ½ºÆ®¸²ÀÌ ¾ÆÁÖ ¸¹Àº µ¿¿µ»óÀº Á÷Á¢ °Ë»öÇϰųª »ç¿ëÀÚ¿¡°Ô ¼±ÅÃÇ϶ó°í Çؾ߰ÚÁö¸¸ ´ëºÎºÐÀÇ
°æ¿ì ¼øȸÇÏ¸é¼ Ã£À¸³ª ÃÖÀû°ªÀ» ãÀ¸³ª °°Àº °á°ú°¡ ³ª¿Â´Ù.