목차
代码
데이터 베이스 MySQL 튜토리얼 FFmpeg封装格式处理:视音频复用器(muxer)

FFmpeg封装格式处理:视音频复用器(muxer)

Jun 07, 2016 pm 04:05 PM
ffmpeg 다루다 캡슐화 이기다 체재 오디오

打算记录一下基于FFmpeg的封装格式处理方面的例子。包括了视音频分离,复用,封装格式转换。这是第3篇。 本文记录一个基于FFmpeg的视音频复用器(Simplest FFmpeg muxer)。视音频复用器(Muxer)即是将视频压缩数据(例如H.264)和音频压缩数据(例如AAC)合

打算记录一下基于FFmpeg的封装格式处理方面的例子。包括了视音频分离,复用,封装格式转换。这是第3篇。

本文记录一个基于FFmpeg的视音频复用器(Simplest FFmpeg muxer)。视音频复用器(Muxer)即是将视频压缩数据(例如H.264)和音频压缩数据(例如AAC)合并到一个封装格式数据(例如MKV)中去。如图所示。在这个过程中并不涉及到编码和解码。

 

\

本文记录的程序将一个H.264编码的视频码流文件和一个MP3编码的音频码流文件,合成为一个MP4封装格式的文件。
,一共初始化了3个AVFormatContext,其中2个用于输入,1个用于输出。3个AVFormatContext初始化之后,通过avcodec_copy_context()函数可以将输入视频/音频的参数拷贝至输出视频/音频的AVCodecContext结构体。然后分别调用视频输入流和音频输入流的av_read_frame(),从视频输入流中取出视频的AVPacket,音频输入流中取出音频的AVPacket,分别将取出的AVPacket写入到输出文件中即可。其间用到了一个不太常见的函数av_compare_ts(),是比较时间戳用的。通过该函数可以决定该写入视频还是音频。

本文介绍的视音频复用器,输入的视频不一定是H.264裸流文件,音频也不一定是纯音频文件。可以选择两个封装过的视音频文件作为输入。程序会从视频输入文件中“挑”出视频流,音频输入文件中“挑”出音频流,再将“挑选”出来的视音频流复用起来。 PS1:对于某些封装格式(例如MP4/FLV/MKV等)中的H.264,需要用到名称为“h264_mp4toannexb”的bitstream filter。
PS2:对于某些封装格式(例如MP4/FLV/MKV等)中的AAC,需要用到名称为“aac_adtstoasc”的bitstream filter。

简单介绍一下流程中各个重要函数的意义:

avformat_open_input():打开输入文件。
avcodec_copy_context():赋值AVCodecContext的参数。
avformat_alloc_output_context2():初始化输出文件。
avio_open():打开输出文件。
avformat_write_header():写入文件头。
av_compare_ts():比较时间戳,决定写入视频还是写入音频。这个函数相对要少见一些。
av_read_frame():从输入文件读取一个AVPacket。
av_interleaved_write_frame():写入一个AVPacket到输出文件。
av_write_trailer():写入文件尾。

代码

下面贴上代码:
<strong>[cpp]</strong> view plaincopy
로그인 후 복사
  1. /**
    로그인 후 복사
  2. * 最简单的基于FFmpeg的视音频复用器
    로그인 후 복사
  3. * Simplest FFmpeg Muxer
    로그인 후 복사
  4. *
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  5. * 雷霄骅 Lei Xiaohua
    로그인 후 복사
  6. * leixiaohua1020@126.com
    로그인 후 복사
  7. * 中国传媒大学/数字电视技术
    로그인 후 복사
  8. * Communication University of China / Digital TV Technology
    로그인 후 복사
  9. * http://blog.csdn.net/leixiaohua1020
    로그인 후 복사
  10. *
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  11. * 本程序可以将视频码流和音频码流打包到一种封装格式中。
    로그인 후 복사
  12. * 程序中将MP3编码的音频码流和H.264编码(MPEG2TS封装中)的视频码流打包成
    로그인 후 복사
  13. * MP4封装格式的文件。
    로그인 후 복사
  14. * 需要注意的是本程序并不改变视音频的编码格式。
    로그인 후 복사
  15. *
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  16. * This software mux a video bitstream and a audio bitstream
    로그인 후 복사
  17. * together into a file.
    로그인 후 복사
  18. * In this example, it mux a H.264 bitstream (in MPEG2TS) and
    로그인 후 복사
  19. * a MP3 bitstream file together into MP4 format file.
    로그인 후 복사
  20. *
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  21. */
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  22. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  23. #include <stdio.h></stdio.h>
    로그인 후 복사
  24. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  25. extern "C"
    로그인 후 복사
  26. {
    로그인 후 복사
    로그인 후 복사
  27. #include "libavformat/avformat.h"
    로그인 후 복사
  28. };
    로그인 후 복사
  29. /*
    로그인 후 복사
    로그인 후 복사
  30. FIX: H.264 in some container format (FLV, MP4, MKV etc.) need
    로그인 후 복사
  31. "h264_mp4toannexb" bitstream filter (BSF)
    로그인 후 복사
  32. *Add SPS,PPS in front of IDR frame
    로그인 후 복사
  33. *Add start code ("0,0,0,1") in front of NALU
    로그인 후 복사
  34. H.264 in some container (MPEG2TS) don't need this BSF.
    로그인 후 복사
  35. */
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  36. //'1': Use H.264 Bitstream Filter
    로그인 후 복사
  37. #define USE_H264BSF 0
    로그인 후 복사
  38. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  39. /*
    로그인 후 복사
    로그인 후 복사
  40. FIX:AAC in some container format (FLV, MP4, MKV etc.) need
    로그인 후 복사
  41. "aac_adtstoasc" bitstream filter (BSF)
    로그인 후 복사
  42. */
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  43. //'1': Use AAC Bitstream Filter
    로그인 후 복사
  44. #define USE_AACBSF 0
    로그인 후 복사
  45. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  46. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  47. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  48. int main(int argc, char* argv[])
    로그인 후 복사
  49. {
    로그인 후 복사
    로그인 후 복사
  50. AVOutputFormat *ofmt = NULL;
    로그인 후 복사
  51. //输入对应一个AVFormatContext,输出对应一个AVFormatContext
    로그인 후 복사
  52. //(Input AVFormatContext and Output AVFormatContext)
    로그인 후 복사
  53. AVFormatContext *ifmt_ctx_v = NULL, *ifmt_ctx_a = NULL,*ofmt_ctx = NULL;
    로그인 후 복사
  54. AVPacket pkt;
    로그인 후 복사
  55. int ret, i;
    로그인 후 복사
  56. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  57. char *in_filename_v = "cuc_ieschool.ts";//输入文件名(Input file URL)
    로그인 후 복사
  58. //char *in_filename_v = "cuc_ieschool.h264";
    로그인 후 복사
  59. //char *in_filename_a = "cuc_ieschool.mp3";
    로그인 후 복사
  60. //char *in_filename_a = "gowest.m4a";
    로그인 후 복사
  61. //char *in_filename_a = "gowest.aac";
    로그인 후 복사
  62. char *in_filename_a = "huoyuanjia.mp3";
    로그인 후 복사
  63. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  64. char *out_filename = "cuc_ieschool.mp4";//输出文件名(Output file URL)
    로그인 후 복사
  65. av_register_all();
    로그인 후 복사
  66. //输入(Input)
    로그인 후 복사
  67. if ((ret = avformat_open_input(&ifmt_ctx_v, in_filename_v, 0, 0)) 
    
    로그인 후 복사
  68. printf( "Could not open input file.");
    로그인 후 복사
    로그인 후 복사
  69. goto end;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  70. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  71. if ((ret = avformat_find_stream_info(ifmt_ctx_v, 0)) 
    
    로그인 후 복사
  72. printf( "Failed to retrieve input stream information");
    로그인 후 복사
    로그인 후 복사
  73. goto end;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  74. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  75. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  76. if ((ret = avformat_open_input(&ifmt_ctx_a, in_filename_a, 0, 0)) 
    
    로그인 후 복사
  77. printf( "Could not open input file.");
    로그인 후 복사
    로그인 후 복사
  78. goto end;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  79. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  80. if ((ret = avformat_find_stream_info(ifmt_ctx_a, 0)) 
    
    로그인 후 복사
  81. printf( "Failed to retrieve input stream information");
    로그인 후 복사
    로그인 후 복사
  82. goto end;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  83. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  84. printf("Input Information=====================\n");
    로그인 후 복사
  85. av_dump_format(ifmt_ctx_v, 0, in_filename_v, 0);
    로그인 후 복사
  86. av_dump_format(ifmt_ctx_a, 0, in_filename_a, 0);
    로그인 후 복사
  87. printf("======================================\n");
    로그인 후 복사
    로그인 후 복사
  88. //输出(Output)
    로그인 후 복사
  89. avformat_alloc_output_context2(&ofmt_ctx, NULL, NULL, out_filename);
    로그인 후 복사
  90. if (!ofmt_ctx) {
    로그인 후 복사
  91. printf( "Could not create output context\n");
    로그인 후 복사
  92. ret = AVERROR_UNKNOWN;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  93. goto end;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  94. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  95. ofmt = ofmt_ctx->oformat;
    로그인 후 복사
  96. int videoindex_v=-1,videoindex_out=-1;
    로그인 후 복사
  97. for (i = 0; i nb_streams; i++) {
    로그인 후 복사
    로그인 후 복사
  98. //根据输入流创建输出流(Create output AVStream according to input AVStream)
    로그인 후 복사
    로그인 후 복사
  99. if(ifmt_ctx_v->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO){
    로그인 후 복사
  100. videoindex_v=i;
    로그인 후 복사
  101. AVStream *in_stream = ifmt_ctx_v->streams[i];
    로그인 후 복사
  102. AVStream *out_stream = avformat_new_stream(ofmt_ctx, in_stream->codec->codec);
    로그인 후 복사
    로그인 후 복사
  103. if (!out_stream) {
    로그인 후 복사
    로그인 후 복사
  104. printf( "Failed allocating output stream\n");
    로그인 후 복사
    로그인 후 복사
  105. ret = AVERROR_UNKNOWN;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  106. goto end;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  107. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  108. videoindex_out=out_stream->index;
    로그인 후 복사
  109. //复制AVCodecContext的设置(Copy the settings of AVCodecContext)
    로그인 후 복사
    로그인 후 복사
  110. if (avcodec_copy_context(out_stream->codec, in_stream->codec) 
    
    로그인 후 복사
    로그인 후 복사
  111. printf( "Failed to copy context from input to output stream codec context\n");
    로그인 후 복사
    로그인 후 복사
  112. goto end;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  113. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  114. out_stream->codec->codec_tag = 0;
    로그인 후 복사
    로그인 후 복사
  115. if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
    로그인 후 복사
    로그인 후 복사
  116. out_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
    로그인 후 복사
    로그인 후 복사
  117. break;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  118. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  119. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  120. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  121. int audioindex_a=-1,audioindex_out=-1;
    로그인 후 복사
  122. for (i = 0; i nb_streams; i++) {
    로그인 후 복사
    로그인 후 복사
  123. //根据输入流创建输出流(Create output AVStream according to input AVStream)
    로그인 후 복사
    로그인 후 복사
  124. if(ifmt_ctx_a->streams[i]->codec->codec_type==AVMEDIA_TYPE_AUDIO){
    로그인 후 복사
  125. audioindex_a=i;
    로그인 후 복사
  126. AVStream *in_stream = ifmt_ctx_a->streams[i];
    로그인 후 복사
  127. AVStream *out_stream = avformat_new_stream(ofmt_ctx, in_stream->codec->codec);
    로그인 후 복사
    로그인 후 복사
  128. if (!out_stream) {
    로그인 후 복사
    로그인 후 복사
  129. printf( "Failed allocating output stream\n");
    로그인 후 복사
    로그인 후 복사
  130. ret = AVERROR_UNKNOWN;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  131. goto end;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  132. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  133. audioindex_out=out_stream->index;
    로그인 후 복사
  134. //复制AVCodecContext的设置(Copy the settings of AVCodecContext)
    로그인 후 복사
    로그인 후 복사
  135. if (avcodec_copy_context(out_stream->codec, in_stream->codec) 
    
    로그인 후 복사
    로그인 후 복사
  136. printf( "Failed to copy context from input to output stream codec context\n");
    로그인 후 복사
    로그인 후 복사
  137. goto end;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  138. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  139. out_stream->codec->codec_tag = 0;
    로그인 후 복사
    로그인 후 복사
  140. if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
    로그인 후 복사
    로그인 후 복사
  141. out_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
    로그인 후 복사
    로그인 후 복사
  142. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  143. break;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  144. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  145. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  146. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  147. //输出一下格式------------------
    로그인 후 복사
  148. printf("Output Information====================\n");
    로그인 후 복사
  149. av_dump_format(ofmt_ctx, 0, out_filename, 1);
    로그인 후 복사
  150. printf("======================================\n");
    로그인 후 복사
    로그인 후 복사
  151. //打开输出文件(Open output file)
    로그인 후 복사
  152. if (!(ofmt->flags & AVFMT_NOFILE)) {
    로그인 후 복사
  153. if (avio_open(&ofmt_ctx->pb, out_filename, AVIO_FLAG_WRITE) 
    
    로그인 후 복사
  154. printf( "Could not open output file '%s'", out_filename);
    로그인 후 복사
  155. goto end;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  156. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  157. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  158. //写文件头(Write file header)
    로그인 후 복사
  159. if (avformat_write_header(ofmt_ctx, NULL) 
    
    로그인 후 복사
  160. printf( "Error occurred when opening output file\n");
    로그인 후 복사
  161. goto end;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  162. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  163. int frame_index=0;
    로그인 후 복사
  164. int64_t cur_pts_v=0,cur_pts_a=0;
    로그인 후 복사
  165. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  166. //FIX
    로그인 후 복사
    로그인 후 복사
  167. #if USE_H264BSF
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  168. AVBitStreamFilterContext* h264bsfc = av_bitstream_filter_init("h264_mp4toannexb");
    로그인 후 복사
  169. #endif
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  170. #if USE_AACBSF
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  171. AVBitStreamFilterContext* aacbsfc = av_bitstream_filter_init("aac_adtstoasc");
    로그인 후 복사
  172. #endif
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  173. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  174. while (1) {
    로그인 후 복사
  175. AVFormatContext *ifmt_ctx;
    로그인 후 복사
  176. int stream_index=0;
    로그인 후 복사
  177. AVStream *in_stream, *out_stream;
    로그인 후 복사
  178. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  179. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  180. //获取一个AVPacket(Get an AVPacket)
    로그인 후 복사
  181. if(av_compare_ts(cur_pts_v,ifmt_ctx_v->streams[videoindex_v]->time_base,cur_pts_a,ifmt_ctx_a->streams[audioindex_a]->time_base) 
    
    로그인 후 복사
  182. ifmt_ctx=ifmt_ctx_v;
    로그인 후 복사
  183. stream_index=videoindex_out;
    로그인 후 복사
  184. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  185. if(av_read_frame(ifmt_ctx, &pkt) >= 0){
    로그인 후 복사
    로그인 후 복사
  186. do{
    로그인 후 복사
    로그인 후 복사
  187. if(pkt.stream_index==videoindex_v){
    로그인 후 복사
  188. cur_pts_v=pkt.pts;
    로그인 후 복사
  189. break;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  190. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  191. }while(av_read_frame(ifmt_ctx, &pkt) >= 0);
    로그인 후 복사
    로그인 후 복사
  192. }else{
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  193. break;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  194. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  195. }else{
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  196. ifmt_ctx=ifmt_ctx_a;
    로그인 후 복사
  197. stream_index=audioindex_out;
    로그인 후 복사
  198. if(av_read_frame(ifmt_ctx, &pkt) >= 0){
    로그인 후 복사
    로그인 후 복사
  199. do{
    로그인 후 복사
    로그인 후 복사
  200. if(pkt.stream_index==audioindex_a){
    로그인 후 복사
  201. cur_pts_a=pkt.pts;
    로그인 후 복사
  202. break;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  203. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  204. }while(av_read_frame(ifmt_ctx, &pkt) >= 0);
    로그인 후 복사
    로그인 후 복사
  205. }else{
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  206. break;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  207. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  208. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  209. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  210. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  211. in_stream = ifmt_ctx->streams[pkt.stream_index];
    로그인 후 복사
  212. out_stream = ofmt_ctx->streams[stream_index];
    로그인 후 복사
  213. //FIX
    로그인 후 복사
    로그인 후 복사
  214. #if USE_H264BSF
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  215. av_bitstream_filter_filter(h264bsfc, in_stream->codec, NULL, &pkt.data, &pkt.size, pkt.data, pkt.size, 0);
    로그인 후 복사
  216. #endif
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  217. #if USE_AACBSF
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  218. av_bitstream_filter_filter(aacbsfc, in_stream->codec, NULL, &pkt.data, &pkt.size, pkt.data, pkt.size, 0);
    로그인 후 복사
  219. #endif
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  220. //FIX:No PTS (Example: Raw H.264)
    로그인 후 복사
  221. //Simple Write PTS
    로그인 후 복사
  222. if(pkt.pts==AV_NOPTS_VALUE){
    로그인 후 복사
  223. //Write PTS
    로그인 후 복사
  224. AVRational time_base1=in_stream->time_base;
    로그인 후 복사
  225. //Duration between 2 frames (us)
    로그인 후 복사
  226. int64_t calc_duration=(double)AV_TIME_BASE/av_q2d(in_stream->r_frame_rate);
    로그인 후 복사
  227. //Parameters
    로그인 후 복사
  228. pkt.pts=(double)(frame_index*calc_duration)/(double)(av_q2d(time_base1)*AV_TIME_BASE);
    로그인 후 복사
  229. pkt.dts=pkt.pts;
    로그인 후 복사
  230. pkt.duration=(double)calc_duration/(double)(av_q2d(time_base1)*AV_TIME_BASE);
    로그인 후 복사
  231. frame_index++;
    로그인 후 복사
  232. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  233. /* copy packet */
    로그인 후 복사
  234. //转换PTS/DTS(Convert PTS/DTS)
    로그인 후 복사
  235. pkt.pts = av_rescale_q_rnd(pkt.pts, in_stream->time_base, out_stream->time_base, (AVRounding)(AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX));
    로그인 후 복사
  236. pkt.dts = av_rescale_q_rnd(pkt.dts, in_stream->time_base, out_stream->time_base, (AVRounding)(AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX));
    로그인 후 복사
  237. pkt.duration = av_rescale_q(pkt.duration, in_stream->time_base, out_stream->time_base);
    로그인 후 복사
  238. pkt.pos = -1;
    로그인 후 복사
  239. pkt.stream_index=stream_index;
    로그인 후 복사
  240. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  241. printf("Write 1 Packet. size:%5d\tpts:%8d\n",pkt.size,pkt.pts);
    로그인 후 복사
  242. //写入(Write)
    로그인 후 복사
  243. if (av_interleaved_write_frame(ofmt_ctx, &pkt) 
    
    로그인 후 복사
  244. printf( "Error muxing packet\n");
    로그인 후 복사
  245. break;
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  246. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  247. av_free_packet(&pkt);
    로그인 후 복사
  248. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  249. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  250. //写文件尾(Write file trailer)
    로그인 후 복사
  251. av_write_trailer(ofmt_ctx);
    로그인 후 복사
  252. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  253. #if USE_H264BSF
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  254. av_bitstream_filter_close(h264bsfc);
    로그인 후 복사
  255. #endif
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  256. #if USE_AACBSF
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  257. av_bitstream_filter_close(aacbsfc);
    로그인 후 복사
  258. #endif
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  259. 로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  260. end:
    로그인 후 복사
  261. avformat_close_input(&ifmt_ctx_v);
    로그인 후 복사
  262. avformat_close_input(&ifmt_ctx_a);
    로그인 후 복사
  263. /* close output */
    로그인 후 복사
  264. if (ofmt_ctx && !(ofmt->flags & AVFMT_NOFILE))
    로그인 후 복사
  265. avio_close(ofmt_ctx->pb);
    로그인 후 복사
  266. avformat_free_context(ofmt_ctx);
    로그인 후 복사
  267. if (ret 
    
    로그인 후 복사
  268. printf( "Error occurred.\n");
    로그인 후 복사
  269. return -1;
    로그인 후 복사
  270. }
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  271. return 0;
    로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Win11에서 오디오 밸런스를 조정하는 방법은 무엇입니까? (Win11은 볼륨의 왼쪽 및 오른쪽 채널을 조정합니다) Win11에서 오디오 밸런스를 조정하는 방법은 무엇입니까? (Win11은 볼륨의 왼쪽 및 오른쪽 채널을 조정합니다) Feb 11, 2024 pm 05:57 PM

Win11 컴퓨터에서 음악을 듣거나 영화를 볼 때 스피커나 헤드폰의 소리가 불균형한 경우 사용자는 필요에 따라 밸런스 수준을 수동으로 조정할 수 있습니다. 그럼 어떻게 조정해야 할까요? 이 문제에 대응하여 편집자는 모든 사람에게 도움이 되기를 바라며 자세한 작업 튜토리얼을 가져왔습니다. Windows 11에서 왼쪽 및 오른쪽 오디오 채널의 균형을 맞추는 방법은 무엇입니까? 방법 1: 설정 앱을 사용하여 키를 탭하고 설정을 클릭합니다. Windows에서는 시스템을 클릭하고 사운드를 선택합니다. 추가 사운드 설정을 선택하세요. 스피커/헤드폰을 클릭하고 속성을 선택합니다. 수준 탭으로 이동하여 잔액을 클릭합니다. "왼쪽"을 확인하고

Bose Soundbar Ultra 출시 경험: 홈시어터를 상자에서 꺼내자마자 바로 사용할 수 있나요? Bose Soundbar Ultra 출시 경험: 홈시어터를 상자에서 꺼내자마자 바로 사용할 수 있나요? Feb 06, 2024 pm 05:30 PM

제가 기억하는 한, 저는 집에 대형 플로어 스탠딩 스피커 한 쌍을 가지고 있었습니다. 저는 TV가 완전한 사운드 시스템을 갖추고 있어야만 TV라고 부를 수 있다고 항상 믿어왔습니다. 하지만 처음 일을 시작했을 때는 전문적인 홈 오디오를 구입할 여유가 없었습니다. 제품 포지셔닝을 문의하고 이해한 결과 사운드바 카테고리가 음질, 크기 및 가격 측면에서 나에게 매우 적합하다는 것을 알았습니다. 그래서 사운드바로 가기로 결정했습니다. 신중한 선택 끝에 2024년 초 보스가 출시한 파노라믹 사운드바 제품, 보스 홈 엔터테인먼트 스피커 울트라를 선택했습니다. (사진 출처: Lei Technology 촬영) 일반적으로 "원래의" Dolby Atmos 효과를 경험하려면 측정되고 보정된 서라운드 사운드 + 천장을 집에 설치해야 합니다.

CPU를 너무 많이 점유하는 WIN10 서비스 호스트의 동작 과정 CPU를 너무 많이 점유하는 WIN10 서비스 호스트의 동작 과정 Mar 27, 2024 pm 02:41 PM

1. 먼저 작업 표시줄의 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 [작업 관리자] 옵션을 선택하거나, 시작 로고를 마우스 오른쪽 버튼으로 클릭한 후 [작업 관리자] 옵션을 선택합니다. 2. 열린 작업 관리자 인터페이스에서 맨 오른쪽에 있는 [서비스] 탭을 클릭합니다. 3. 열린 [서비스] 탭에서 아래의 [서비스 열기] 옵션을 클릭하세요. 4. 열리는 [서비스] 창에서 [InternetConnectionSharing(ICS)] 서비스를 마우스 오른쪽 버튼으로 클릭한 후 [속성] 옵션을 선택하세요. 5. 열리는 속성 창에서 [연결 프로그램]을 [사용 안 함]으로 변경하고 [적용]을 클릭한 후 [확인]을 클릭하세요. 6. 시작 로고를 클릭한 후 종료 버튼을 클릭하고 [다시 시작]을 선택한 후 컴퓨터를 다시 시작합니다.

qq 사서함 형식을 작성하는 방법 qq 사서함 형식은 무엇입니까? qq 사서함 형식을 작성하는 방법 qq 사서함 형식은 무엇입니까? Feb 22, 2024 pm 03:40 PM

QQ 이메일: QQ number@qq.com, 영어 QQ 이메일: 영어 또는 number@qq.com, foxmail 이메일 계정: 자신의 account@foxmail.com 설정, 휴대폰 이메일 계정: 휴대폰 number@qq.com. 튜토리얼 적용 모델: iPhone13 시스템: IOS15.3 버전: QQ Mailbox 6.3.3 분석 1QQ 사서함에는 일반적으로 사용되는 네 가지 형식이 있습니다. QQ 사서함: QQ number@qq.com, 영어 QQ 사서함: 영어 또는 숫자@qq.com, foxmail 이메일 계정: 자신만의 account@foxmail.com을 설정하세요. 휴대폰 이메일 계정: 휴대폰 번호@qq.com. 보충: qq 메일함이란 무엇입니까? 1 최초의 QQ 메일함은 QQ 사용자 사이에만 있었습니다.

0x00005b3 오류로 인해 Realtek HD 오디오 드라이버 설치에 실패했습니다. 0x00005b3 오류로 인해 Realtek HD 오디오 드라이버 설치에 실패했습니다. Feb 19, 2024 am 10:42 AM

Windows 11/10 PC에서 RealtekHD 오디오 드라이버 오류 오류 코드 0x00005b3이 발생하는 경우 다음 단계를 참조하여 문제를 해결하세요. 문제 해결 및 오류 해결 과정을 안내해 드리겠습니다. 오류 코드 0x00005b3은 오디오 드라이버 설치 문제로 인해 발생할 수 있습니다. 현재 드라이버가 손상되었거나 부분적으로 제거되어 새 드라이버 설치에 영향을 줄 수 있습니다. 이 문제는 디스크 공간이 부족하거나 Windows 버전과 호환되지 않는 오디오 드라이버로 인해 발생할 수도 있습니다. RealtekHD 오디오 드라이버 설치에 실패했습니다! ! [오류 코드: 0x00005B3] Realtek 오디오 드라이버 설치 마법사에 문제가 있는 경우 계속해서 읽어보세요.

PHP에서 특수 문자를 처리하고 작은따옴표를 변환하는 방법을 알아보세요. PHP에서 특수 문자를 처리하고 작은따옴표를 변환하는 방법을 알아보세요. Mar 27, 2024 pm 12:39 PM

PHP 개발 과정에서 특수 문자를 처리하는 것은 일반적인 문제이며, 특히 문자열 처리에서는 특수 문자가 이스케이프되는 경우가 많습니다. 그중에서도 특수 문자를 작은따옴표로 변환하는 것은 상대적으로 일반적인 요구 사항입니다. 왜냐하면 PHP에서는 작은따옴표가 문자열을 래핑하는 일반적인 방법이기 때문입니다. 이 기사에서는 PHP에서 특수 문자 변환 작은따옴표를 처리하는 방법을 설명하고 구체적인 코드 예제를 제공합니다. PHP에서 특수 문자에는 작은따옴표('), 큰따옴표("), 백슬래시() 등이 포함되지만 이에 국한되지는 않습니다.

TrendForce: Nvidia의 Blackwell 플랫폼 제품으로 TSMC의 CoWoS 생산 능력이 올해 150% 증가합니다. TrendForce: Nvidia의 Blackwell 플랫폼 제품으로 TSMC의 CoWoS 생산 능력이 올해 150% 증가합니다. Apr 17, 2024 pm 08:00 PM

4월 17일 이 사이트의 뉴스에 따르면 TrendForce는 최근 Nvidia의 새로운 Blackwell 플랫폼 제품에 대한 수요가 강세를 보이고 있으며, 이로 인해 TSMC의 전체 CoWoS 패키징 생산 능력이 2024년에 150% 이상 증가할 것으로 예상된다는 보고서를 발표했습니다. NVIDIA Blackwell의 새로운 플랫폼 제품에는 B 시리즈 GPU와 NVIDIA 자체 GraceArm CPU를 통합한 GB200 가속기 카드가 포함됩니다. TrendForce는 현재 공급망이 GB200에 대해 매우 낙관적이며, 출하량이 2025년에 100만 개를 초과할 것으로 예상되며 이는 Nvidia 고급 GPU의 40~50%를 차지할 것으로 확인했습니다. 엔비디아는 하반기에 GB200, B100 등의 제품을 출시할 계획이지만, 업스트림 웨이퍼 패키징에는 더욱 복잡한 제품을 채택해야 합니다.

서버에 PHP FFmpeg 확장을 설치하는 방법은 무엇입니까? 서버에 PHP FFmpeg 확장을 설치하는 방법은 무엇입니까? Mar 28, 2024 pm 02:39 PM

서버에 PHPFFmpeg 확장을 설치하는 방법은 무엇입니까? 서버에 PHPFFmpeg 확장을 설치하면 PHP 프로젝트에서 오디오 및 비디오 파일을 처리하고 오디오 및 비디오 파일의 인코딩, 디코딩, 편집 및 처리와 같은 기능을 구현하는 데 도움이 될 수 있습니다. 이 기사에서는 서버에 PHPFFmpeg 확장을 설치하는 방법과 구체적인 코드 예제를 소개합니다. 먼저, PHP와 FFmpeg가 서버에 설치되어 있는지 확인해야 합니다. FFmpeg가 설치되어 있지 않은 경우 아래 단계에 따라 FFmpe를 설치할 수 있습니다.

See all articles