随笔分类 - FFmpeg-学习记录
摘要:最直接的区别就是av_freep()会在av_free()的基础上,把传入的指针再置为NULL。 FFmpeg源代码: av_free() void av_free(void *ptr) { #if CONFIG_MEMALIGN_HACK if (ptr) { int v= ((char *)pt
阅读全文
摘要:错误原因: 调用 int av_read_frame(AVFormatContext *s, AVPacket *pkt) 函数 时,将会读取一帧数据并填充到AVPacket里面,但是读取的这帧数据可能是视频也可能是音频,也可能是字幕,具体是什么类型可以通过 AVPacket对象的 stream_i
阅读全文
摘要:一. 说明 AVAudioFifo是FFmpeg提供的一个先入先出的音频缓冲队列。主要要以下几个特点: 操作在样本级别而不是字节级别。 支持多通道的格式,不管是planar还是packed类型。 当写入一个已满的buffer时会自动重新分配内存。 二. 主要函数 av_audio_fifo_allo
阅读全文
摘要:EGL 用它开发需要做哪些事情。 DIsplay 与原生窗口建立链接。EGL在Android中可以用java调,也可以用C++调。 EGLDisplay eglGetDisplay // 获取原生窗口的链接 EGLBoolean eglInitlize // 再进行窗口的初始化。 Surface配置
阅读全文
摘要:一.包含头文件和库文件 CMakeLists 代码 二.示例代码
阅读全文
摘要:一.包含头文件和库文件 这里采用的是NDK中的ANativeWindow来完成视频的播放,因为需要添加相关的库和头文件。 CMakeLists 添加头文件 二.示例代码
阅读全文
摘要:一.包含头文件和库文件 修改CMakeLists 更新target_link_libraries 在代码中包含头文件 #include <libswresample/swresample.h> 二.相关函数说明 a) SwrContext *swr_alloc(void); // 分配重采样的上下文
阅读全文
摘要:一.包含头文件和库文件 像素格式的相关函数包含在 libswscale.so 库中,CMakeLists需要做下列改动: target_link_libraries 同时在代码中包含头文件 #include <libswscale/swscale.h> 二. 相关函数说明 a) sws_getCon
阅读全文
摘要:一.AVFrame 用来存放解码后的数据。 【相关函数】 AVFrame *frame = av_frame_alloc(); // 空间分配,分配一个空间并初始化。 void av_frame_free(AVFrame **frame); // 空间释放。两种释放方式,一种是将引用计数-1, in
阅读全文
摘要:一.avcodec_find_decoder 获取解码器。在使用之前必须保证所用到的解码器已经注册,最简单的就是调用avcodec_register_all() 函数,就像之前注册解封装器的时候,也要注册一下。。 AVCodec *avcodec_find_decoder(enum AVCodecI
阅读全文
摘要:一.av_read_frame() 该函数用于读取具体的音/视频帧数据 参数说明: AVFormatContext *s // 文件格式上下文 AVPacket *pkt // 这个值不能传NULL,必须是一个空间, // 返回值:return 0 is OK, <0 on error or end
阅读全文
摘要:也可以通过av_find_best_stream()函数来获取流的索引: 例:
阅读全文
摘要:一.AVStream AVCodecContext *codec // 已过时,使用另一个 codecpar 结构体代替。 AVRational time_base // 时间基数。 int64_t duration // 总时长。流的总时长,该参数不可靠。 AVRational avg_frame
阅读全文
摘要:该函数主要用于获取视频流信息。 在一些格式当中没有头部信息,如flv格式,h264格式,这个时候调用avformat_open_input()在打开文件之后就没有参数,也就无法获取到里面的信息。这个时候就可以调用此函数,因为它会试着去探测文件的格式,但是如果格式当中没有头部信息,那么它只能获取到编码
阅读全文
摘要:AVIOContext *pb IO Context,。自定义一些读写格式或者从内存当中读时用到此成员变量。 char filename[1024]; 文件名。它会把打开的文件名存下来(经常会用到断开重连的操作) unsigned int nb_streams 流的数量。 AVStream **st
阅读全文
摘要:一. 解封装 pts 是显示的时间 dts是解码的时间, 这个时间是用来做同步。 AVFormatContext: 封装的上下文 AVStream : 存放的是音频流或视频流的参数信息 AVPacket: 针对于具体的解封装完后的一个一个的数据包。 av_read_frame() 用于读取一个AVP
阅读全文
摘要:一.新建Android Studio项目 注意点: 1.在“Create Android Project”栏目时,须勾选“Include C++ support” 复选框; 2.在“Customize C++ Support 栏目”时,C++ Standard 选择下拉列表中的“C++11”。 二.
阅读全文