自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 511

原创 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 388

转载 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 1521

原创 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 1698

原创 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 4286 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 4669

原创 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 7285

转载 AVOption

本文继续上篇文章《FFmpeg源代码分析:结构体成员管理系统-AVClass》中的内容,记录FFmpeg中和AVOption相关的源代码。AVOption用于在FFmpeg中描述结构体中的成员变量。一个AVOption可以包含名称,简短的帮助信息,取值等等。上篇文章简单回顾上篇文章中概括了AVClass,AVOption和目标结构体之间的关系。以AVFormatContex

2017-09-06 09:25:43 2423

转载 ts流格式解析

一 从TS流开始        数字电视机顶盒接收到的是一段段的码流,我们称之为TS(Transport Stream,传输流),每个TS流都携带一些信息,如Video、Audio以及我们需要学习的PAT、PMT等信息。因此,我们首先需要了解TS流是什么,以及TS流是怎样形成、有着怎样的结构。(一) TS流、PS流、PES流和ES流都是什么?       ES流(Eleme

2017-09-05 16:45:23 2433 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 3819

原创 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 5139

原创 av_read_frame解析

ffmpeg中的av_read_frame()的作用是读取码流中的音频若干帧或者视频一帧。例如,解码视频的时候,每解码一个视频帧,需要先调用 av_read_frame()获得一帧视频的压缩数据,然后才能对该数据进行解码(例如H.264中一帧压缩数据通常对应一个NAL)。   通过av_read_packet(***),读取一个包,需要说明的是此函数必须是包含整数帧的,不存在半帧的情况,以ts

2017-08-31 10:34:33 2369 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 3576

原创 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 501

翻译 解码相关函数注解

分组包含属于单个基本流的一个或多个编码帧。 在lavf API中,此过程由用于打开文件的avformat_open_input()函数表示,av_read_frame()用于读取单个数据包,最后是avformat_close_input(),该文件执行清理。一、数据结构struct  AVInputFormat{const

2017-08-29 16:13:02 389

转载 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 1381

原创 avformat_open_input函数分析

今天来对avformat_open_input这个函数进行分析,主要参考网上大牛们的博客,节省了很多时间,特记录下来,以免忘记 函数的结构如下: avformat_open_input定义在libavformat/utils.c中://参数ps包含一切媒体相关的上下文结构,有它就有了一切,本函数如果打开媒体成功,//会返回一个AVFormatContext的实例.//参数filename

2017-08-28 16:58:33 1073

原创 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 4890

原创 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 631

原创 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 1331

转载 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 283

转载 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 204

转载 宏定义 #define 和常量 const 的区别

sunyw  [email protected]   参考地址宏定义 #define 和常量 const 的区别类型和安全检查不同宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查编译器处理不同宏定义是一个"编译时"概念,在预处理阶段展开

2017-07-10 17:28:42 396

转载 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 331

转载 音视频封装格式、编码格式知识

音视频封装格式、编码格式知识(自己整理了一下, 内容来源网络 !!)常见的AVI、RMVB、MKV、ASF、WMV、MP4、3GP、FLV等文件其实只能算是一种封装标准。一个完整的视频文件是由音频和视频2部分组成的。H264、Xvid等就是视频编码格式,MP3、AAC等就是音频编码格式。例如:将一个Xvid视频编码文件和一个MP3音频编码文件按AVI封装标准封装以后

2017-06-28 17:43:19 367

转载 基于FFmpeg的视音频分离器

http://blog.csdn.net/leixiaohua1020/article/details/39802819 本文记录一个基于FFmpeg的视音频分离器,视音频分离器(Demuxer)即是将封装格式数据(例如MKV)中的视频压缩数据(例如H.264)和音频压缩数据(例如AAC)分离开。如图所示。在这个过程中并不涉及到编码和解码。本文只提取音频压缩数据。 本文记录的程序可以将

2017-06-16 16:59:40 432

转载 音频帧的概念

http://blog.chinaunix.NET/uid-26000296-id-3446714.html正常人听觉的频率范围大约在20Hz~20kHz之间。采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数。根据奈奎斯特采样理论,为了保证声音不失真,采样频率应该在40kHz左右。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、1

2017-06-14 19:41:08 2295 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 5751

转载 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 474 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 445

转载 学习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 638

转载 ffmpeg 新老接口问题及对照集锦

fmpeg源码包里面有个apichangs文档,里面有各种接口改变的记录,如果你发现接口不能用了,可以去搜索那个文档,可以找到对应的新接口,然后到新接口对应的头文件中找到说明文字网上很多关于ffmpeg (libav)的资料都是N年以前的,而事实上ffmpeg数年来一直在“以时俱进”,因此无论是一些新手,或者号称为老手的人,有时候难免出头痛。。。。。。为了解决大家的

2017-06-01 16:37:22 690

转载 代码学习,将视频文件处理为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 782

转载 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 4865 1

转载 pkg-config的用法

学习ffmpeg的过程中,编译程序时经常找不到头文件和库文件路径。pkg-config能根据软件安装时软件的.pc配置文件路径找到相应的头文件路径和库文件路径。不用我们自己指定路径。pkg-configpkg-config程序是干什么用的?简单的说就是向用户向程序提供相应库的路径、版本号等信息的程序。譬如说我们运行以下命令:pkg-config  查看gcc的CFLAGS参

2017-06-01 15:28:40 3196

转载 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 650

转载 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 498

翻译 ffmpeg基础知识

容器(Container) 容器就是一种文件格式,比如flv,mkv等。包含下面5种流以及文件头信息。 流(Stream) 是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。 帧(Frame) 帧代表一幅静止的图像,分为I帧,P帧,B帧。 编解码器(Codec) 是对视频进行压缩或者解压缩,CODEC =COde (编码) +DECod

2017-05-09 09:32:44 617 1

翻译 centos下ffmpeg环境搭建

原网址:https://trac.ffmpeg.org/wiki/CompilationGuide/Centos 获取依赖关系注意:#表示该命令应以超级用户或root身份执行,并且仅在本指南中为yum命令所需。获取依赖关系 这些是编译所需的,但是可以根据您的喜好在完成以上操作后,则可以将其删除(除了make;默认情况下应该安装,许多事情取决于它)。# yum install autoconf au

2017-05-08 17:56:52 878

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除