码迷,mamicode.com
首页 > 其他好文 > 详细

ffmpeg一揽子

时间:2016-06-22 18:45:13      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

 为编码帧开辟存储空间
设置帧的一些参数

liveVFrame = av_frame_alloc();
        if (!liveVFrame)
        {
            return -1;
        }
        liveVFrame->format = liveVideoCodecCtx->pix_fmt;
        liveVFrame->width  = liveVideoCodecCtx->width;
        liveVFrame->height = liveVideoCodecCtx->height;

        ret = av_image_alloc(liveVFrame->data, liveVFrame->linesize, liveVFrame->width, liveVFrame->height,
                             liveVideoCodecCtx->pix_fmt, 32);

 在编码前:ret = avcodec_encode_video2(liveVideoCodecCtx, &pkt, liveVFrame, &got_output);

需要填充 liveVFrame->data[0],liveVFrame->data[1],liveVFrame->data[2]; 然后进行编码。

------------------------------------------------------------------------------------------------------------------------------------

FFMPEG打开媒体的的过程开始于avformat_open_input 输入输出结构体AVIOContext的初始化;

输入数据的协议(例如RTMP,或者file)的识别

(通过一套评分机制):1判断文件名的后缀 2读取文件头的数据进行比对;

使用获得最高分的文件协议对应的URLProtocol,通过函数指针的方式,与FFMPEG连接(非专业用词);

剩下的就是调用该URLProtocol的函数进行open,read等操作了

--------------

一共初始化了3个AVFormatContext,其中2个用于输入,1个用于输出。

3个AVFormatContext初始化之后,

通过avcodec_copy_context()函数可以将输入视频/音频的参数拷贝至输出视频/音频的AVCodecContext结构体。

然后分别调用视频输入流和音频输入流的av_read_frame(),

从视频输入流中取出视频的AVPacket,

音频输入流中取出音频的AVPacket,

分别将取出的AVPacket写入到输出文件中即可。

其间用到了一个不太常见的函数av_compare_ts(),是比较时间戳用的。

通过该函数可以决定该写入视频还是音频。

 

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

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():写入文件尾。

--------------------------------------------

以上转自雷神:http://blog.csdn.net/leixiaohua1020/article/details/39802913

ffmpeg一揽子

标签:

原文地址:http://www.cnblogs.com/wainiwann/p/5608038.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!