![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
音视频
音视频编解码
Cindy_1224
这个作者很懒,什么都没留下…
展开
-
tensorRT资料
无原创 2022-01-08 14:35:28 · 1153 阅读 · 0 评论 -
【无标题】https://github.com/NVIDIA/TensorRT/tree/7.1.3/samples/opensource
保存原创 2022-01-08 14:29:48 · 351 阅读 · 0 评论 -
基于ffmpeg 的树莓派摄USB像头视频采集,编码保存为h264和YUV格式数据
#include <stdio.h>#include <string.h>#define V_WIDTH 640#define V_HEIGTH 480extern "C" {#include "libavutil/avutil.h"#include "time.h"#include "libavdevice/avdevice.h"#include "libavformat/avformat.h"#include "libavcodec/avcodec.h".原创 2021-01-01 20:20:18 · 1297 阅读 · 3 评论 -
libavutil/error.h:132:58: error: taking address of temporary array av_make_error_string..
libavutil/error.h:132改成如下/*** Convenience macro, the return value should be used only directly in* function arguments but never stand-alone.*///#define av_err2str(errnum) \// av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_...原创 2021-01-01 18:51:30 · 1314 阅读 · 0 评论 -
C++引用ffmpeg出错#error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS
在报错对应的libavutil/common.h开头添加如下代码:#ifdef __cplusplus#define __STDC_CONSTANT_MACROS#ifdef _STDINT_H#undef _STDINT_H#endif# include "stdint.h"#endif#ifndef INT64_C#define INT64_C(c) (c ## LL)#define UINT64_C(c) (c ## ULL)#endif...原创 2021-01-01 18:46:40 · 381 阅读 · 0 评论 -
树莓派ffmpeg 编译
安装x264 编码器cd /root/mkdir ffmpegcd ffmpeggit clone https://code.videolan.org/videolan/x264.gitcd x264/ls./configure --prefix=/usr/local/ffmpeg_install --enable-shared --enable-debug=3make install安装ffmpeggit clone https://git.ffmpeg.org/ffmpeg.git原创 2021-01-01 18:38:54 · 649 阅读 · 1 评论 -
SPS和PPS
sps 能够获取到哪些信息?proflie 编码等级 压缩方面level 图像相关分辨率参考帧GOP 帧数显示帧顺序原创 2021-01-05 21:00:39 · 586 阅读 · 1 评论 -
H264中的proflie 和level
proflieH264 proflie对视频压缩特性的描述,profile越高,就说额明采用了越高级的压缩特性。H264 level对视频的描述,level 越高,视频的码率、分辨率、FPS,越高。Main proflie 初期只支持B 帧,支持CABAC 压缩特性hight 中支持了对色彩的量化,支持了4:0:0格式hight10 采样位数变成了9到10位,图像更清晰了。hight422 支持4:2:2 格式hight444支持4:4:4 格...原创 2020-12-29 12:14:19 · 887 阅读 · 0 评论 -
H264码流
分层NAL 层(网络抽象层)用于网络传输的层纠错、乱序、知道包的起始和结束VCL层(视屏数据编码层)视屏帧序列一般一个图像一个slice, 但也可以一张图像可以分很多slice,方便传输。涉及到很多编码的东西。一个视频有很多帧组成,帧是压缩后的图像。每个帧是由一个或多个slice组成,每个slice有多个宏块组成。码流的基本概念SODB 原始数据流,长度不一定是8的整数倍RBSP 字节对齐流,SODB 字节流不对齐(8的整数倍)补1或补多个0NALUNAL Header(1.原创 2020-12-29 12:14:07 · 557 阅读 · 0 评论 -
H264 无损压缩及编解码流程
一个视频经过有损压缩之后还不够小还要经过无损压缩。无损压缩之后数据量继续变小.第一步、DCT变换有关DCT 变换: 傅里叶里面说任何信号都可以有多个不同振幅和频率的正弦波或者余弦波信号叠加而成,如果采用的是余弦的话那就叫CT变换(Cosine Transform),如果输入信号是离散(Discrete )的,那么就叫DCT变换。DCT变换参考图像中采用DCT变换主要是将离散的时域图像信息转换成频域,之后可以看到一张图像大部分的信息都是在低频段,而高频的信息非常少,这样的话呢就将图像的内容集中了.原创 2020-12-25 18:22:01 · 1895 阅读 · 1 评论 -
H264帧间压缩技术整理
帧间压缩是指同一个GOP 之间的压缩参考帧(后面的帧参考前面的帧进行编码)运动估计(宏块匹配+运动矢量)通过宏块匹配的方法找到运动矢量,宏块匹配是方法手段,目的是找到运动矢量。运动补偿(解码找到残差值)如上图相邻的三帧,第一张是I帧的话,图像编码时只要将望远镜部分分割成很小的宏块,根据宏块匹配方法找到第二张图像对应的宏块(宏块匹配),求出运动矢量。宏块查找将一张图划分成很多的小宏快,抽出相邻的两帧,记录前一帧小球的宏块(坐标位置),逐行扫描查找相邻帧的宏块,找相似度最高的宏块认为是同一.原创 2020-12-24 17:47:54 · 1035 阅读 · 1 评论 -
H264 帧内压缩技术整理
帧内压缩,解决的是空域数据冗余问题(一张图片内部的数据压缩问题)。比如:一张天然色背景图片的压缩,背景天然色是可以用一部分很小的数据量存储,解压缩时可以通过很少的数据量还原回去。对于帧内的物体也有实际的算法。帧间压缩,解决的是时域数据冗余问题随着时间推移每个时间段是有帧数据的,他们是有参考的。整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化CABAC压缩宏块宏块是视频压缩的基本单元帧内、帧间的基本单元将原始图像划分成很多个宏块单元,如果有很多细节的图片.原创 2020-12-24 16:14:58 · 2055 阅读 · 1 评论 -
H264压缩码率与GOP
H264压缩比条件:1、YUV格式YUV420 2、分辨率为640X480 3、帧率为 15建议码流: 500kbp压缩比:1/100GOP帧进行分组:根据相关性进行分组。同组帧相关性强,可压缩编码性强I/P/B 帧I 帧:(intraframe frame) 关键帧,采用帧内压缩技术,IDR帧是GOP 的第一帧,属于I帧。P帧(forward predicted frame),向前参考帧。压缩时,只参考已经处理的帧,...原创 2020-12-24 13:13:54 · 1115 阅读 · 0 评论 -
图像基础知识整理
每个像素由红绿蓝三个发光二极管组成原创 2020-12-24 10:46:31 · 206 阅读 · 0 评论 -
音频WAV格式
PCM 数据:纯的音频数据,没有文件格式WAV格式数据,存储了原始的数据,在PCM数据基础上套了一个头,方便播放浅蓝部分:4字节 RIFF 协议4 字节chunk 大小4 字节 WAVE 协议绿色部分:4字节 fmt 表示该部分为格式相关数据4 字节chunk 大小2 字节音频格式PCM2 字节通道数4 字节采样率4 字节码率2 字节对齐2 字节位深度红色部分:4 字节表示数据标志 “data”4 字节chunk 大小每4个字节表示一个采样,左右通道采样..原创 2020-12-23 15:11:20 · 353 阅读 · 0 评论 -
AAC编码器
AAC (advanced audio coding)先进的音频编码由fraunhofer IIs、杜比实验室、AT&T、sony 等公司共同开发,目的是取代MP3格式。AAC 规格AAC LC: (Low complexity) 低复杂度规格,码流是128k,音质好。AAC HE: 等于AAC LC + SBR(spectral band replication),其核心思想是按频谱分保存,高频单独放大编码保存音质。码流在64k左右。AAC HE V2 :等于AAC LC +.原创 2020-12-23 12:06:51 · 347 阅读 · 0 评论 -
常见的音频编码器
常见的音频编码器OPUSAACOggSpeex 包括混音消除iLBCAMRG.711等Ogg:收费,应用比较少AAC 在直播系统中应用的比较广泛,嵌入式设备中,ffmpeg中,WebRTC中OPUS 是比较新的音频编码,延迟小,压缩率高,实时通讯,在线教育webRTC 默认使用OPUS固话一般用G.711系列OPUS 具有低延时,全带宽,编码质量高的优点,适合实时通讯AAC延时比较大,不太适合实时通讯。...原创 2020-12-23 11:17:04 · 1249 阅读 · 4 评论 -
音频无损编码
无损编码:压缩不损失原始数据。哈夫曼编码:用很小的的一串01二进制数代替特别长的字符。频率越低的编码越长,频率越高的编码越小。根据使用频率去计算具体在哪个位置,比如上图右边40 所代表的的东西出现次数高,用01(1)代表,160使用次数少,则编码为10(2)。用短的编码代替高频词,长的代表低频词,那么压缩率就比较高了。算术编码:二进制小数来编码。香农编码:自己查查资料。红色部分:将各种频段的声音傅里叶转换成各种频段的数据,交予量化器黄色部分: 将人体不能感知的声音给去掉,遮蔽部分的声音也原创 2020-12-23 10:59:41 · 1137 阅读 · 0 评论 -
音频有损压缩技术
频域遮蔽:对于环境中的各种声音(复合声音),将时间域中的声音通过傅里叶变换成频域范围的声音。频率相近的,声音强的遮蔽掉声音弱的。时域遮蔽:时间内声强高的遮蔽掉声强低的声音。...原创 2020-12-23 10:40:25 · 468 阅读 · 0 评论 -
音频基础知识整理
PCM->AAC/MP3->MP4/FLVMP4/FLV->AAC/MP3_PCM声音的产生:物体运动通过空气、固体、液体等进行运输振动耳膜HZ: 1秒钟振动的次数量化后的十进制计算机可识别的二进制数据PCM 原始数据WAV 存储原始数据,在PCM数据上加了一个头部信息。采样大小:也称位深,位深越大,描述的音量峰值越大。采样率:采样的频率、次数,采样次数越大,描述声音越...原创 2020-12-23 10:14:25 · 143 阅读 · 0 评论 -
采样率,位深以及比特率
一. 采样率 (Sampling rate)在数码音频系统中,我们需要使用A/D转换器(通常指声卡)将模拟信号转换成数字信号(通常这个过程被称为录音)。A/D转换器每秒的采样速率随随便便都是能上万次的,其中每一次采样都记录了声波在某一时刻的状态,这个东西就被称为样本,当将一连串样本连起来时,它就成为了一段完整的声波。在以上的描述基础之上,我们将每一秒钟所采样样本的总数目称之为采样率,单位为Hz。例如44100Hz,指的就是每秒采样数为44100,也常被简称为44.1KHz。采样率越高,所能描述的声波转载 2020-08-26 17:50:01 · 11935 阅读 · 1 评论 -
FFmpeg 中的时间戳
在弄明白音视频的同步过程中,有关于时间戳的问题一直很费解,ffmpeg结构体多,在多个结构体中存在time_base字段,在看代码时总是一头雾水,搞清楚各个time_base的来源和作用,对于阅读ffmpeg的代码很重要。time_base在FFmpeg中,时间基(time_base)是时间戳(timestamp)的单位,时间戳值乘以时间基,可以得到实际的时刻值(以秒等为单位)。例如,如果一个视频帧的dts是40,pts是160,其time_base是1/1000秒,那么可以计算出此视频帧的解码时.转载 2020-08-19 15:42:36 · 1499 阅读 · 0 评论 -
SDL条件变量,锁机制
最近看FFmpeg 源码,其中有用到SDL,在这学习一下。SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。总之SDL是一款跨平台的多媒体开源库,用处很多。 ...原创 2020-08-18 18:04:02 · 1549 阅读 · 0 评论 -
AAC ADTS头格式分析
AACAAC(Advanced Audio Coding)高级音频编码,出现于1997年,基于MPEG-2的音频编码技术。——百科ADTSADTS(Audio Data Transports Stream)是AAC的一种十分常见的常见的传输流格式。可以吧ADTS这个头看作是AAC的frameheader。一般的AAC解码器都需要把AAC的ES流打包成ADTS的格式,一般是在AAC ES流前添加ADTS header。AAC音频文件的每一帧由ADTS Header和AAC Audio Data.转载 2020-08-10 17:45:44 · 2057 阅读 · 1 评论 -
ffplay播放没有声音SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can‘t initialize audio client
在window7 64bit下安装了ffmpeg,然后用ffplay命令播放声音时发生这个错误:SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can't initialize audio client那么只能播放视频图像而不能播放视频声音。只要设置环境一个变量SDL_AUDIODRIVER=directsound或者winmm即可,那么就可以播放了。原因不清楚,可能跟sdl库有关吧写一个start.bat加入下面代码:set SDL_AUDIO转载 2020-08-08 12:09:55 · 995 阅读 · 0 评论 -
ffplay-音视频同步
音视频同步的目的是为了使播放的声音和显示的画面保持一致。视频按帧播放,图像显示设备每次显示一帧画面,视频播放速度由帧率确定,帧率指示每秒显示多少帧;音频按采样点播放,声音播放设备每次播放一个采样点,声音播放速度由采样率确定,采样率指示每秒播放多少个采样点。如果仅仅是视频按帧率播放,音频按采样率播放,二者没有同步机制,即使最初音视频是基本同步的,随着时间的流逝,音视频会逐渐失去同步,并且不同步的现象会越来越严重。这是因为:一、播放时间难以精确控制,二、异常及误差会随时间累积。所以,必须要采用一定的同步策略,不转载 2020-08-06 15:26:44 · 479 阅读 · 0 评论 -
FFmpeg中的时间戳详解
本文转自:https://www.cnblogs.com/leisure_chn/p/10584910.html1. I帧/P帧/B帧I帧:I帧(Intra-coded picture, 帧内编码帧,常称为关键帧)包含一幅完整的图像信息,属于帧内编码图像,不含运动矢量,在解码时不需要参考其他帧图像。因此在I帧图像处可以切换频道,而不会导致图像丢失或无法解码。I帧图像用于阻止误差的累积和扩散。在闭合式GOP中,每个GOP的第一个帧一定是I帧,且当前GOP的数据不会参考前后GOP的数据。P帧:P帧(转载 2020-08-05 16:56:19 · 1502 阅读 · 0 评论 -
FFmpeg 的解码流程
FFmpeg作为目前主流的音视频开源处理框架,在目前的互联网音视频处理大行其道,但是缺点是底层实现非常复杂,源码代码晦涩难懂,那么了解其基本处理流程就显得非常重要。下面,简单地将其主要框架梳理一下。方便大家入门。(1).av_register_all();//注册所有文件格式和编解码库(2).avformat_network_init();//打开网络视频流(3).av_open_input_file();//读取文件头部把信息保存到AVFormatContext结构体(4).av_find转载 2020-08-05 12:31:21 · 554 阅读 · 0 评论 -
FFmpeg avformat_new_stream
avformat_new_stream 在 AVFormatContext 中创建 Stream 通道。AVFormatContext: unsigned int nb_streams; 记录stream通道数目。 AVStream **streams; 存储stream通道。AVStream : int index; 在AVFormatContext中所处的通道索引二:分析AVStream *avformat_new_stream(AVF...转载 2020-08-05 11:29:36 · 1612 阅读 · 0 评论 -
FFmpeg结构体:AVCodecContext
AVCodecContext是一个描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息,位于avcodec.h文件中。常见变量及其作用enum AVMediaType codec_type; //编解码器的类型(视频,音频...)。const struct AVCodec *codec; //采用的解码器AVCodec(H.264,MPEG2...)。int64_t bit_rate;//平均比特率。uint8_t *extradata;//针对特定编码器包含的附加信息...转载 2020-08-03 15:40:56 · 273 阅读 · 0 评论 -
FFmpeg AVStream结构体
结构体typedef struct AVStream { int index; /**< stream index in AVFormatContext */ /** * Format-specific stream ID. * decoding: set by libavformat * encoding: set by the user, replaced by libavformat if left unset */ .转载 2020-08-03 15:16:30 · 4195 阅读 · 0 评论 -
音视频开发 FFmpeg 介绍与基础知识理解
FFmpeg简介FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“FastForward”,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换FFmpeg的用户有Google,Facebook,Youtube,优酷,爱奇艺,土豆等基础知识容器/文件(Conainer/File):即特定格式的多媒体文件,比如mp4、flv、mkv等。媒体流(Stream):表示时间轴上的一段连续数据,如一段声音数转载 2020-08-03 14:50:46 · 407 阅读 · 0 评论 -
FFmpeg .avformat_open_input接口
/** * Open an input stream and read the header. The codecs are not opened. * The stream must be closed with avformat_close_input(). * * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context). * May be a poi.原创 2020-08-03 14:17:20 · 218 阅读 · 1 评论 -
FFmpeg:AVInputFormat结构体解析
VInputFormat是解复用器(解封装)作用时读取媒体文件并将其拆分为数据块(数据包)。每个数据包,包含一个或者多个编码帧比较重要的字段有:long_name:格式的长名称(相对于短名称而言,更易于阅读)。 mime_type:mime类型,它用于在探测时检查匹配的mime类型。 next:用于链接下一个AVInputFormat。 (*read_probe):判断给定文件是否有可能被解析为此格式。 提供的缓冲区保证为AVPROBE_PADDING_SIZE字节大,因此除非您需要更多,否则转载 2020-08-03 11:05:55 · 405 阅读 · 0 评论 -
FFMPEG结构体分析:AVFormatContext
typedef struct AVFormatContext { /** * A class for logging and @ref avoptions. Set by avformat_alloc_context(). * Exports (de)muxer private options if they exist. */ const AVClass *av_class; /** * The input container forma.转载 2020-08-02 17:48:51 · 265 阅读 · 0 评论 -
音视频技术基础
概述保存视频的每一帧,每一个像素没要必要,而且也是不现实的,因为这个数据量太大了,以至于没办法存储和传输,比如说,一个视频大小是 1280×720 像素,一个像素占 12 个比特位,每秒 30 帧,那么一分钟这样的视频就要占 1280×720×12×30×60/8/1024/1024=2.3GB 的空间,所以视频数据肯定要进行压缩存储和传输的。而可以压缩的冗余数据有很多,从空间上来说,一帧图像中的像素之间并不是毫无关系的,相邻像素有很强的相关性,可以利用这些相关性抽象地存储。同样在时间上,相邻的视频帧转载 2020-07-25 12:16:17 · 292 阅读 · 0 评论 -
FFmpeg音视频同步
音视频同步简介从前面的学习可以知道,在一个视频文件中,音频和视频都是单独以一条流的形式存在,互不干扰。那么在播放时根据视频的帧率(Frame Rate)和音频的采样率(Sample Rate)通过简单的计算得到其在某一Frame(Sample)的播放时间分别播放,**理论**上应该是同步的。但是由于机器运行速度,解码效率等等因素影响,很有可能出现音频和视频不同步,例如出现视频中人在说话,却只能看到人物嘴动却没有声音,非常影响用户观看体验。如何做到音视频同步?要知道音视频同步是一个动态的过程,同步是暂转载 2020-07-25 12:03:30 · 1465 阅读 · 0 评论 -
一文读懂 YUV 的采样与格式
YUV 是一种颜色编码方法,和它等同的还有 RGB 颜色编码方法。RGB 颜色编码RGB 三个字母分别代表了 红(Red)、绿(Green)、蓝(Blue),这三种颜色称为三原色,将它们以不同的比例相加,可以产生多种多样的颜色。在图像显示中,一张 1280 * 720 大小的图片,就代表着它有 1280 * 720 个像素点。其中每一个像素点的颜色显示都采用 RGB 编码方法,将 RGB 分别取不同的值,就会展示不同的颜色。RGB 图像中,每个像素点都有红、绿、蓝三个原色,其中每...转载 2020-07-25 11:05:35 · 2163 阅读 · 5 评论 -
SDL(简单直控媒体层)
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。用下面这张图可以很明确地说明SDL的用途。SDL实际上并不限于视音频的播放,它将功能分成下列数个子系统(subsystem):Video(图像):图像控制以及线程(th原创 2020-07-24 14:00:04 · 355 阅读 · 0 评论 -
FFMPEG结构体分析:AVPacket
typedef struct AVPacket { /** * Presentation timestamp in AVStream->time_base units; the time at which * the decompressed packet will be presented to the user. * Can be AV_NOPTS_VALUE if it is not stored in the file. * pts MUST .转载 2020-07-24 15:06:24 · 352 阅读 · 0 评论