- 博客(39)
- 收藏
- 关注
原创 在实际文件中分析h264
分析h264,看了文档只是有了大概的印象,今天通过具体的文件来分析h264格式(使用FFmpeg),首先要了解关于h264的基础知识一、基础知识h264有两种封装,一种是annexb模式,传统模式,有startcode,SPS和PPS是在ES中一种是mp4模式,一般mp4 mkv会有,没有startcode,SPS和PPS以及其它信息被封装在container中,每一个frame前
2017-09-12 15:31:39 540
原创 c语言的一些技巧
1.当调用一个函数时,一些参数我们程序不需要但函数却必须要传一个参数进去,这时候就可以这样做函数原型:int fun(int i)当调用时就可以这么调用fun(&(int){0}),省去了再定义一个变量传进去的步骤。2.int fun(char *mem){return !!mem;}这样可以简单的判断mem是否为NULL并返回int型变量
2017-09-08 14:57:33 417
转载 FFmpeg.c分析
本文将会对FFmpeg.c中的主要函数分别解析。主要参考http://blog.csdn.net/leixiaohua1020/article/details/39760711,并对其中更新的API进行修改。main()main()是FFmpeg的主函数。调用了如下函数av_register_all():注册所有编码器和解码器。show_banner():打印输
2017-09-08 14:38:28 1540
原创 av_write_trailer()
av_write_trailer()用于输出文件尾,它的声明位于libavformat\avformat.h,如下所示。/** * Write the stream trailer to an output media file and free the * file private data. * * May only be called after a successful ca
2017-09-07 15:30:40 1743
原创 av_write_frame()
av_write_frame()用于输出一帧视音频数据,它的声明位于libavformat\avformat.h,如下所示。/** * Write a packet to an output media file. * * This function passes the packet directly to the muxer, without any buffering * or
2017-09-07 14:03:01 4437 1
原创 avformat_write_header()
avformat_write_header(),av_write_frame()以及av_write_trailer()这三个函数一般是配套使用,其中av_write_frame()用于写视频数据,avformat_write_header()用于写视频文件头,而av_write_trailer()用于写视频文件尾。首先来分析avformat_write_header(),函数的声明位于libavf
2017-09-07 10:48:41 4961
原创 avformat_alloc_output_context2()
首先编码的大致流程如下: (1)avformat_alloc_output_context2() (2)avfomat_write_header() (3)avcodec_send_frame()/avcodec_receive_packet() (4)av_write_frame() (5)av_write_trailer() 今天学习avformat_alloc_output_con
2017-09-07 10:26:37 7410
转载 AVOption
本文继续上篇文章《FFmpeg源代码分析:结构体成员管理系统-AVClass》中的内容,记录FFmpeg中和AVOption相关的源代码。AVOption用于在FFmpeg中描述结构体中的成员变量。一个AVOption可以包含名称,简短的帮助信息,取值等等。上篇文章简单回顾上篇文章中概括了AVClass,AVOption和目标结构体之间的关系。以AVFormatContex
2017-09-06 09:25:43 2467
转载 ts流格式解析
一 从TS流开始 数字电视机顶盒接收到的是一段段的码流,我们称之为TS(Transport Stream,传输流),每个TS流都携带一些信息,如Video、Audio以及我们需要学习的PAT、PMT等信息。因此,我们首先需要了解TS流是什么,以及TS流是怎样形成、有着怎样的结构。(一) TS流、PS流、PES流和ES流都是什么? ES流(Eleme
2017-09-05 16:45:23 2484 1
转载 hls中ts流格式简介
1.ts简介 ts流最早应用于数字电视领域,其格式非常复杂包含的配置信息表多大十几个,视频格式主要是mpeg2。苹果公司发明的http live stream流媒体是基于ts文件的,不过他大大简化了传统的ts流,只需要2个最基本的配置表PAT和PMT,再加上音视频内容就可以了,hls流媒体视频编码的主要格式为h264/mpeg4,音频为aac/mp3。2.ts格式
2017-09-04 15:48:53 4108
原创 avcodec_send_packet()/ avcodec_receive_frame()
ffmpeg中解码的API之前的是avcodec_decode_video2()和avcodec_decode_audio4(),现在使用avcodec_send_packet()/ avcodec_receive_frame()来代替原有的接口。API与编码/解码和音频/视频非常相似,工作原理如下:1、像往常一样设置和打开AVCodecContext。
2017-09-02 09:55:14 5260
原创 av_read_frame解析
ffmpeg中的av_read_frame()的作用是读取码流中的音频若干帧或者视频一帧。例如,解码视频的时候,每解码一个视频帧,需要先调用 av_read_frame()获得一帧视频的压缩数据,然后才能对该数据进行解码(例如H.264中一帧压缩数据通常对应一个NAL)。 通过av_read_packet(***),读取一个包,需要说明的是此函数必须是包含整数帧的,不存在半帧的情况,以ts
2017-08-31 10:34:33 2441 1
转载 avformat_alloc_output_context2函数解析
本文简单分析FFmpeg中常用的一个函数:avformat_alloc_output_context2()。在基于FFmpeg的视音频编码器程序中,该函数通常是第一个调用的函数(除了组件注册函数av_register_all())。avformat_alloc_output_context2()函数可以初始化一个用于输出的AVFormatContext结构体。它的声明位于libavformat\a
2017-08-30 14:40:00 3899
原创 ffmpeg中的时间
一、 首先FFmpeg中存在多个时间基(time_base),对应不同的阶段(结构体),每个time_base具体的值不一样,ffmpeg提供函数在各个time_base中进行切换。搞清楚各个time_base的来源,对于阅读ffmpeg的代码很重要。 1、AVstream中(libavformat/avformat.h) typedef struct AVStream { /**
2017-08-30 10:34:47 519
翻译 解码相关函数注解
分组包含属于单个基本流的一个或多个编码帧。 在lavf API中,此过程由用于打开文件的avformat_open_input()函数表示,av_read_frame()用于读取单个数据包,最后是avformat_close_input(),该文件执行清理。一、数据结构struct AVInputFormat{const
2017-08-29 16:13:02 415
转载 avformat_find_stream_info分析
本文简单分析FFmpeg中一个常用的函数:avformat_find_stream_info()。该函数可以读取一部分视音频数据并且获得一些相关的信息。avformat_find_stream_info()的声明位于libavformat\avformat.h,如下所示。 [cpp] view plain copy/** * Read pack
2017-08-29 09:42:11 1416
原创 avformat_open_input函数分析
今天来对avformat_open_input这个函数进行分析,主要参考网上大牛们的博客,节省了很多时间,特记录下来,以免忘记 函数的结构如下: avformat_open_input定义在libavformat/utils.c中://参数ps包含一切媒体相关的上下文结构,有它就有了一切,本函数如果打开媒体成功,//会返回一个AVFormatContext的实例.//参数filename
2017-08-28 16:58:33 1195
原创 FFmpeg错误码相关
今天在学习FFmpeg中错误码相关的内容时,发现FFmpeg的错误码使用的是FOURCC,比以往定义成简单的负整数有意思的多,特记录下来,以免忘记。 首先错误码都定义在libavutil/error.h和error.c中 以av_strerror开始分析:int av_strerror(int errnum, char *errbuf, size_t errbuf_size){ int
2017-08-28 16:19:20 5002
原创 FFmpeg日志相关
今天学习日志相关内容,记录下来,以免忘记,在FFmpeg中使用av_log()来打印日志信息,首先函数定义在libavutil/log.c中void av_log(void* avcl, int level, const char *fmt, ...){ AVClass* avc = avcl ? *(AVClass **) avcl : NULL; va_list vl;
2017-08-28 14:54:15 667
原创 av_register_all函数分析
今天开始对FFmpeg中的主要函数进行学习,特记录下来。 首先av_register_all函数在libavformat/allformats.c中定义void av_register_all(void){ AVOnce control = AV_ONCE_INIT; ff_thread_once(&control, register_all);}函数中调用了register_
2017-08-28 11:11:25 1353
转载 flv格式详解
最近要用到flv,整理了一些flv格式的资料,供参考。 flv文件主要由两部分组成:header和body。1.headerheader部分记录了flv的类型、版本等信息,是flv的开头,一般都差不多,占9bytes。具体格式如下: 文件类型 3 bytes “FLV” 版本 1 byte 一般为0x01 流信息 1 byte 倒数第一位是1表示有视频,倒数第三位是1表示有音频,倒
2017-08-28 09:30:01 296
转载 FLV文件格式解析
最近要用到flv,整理了一些flv格式的资料,供参考。 flv文件主要由两部分组成:header和body。1.headerheader部分记录了flv的类型、版本等信息,是flv的开头,一般都差不多,占9bytes。具体格式如下:文件类型3 bytes“FLV”版本1 byte一般为0x01流信息1 byte倒数
2017-07-28 17:04:51 222
转载 宏定义 #define 和常量 const 的区别
sunyw 934254022@qq.com 参考地址宏定义 #define 和常量 const 的区别类型和安全检查不同宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查编译器处理不同宏定义是一个"编译时"概念,在预处理阶段展开
2017-07-10 17:28:42 428
转载 ffmpeg time_base
ffmpeg time_baseffmpeg存在多个时间基准(time_base),对应不同的阶段(结构体),每个time_base具体的值不一样,ffmpeg提供函数在各个time_base中进行切换。搞清楚各个time_base的来源,对于阅读ffmpeg的代码很重要。一、time_base1、AVStream(libavformat/avformat.h)typede
2017-06-30 16:44:38 355
转载 音视频封装格式、编码格式知识
音视频封装格式、编码格式知识(自己整理了一下, 内容来源网络 !!)常见的AVI、RMVB、MKV、ASF、WMV、MP4、3GP、FLV等文件其实只能算是一种封装标准。一个完整的视频文件是由音频和视频2部分组成的。H264、Xvid等就是视频编码格式,MP3、AAC等就是音频编码格式。例如:将一个Xvid视频编码文件和一个MP3音频编码文件按AVI封装标准封装以后
2017-06-28 17:43:19 391
转载 基于FFmpeg的视音频分离器
http://blog.csdn.net/leixiaohua1020/article/details/39802819 本文记录一个基于FFmpeg的视音频分离器,视音频分离器(Demuxer)即是将封装格式数据(例如MKV)中的视频压缩数据(例如H.264)和音频压缩数据(例如AAC)分离开。如图所示。在这个过程中并不涉及到编码和解码。本文只提取音频压缩数据。 本文记录的程序可以将
2017-06-16 16:59:40 472
转载 音频帧的概念
http://blog.chinaunix.NET/uid-26000296-id-3446714.html正常人听觉的频率范围大约在20Hz~20kHz之间。采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数。根据奈奎斯特采样理论,为了保证声音不失真,采样频率应该在40kHz左右。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、1
2017-06-14 19:41:08 2391 2
原创 利用ffmpeg解析视频文件信息
解析文件的信息主要从AVFormatContext fmt_ctx,*AVCodecContext *codec_ctx,这两个结构体中获取,fmt_ctx 初始化的函数avformat_open_input(),codec_ctx的初始化函数avcodec_alloc_context3() 下面列举一些代码里用到的结构体成员typedef struct AVFormatContext {
2017-06-13 16:39:50 5816
转载 ffmpeg相关开源项目
1.FFmpeg build for android random architectures with example jnihttps://github.com/appunite/AndroidFFmpeg2.ijkplayer - Android/iOS 基于FFMPEG库的播放器http://git.oschina.net/bbcallen/ijkplayergit下载
2017-06-12 10:09:24 499 1
转载 ffmpeg SDK 基本数据结构和函数
学习过程中在网上看到的帖子,有点老了,一些API已经过时,主要是为了学习各数据结构的关系,在学习的过程中对部分了解到的已过时的API进行了更新。 原文地址:http://blog.chinaunix.net/uid-26000296-id-4217128.html 一、重要的数据结构及函数列表 I. 数据结构: (1) AVFormatContext (2) AVOutputFormat
2017-06-07 14:37:32 477
转载 学习ffmpeg官方示例代码transcoding.c遇到的问题
编译测试遇到问题,首先我的编译命令:export PKG_CONFIG_PATH=/home/user/ffmpeg_build/lib/pkgconfig:$PKG_CONFIG_PATH//将库的路径添加到PKG_CONFIG_PATH中gcc transcoding.c -o transcoding `pkg-config --libs --cflags libavcodec libavut
2017-06-05 09:54:55 678
转载 ffmpeg 新老接口问题及对照集锦
fmpeg源码包里面有个apichangs文档,里面有各种接口改变的记录,如果你发现接口不能用了,可以去搜索那个文档,可以找到对应的新接口,然后到新接口对应的头文件中找到说明文字网上很多关于ffmpeg (libav)的资料都是N年以前的,而事实上ffmpeg数年来一直在“以时俱进”,因此无论是一些新手,或者号称为老手的人,有时候难免出头痛。。。。。。为了解决大家的
2017-06-01 16:37:22 707
转载 代码学习,将视频文件处理为ppm文件
本段代码初步体验ffmpeg处理流程#include <inttypes.h> #include <stdint.h> #include <stdio.h>#ifdef __cplusplus extern "C" { #endif#include "libavutil/avutil.h" #include "libavcodec/avcodec.h" #include "l
2017-06-01 16:34:58 802
转载 PPM图像格式(Portable Pixelmap)
参考:Netpbm项目主页: http://sourceforge.NET/projects/netpbmNetpbm wiki: http://en.wikipedia.org/wiki/NetpbmNetpbm format wiki: http://en.wikipedia.org/wiki/Netpbm_formatppm文件格式: http://hi.baidu.com/sunb
2017-06-01 15:55:27 5280 1
转载 pkg-config的用法
学习ffmpeg的过程中,编译程序时经常找不到头文件和库文件路径。pkg-config能根据软件安装时软件的.pc配置文件路径找到相应的头文件路径和库文件路径。不用我们自己指定路径。pkg-configpkg-config程序是干什么用的?简单的说就是向用户向程序提供相应库的路径、版本号等信息的程序。譬如说我们运行以下命令:pkg-config 查看gcc的CFLAGS参
2017-06-01 15:28:40 3427
转载 fatal error C1189: #error : missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS
参考文章:https://ffmpeg.zeranoe.com/forum/viewtopic.php?f=15&t=158fatal error C1189: #error : missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROSfatal error C1189: #error : missing -
2017-06-01 11:14:15 664
转载 ffmpeg基本命令
1.普通格式转换 ffmpeg -i input.avi output.mp4 从选项指定的任意数量的输入“文件”(可以是常规文件,管道,网络流,抓取设备等)读取 -i,并写入任意数量的输出“文件”,由一个简单的输出url。在命令行上发现的任何不能被解释为选项的内容都被认为是输出url。 2. 提取音频 ffmpeg -i input.mp4 -acodec copy -vn output.
2017-05-09 18:01:57 547
翻译 ffmpeg基础知识
容器(Container) 容器就是一种文件格式,比如flv,mkv等。包含下面5种流以及文件头信息。 流(Stream) 是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。 帧(Frame) 帧代表一幅静止的图像,分为I帧,P帧,B帧。 编解码器(Codec) 是对视频进行压缩或者解压缩,CODEC =COde (编码) +DECod
2017-05-09 09:32:44 688 1
翻译 centos下ffmpeg环境搭建
原网址:https://trac.ffmpeg.org/wiki/CompilationGuide/Centos 获取依赖关系注意:#表示该命令应以超级用户或root身份执行,并且仅在本指南中为yum命令所需。获取依赖关系 这些是编译所需的,但是可以根据您的喜好在完成以上操作后,则可以将其删除(除了make;默认情况下应该安装,许多事情取决于它)。# yum install autoconf au
2017-05-08 17:56:52 911
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人