自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 资源 (4)
  • 收藏
  • 关注

原创 FFmpeg学习笔记系列

FFmpeg学习笔记系列是在Mac上用xcode调试的,所用ffmpeg版本是:4.0.2建议在命令行安装FFmpeg和ffplay,命令为:brew install ffmpeg --with-ffplay如有需要编译好的库文件,以下是下载地址:https://download.csdn.net/download/whoyouare888/11200878资源文件下载地址:...

2019-06-30 13:47:27 379

转载 46.FFmpeg学习笔记 - mp4格式解析

目录MP4相关文档MP4分析工具术语和缩略语Mp4文件的组织结构Box对象结构FullBox对象结构常见的BoxFile Type BoxMovie 结构Movie BoxMovie Header BoxTrack BoxTrack Header BoxMedia BoxMedia Header BoxHandler Referenc...

2019-08-31 15:46:40 1292

转载 45.FFmpeg学习笔记 - ts格式解析2

如下图所示 用UltraEdit打开的一个TS流,我们发现每隔188个字节就有一个47(可以看做是包头)TS的包头占用四个字节以第一个包为例:47 60 00 1000 00 B0 0D 00 00 C1 00 00 00 01 E081 0C 8C BE 32 FF FF ……………………………..…………………………………………………………………………………………………...

2019-08-29 15:12:33 527

转载 44.FFmpeg学习笔记 - ts格式解析1

ts文件为传输流文件,视频编码主要格式h264/mpeg4,音频为acc/MP3。ts文件分为三层:ts层Transport Stream、pes层 Packet Elemental Stream、es层 Elementary Stream. es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧的说明信息,ts层就是在pes层加入数据流的识别和传输必须的信息注: 详...

2019-08-29 15:02:24 949

转载 43.FFmpeg学习笔记 - flv格式解析

一、flv文件结构flv文件由flv header 和flv body组成。二、flv headerHeader 部分记录了FLV的类型、版本、流信息、Header 长度等。一般整个Header占用9个字节,大于9个字节则表示头部信息在这基础之上还存在扩展数据。Header 的头部信息排布如下所示:三、flv bodyBody 是由一个个Tag组成的,每个Tag下面有一...

2019-08-27 14:31:50 1873

原创 42.FFmpeg学习笔记 - iOS硬解码aac

本文通过用AudioQueue来播放AAC,其内部会自动进行解码。可以设置AudioQueue用硬解码还是软解码。AudioQueue播放步骤如下:1、给buffer填充数据,并把buffer放入就绪的buffer queue; 2、应用通知队列开始播放; 3、队列播放第一个填充的buffer; 4、队列返回已经播放完毕的buffer,并开始播放下面一个填充好的buffer; 5、...

2019-08-23 17:10:41 629

原创 41.FFmpeg学习笔记 - iOS硬编码pcm到aac

前文12.FFmpeg学习笔记 - aac&adts解析讲过aac格式,本篇文章用iOS平台的AudioToolbox框架硬编码AAC。1.编码aac,需要输入pcm数据,一般从麦克风获取,所以本文用AVCaptureSession从麦克风获取原始音频pcm数据。- (void)startCapture { self.mCaptureSession = [[AVCapt...

2019-08-23 11:56:57 1118

原创 40.FFmpeg学习笔记 - iOS硬解码h264

解码过程1.输入一个h264文件,nalu以0x00000001分隔,解析h264文件,然后将0x00000001四个字节替换成nalu长度 //将NALU的开始码替换成NALU的长度信息,长度固定4个字节 uint32_t nalSize = (uint32_t)(_packetSize - 4); uint32_t *pNalSize = (uint32_t *...

2019-08-22 14:28:29 921

原创 39.FFmpeg学习笔记 - iOS硬编码视频到h264

一、概述硬编码使用场景通常是从摄像头采集图像数据,然后利用系统提供的接口进行硬编码。从摄像头采集数据用的是AVFoundation框架,硬编码用的是iOS 8开放的VideoToolbox框架。二、用AVFoundation采集数据用AVFoundation采集摄像头的数据步骤基本固定,下面详细说一说:1.初始化会话,并设置摄像头采集图像的分辨率 //初始化会话 ...

2019-08-14 18:53:12 3065

原创 38.FFmpeg学习笔记 - ffplay移植到iOS

用了几天的时间,将ffplay(4.1版本)移植到了iOS平台,并保留了绝大部分功能。ffplay播放视频和音频用的是SDL库提供的功能,本项目用OpenGL播放视频,用AudioUnit播放音频,可以参考前面的两篇文章:32.FFmpeg学习笔记 - iOS上播放PCM10.OpenGL学习笔记 - 在iOS上播放YUV为了方便,播放视频时只支持YUV420P格式,否则需要进行转...

2019-08-08 14:46:31 798 1

原创 37.FFmpeg学习笔记 - ffplay源码解读4之音视频同步

本文只分析视频同步到音频。前面文章说到main函数中的event_loop函数,此函数用来处理键盘、鼠标事件以及显示视频帧。static void event_loop(VideoState *cur_stream){ SDL_Event event; double incr, pos, frac; for (;;) { double ...

2019-08-01 17:37:18 213

原创 36.FFmpeg学习笔记 - ffplay源码解读4之解码线程

本篇说一下解码线程。在stream_component_open函数中,分别创建了一个视频解码线程和音频解码线程:static int stream_component_open(VideoState *is, int stream_index){ ... switch (avctx->codec_type) { case AVMEDIA_TYP...

2019-08-01 15:07:46 394

原创 35.FFmpeg学习笔记 - ffplay源码解读3之读文件

本篇文章看看ffplay是如何读取packet放入队列中的。一、先看入口函数:int main(int argc, char **argv){ VideoState *is; ... av_init_packet(&flush_pkt); flush_pkt.data = (uint8_t *)&flush_pkt; ......

2019-07-31 13:45:07 887

原创 34.FFmpeg学习笔记 - ffplay源码解读2之数据结构

本篇分析一下ffplay的数据结构。(1)VideoStateVideoState结构体,正如名字的含义,管理了一些全局的播放状态。typedef struct VideoState { SDL_Thread *read_tid; //读文件线程id AVInputFormat *iformat; //输入格式 /* 丢弃标志,在切换音视频流和关...

2019-07-30 13:14:43 390

原创 33.FFmpeg学习笔记 - ffplay源码解读1之概述

学习ffplay也有一段时间了,打算写几篇文章记录一下。ffplay版本:4.1ffplay源码只有3000多行,但是其中包含了音视频播放,前进/后退,暂停/继续,切换音视频流,逐帧播放等功能,可以说比较全面了。ffplay总的简略流程图如下所示:(1)在steam_open()函数中,创建了一个线程read_thread()。在这个线程中,循环调用av_read_frame(...

2019-07-29 17:47:18 266

原创 32.FFmpeg学习笔记 - iOS上播放PCM

本文打算用iOS上的Audio Unit来播放PCM文件。文章当中用的Remote I/O Unit类型,下面是官方的一张示意图:从图中可以看到,两个element都包含输入输出两个端。element0的输出端(output scope)对应的是扬声器,输入端用于输入数据,可以从element1的输出端获取,也可以从其他Unit或文件获取。element1的输入端表示麦克风,ele...

2019-07-23 13:18:50 918

原创 31.FFmpeg学习笔记 - iOS上解码视频并播放(暂无声音)

本文目标:输入一个视频文件,然后播放视频画面(暂时不播放声音)。主要结合前面写的几篇文章,进行播放:15.FFmpeg学习笔记 - 解复用和解码(新的解码API)27.FFmpeg学习笔记 - 用libswscale转换原始视频格式10.OpenGL学习笔记 - 在iOS上播放YUV程序流程是:先解码,然后将视频格式转换为YUV420P格式,最后用OpenGL在iOS上播放出来...

2019-07-22 17:07:40 599

原创 10.OpenGL学习笔记 - 在iOS上播放YUV

前文已经实现显示一张图片,本文要做的是从文件中读取YUV数据(相当于一张一张的图片),以一定的帧率进行播放。要播放YUV数据,需要将YUV转换成RGB格式,这有两个选择:1.在CPU上进行转换,也就是从文件读取YUV数据后,直接按照公式在代码中进行转换,然后传给着色器,直接进行显示。2.在GPU上进行转换,也就是从文件读取YUV数据后,把Y、U、V三个分量的数据分别传给着色器,在着色器...

2019-07-22 11:17:51 732

原创 9.OpenGL学习笔记 - 在iOS上添加纹理2(不用GLKit框架)

前文7.OpenGL学习笔记 - iOS上的纹理(不用GLKit框架)用的是OpenGL ES 3.0的接口,本文打算用2.0的接口绘制一张矩形纹理,并做了一些优化。首先还是自定义view,view中重写layerClass:+ (Class)layerClass { return [CAEAGLLayer class];}一些用到的属性:#import <O...

2019-07-21 19:00:25 354

原创 8.OpenGL学习笔记 - 在iOS上添加纹理(用GLKit框架)

GLKit框架对OpenGL ES的操作做了很多的封装,开发者用起来比较方便。下面讲一讲如何使用。首先自定义一个View,继承自GLKView。#import <UIKit/UIKit.h>#import <GLKit/GLKit.h>NS_ASSUME_NONNULL_BEGIN@interface MyView : GLKView@endNS...

2019-07-20 13:13:49 405

原创 7.OpenGL学习笔记 - iOS上的纹理(不用GLKit框架)

接上文,本文要把一张图片画出来。首先是顶点着色器:#version 300 esprecision highp float;layout (location = 0) in vec3 aPos;layout (location = 1) in vec2 textureCoords;out vec2 TexCoord;void main(){ gl_Positio...

2019-07-20 10:34:37 253

原创 6.OpenGL学习笔记 - iOS上画三角形(不用GLKit框架)

顶点着色器:#version 300 esprecision highp float;layout (location = 0) in vec3 aPos;void main(){ gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);}片段着色器:#version 300 esprecision highp floa...

2019-07-17 19:09:52 223

原创 5.OpenGL学习笔记 - 搭建iOS开发环境(不用GLKit框架)

本文不用GLKit框架来搭建OpenGL ES在iOS上的开发环境。需要在项目中自定义一个UIView的子类,下面所有操作均在这个子类中进行。导入头文件#import <OpenGLES/ES3/gl.h>将子类view的layer改变一下:+ (Class)layerClass{ return [CAEAGLLayer class];}添加一些...

2019-07-17 16:34:22 320

原创 4.OpenGL学习笔记 - 纹理

1)纹理坐标纹理坐标范围0-1,左下角(0,0),右上角(0,1),使用纹理坐标获取纹理颜色叫做采样。2)纹理环绕方式如果纹理坐标超过0-1,OpenGL提供了几种环绕方式:可以用glTexParameter函数来设置:glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);glTexP...

2019-07-17 13:00:10 480

原创 3.OpenGL学习笔记 - 着色器

(1)顶点着色器通过2种方式来配置顶点数据:第一种方式:layout (location = 0) in vec3 aPos; // 位置变量的属性位置值为0第二种方式:通过在OpenGL代码中使用glGetAttribLocation查询属性位置值(Location)。(2)当顶点着色器定义一个输出,着色器定义一个输入,两个变量类型和名字都一样的时候,可以用来传递数据,如...

2019-07-17 11:06:08 913

原创 2.OpenGL学习笔记 - 基本概念和流程

一、基本概念着色器语言:OpenGL Shading Language,GLSL顶点数组对象:Vertex Array Object,VAO顶点缓冲对象:Vertex Buffer Object,VBO索引缓冲对象:Element Buffer Object,EBO或Index Buffer Object,IBO着色器:图形渲染管线可以被划分为几个阶段,每个阶段运行各自的小程序...

2019-07-16 16:18:30 261

原创 1.OpenGL学习笔记 - 总览

FFmpeg解码后的视频数据,可以通过OpenGL播放,所以打算写一些文章来记录学习的过程,也当做一个备忘录。由于只播放2D的画面,所以本系列文章只打算学到能播放视频数据即可,不学习OpenGL的光照、3D等方面的内容。参考:https://learnopengl-cn.github.io/...

2019-07-13 15:27:17 180

原创 30.FFmpeg学习笔记 - 转码2

本文输入一个视频文件,如mp4,进行解封装、解码、filtering、编码、封装,最后合成一个新的封装格式文件如flv。音频、视频的编码格式和解码时的一致。解码时,AVFrame的pts是AVStream对time base。编码时要把pts转成编码AVCodecContext的time base。编码后得到的packet的pts、dts、duration要转成输出流AVStream的ti...

2019-07-12 17:47:54 501

原创 29.FFmpeg学习笔记 - 转码1

本文输入一个音频文件(只有一个音频流),如mp3文件,然后转码成AAC编码格式,并写入任意一个支持AAC格式的封装格式中,如mp4。程序入口函数:transcode_audio().AVAudioFifo结构体用于存储解码的音频数据。#include <stdio.h>#include "libavformat/avformat.h"#include "liba...

2019-07-12 12:24:10 367

原创 28.FFmpeg学习笔记 - 用libavfilter转换原始视频格式

本文用libavfilter转换原始视频格式。程序输入一个原始视频文件:yuv文件,yuv420p格式,宽高848x480。输出:rgb文件,rgb24格式,宽高1696x960。#include <libavcodec/avcodec.h>#include <libavformat/avformat.h>#include <libavfilter/buff...

2019-07-12 08:49:00 410

原创 27.FFmpeg学习笔记 - 用libswscale转换原始视频格式

本文用libswscale转换原始视频格式。程序输入一个原始视频文件:yuv文件,yuv420p格式,宽高848x480。输出:rgb文件,rgb24格式,宽高1696x960。#include <libavutil/imgutils.h>#include <libavutil/parseutils.h>#include <libswscale/swscal...

2019-07-11 12:56:49 253

原创 26.FFmpeg学习笔记 - 用libswresample转换原始音频格式

本文用libswresample转换原始音频格式。程序输入一个原始音频文件:pcm格式,采样率48000,2声道,AV_SAMPLE_FMT_FLT格式。输出:pcm格式,采样率44100,1声道,AV_SAMPLE_FMT_S16P格式。#include <libavutil/opt.h>#include <libavutil/channel_layout.h>...

2019-07-10 16:22:44 437 1

原创 25.FFmpeg学习笔记 - 用libavfilter转换原始音频格式2

本文用libavfilter的另一种方法来转换原始音频格式,见代码。#include <inttypes.h>#include <math.h>#include <stdio.h>#include <stdlib.h>#include "libavutil/channel_layout.h"#include "libavutil/m...

2019-07-10 14:22:02 474

原创 24.FFmpeg学习笔记 - 用libavfilter转换原始音频格式1

本文将用libavfilter来转换原始音频格式。程序输入一个原始音频文件:pcm格式,采样率48000,2声道,AV_SAMPLE_FMT_FLT格式。输出:pcm格式,采样率44100,1声道,AV_SAMPLE_FMT_S16P格式。程序流程如下:上面的filter都是FFmpeg内置的,设置参数,然后调用即可。所有的filter依次连接,形成filter链。abuffer ...

2019-07-10 09:34:03 469

原创 23.FFmpeg学习笔记 - 解封装之自定义IO

通常解封装时,当调用avformat_open_input和avformat_find_stream_info时,FFmpeg内部会自动读取文件内容来查找信息。本文要做的是,自定义IO,提供一个回调函数。这样的话,当调用前面这两个函数时,通过回调函数来提供数据。#include <libavcodec/avcodec.h>#include <libavformat/avf...

2019-07-08 17:16:28 725

原创 22.FFmpeg学习笔记 - 封装格式转换(remux)

本篇文章的封装格式转换和上篇文章21.FFmpeg学习笔记 - 无编码的视频复用器(mux)其实差不多,只不过是,转换格式输入的是一个文件,从中找到所有的视频流和音频流,然后mux成一个视频文件。过程中也不用调用av_compare_ts来比较时间,因为输入的是一个文件(视频流和音频流已交错排列好),读到什么,就写什么即可。#include <libavutil/timesta...

2019-07-08 14:57:23 924

原创 21.FFmpeg学习笔记 - 无编码的视频复用器(mux)

本篇文章的视频复用器是不带编码的。程序输入两个文件,从其中一个文件挑出视频流,从另一个文件挑出音频流,然后合成为某种视频格式(如mp4/ts/flv等),输出成文件。其中视频流所在的文件,可以是mp4/ts/flv等格式的视频文件,也可以是h264等纯视频编码文件。音频流所在文件可以是mp4/ts/flv等格式的视频文件,也可以是aac等纯音频编码的文件。#include <s...

2019-07-08 13:28:06 1046

原创 20.FFmpeg学习笔记 - 带编码的视频复用器(mux)

本篇文章写一个视频复用器。输入一个pcm文件和一个yuv文件。pcm文件格式是f32le,单声道,采样率是48000。yuv文件格式是yuv420p,848x400。读入两个文件,分别进行音频和视频编码,然后mux成目标文件,比如xxx.mp4。代码中选择了编码2声道的音频,由于输入的pcm是单声道,所以代码中简单复制了pcm的数据到frame->data[1]中。#inc...

2019-07-06 17:59:17 1258

原创 19.FFmpeg学习笔记 - 编码视频

本篇文章编码视频。输入一个原始未编码的yuv文件,格式为yuv420p,宽高848*480,将其编码为h264格式。#include <libavcodec/avcodec.h>#include <libavformat/avformat.h>#include <libswscale/swscale.h>#include <libavutil/...

2019-07-05 11:20:42 314

原创 18.FFmpeg学习笔记 - 编码音频

本篇文章要把pcm原始音频数据编码为AAC格式的音频数据。由于aac格式只支持fltp格式的pcm数据,也就是float planar格式,所以,打算输入两个pcm原始音频文件,一个是左声道,一个是右声道,两文件都是f32le、单声道、采样率48000的音频文件。这样读入两个文件的内容,分别放入AVFrame的data[0]和data[1]当中。编码为AAC格式,还要加入ADTS头,才能播放。...

2019-07-05 09:18:11 520

PhotoViewer.dmg

mac图片查看软件

2019-05-28

FFmpeg-iOS.zip

FFmpeg-iOS的库文件,4.0.2版本,请注意 FFmpeg-iOS的库文件,4.0.2版本,请注意

2019-05-24

Mac上非常好用的照片查看器

Mac上好用的图片浏览器,可以按下键盘上的方向键,查看同一文件夹内的所有图片文件,浏览的同时,也可以选择删除,旋转,缩放等基本操作。

2018-01-04

Mac上好用的照片查看器

Mac上比较好用的图片浏览器,可以按下键盘上的方向键,查看同一文件夹内的所有图片文件,浏览的同时,也可以选择删除,旋转,缩放等基本操作。用起来很方便。

2018-01-04

空空如也

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

TA关注的人

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