近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术。因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术。

相关阅读推荐

视频直播关键技术:流畅、拥塞和延时追赶

视频直播技术详解:直播的推流调度

音视频通话:小议音频处理与压缩技术

《视频编解码的理论和实践1:基础知识介绍》

 

1Ffmpeg介绍

《视频编解码的理论和实践1:基础知识介绍》介绍了视频编码的基础知识,本篇文章,我们一起看看实际应用中的视频编码是如何操作的。

在实际工程项目中,ffmpeg是应用最多的多媒体处理框架,它提供了音视频采集、编解码、图像处理,格式转换等功能,并且拥有很强的扩展能力,通过ffmpeg可以很容易集成第三方库(例如:x264、openh264等),通过这种能力,它可以实现更强大的功能。Ffmpeg由下面几个部分构成:

Libavformat:音视频格式处理

Libavcodec:音视频编解码

Libavfilter:音视频滤镜

Libavdevice:音视频设备采集

Libswscale:图像缩放、转换

Libswresample:音频重采样

Ffmpeg:一个命令行的转码工具

Ffplay:一个命令行播放器

Ffprobe:简单的媒体格式分析工具

2Ffmpeg视频编码

视频编码是ffmpeg提供的基本功能之一,通过ffmpeg可以很容易实现视频编码操作。使用ffmpeg进行视频编码之前需要把x264、openh264等第三方编解码库集成到ffmpeg中才能使用。编码步骤如下:

(1) 注册编码器

(2) 根据名字或者ID查找你想使用的编码器(例如x264、x265、openh264等)

(3) 创建一个编码器上下文对象

(4) 在编码器上下文对象中设置编码器参数

(5) 打开编码器

(6) 读取一帧图像进行编码,一直重复该过程,直到处理结束

(7) 关闭编码器

示例代码如下:

avcodec_register_all(); // 注册所有可用的编码器

codec = avcodec_find_encoder_by_name(“libx264”); // 查找编码器

ctx = avcodec_alloc_context3(codec); // 创建编码器上下文

ctx->width = 1280; // 设置编码器参数

ctx->height = 720;

// ….其他的参数设置

avcodec_open2(ctx, codec, NULL); // 打开编码器

while(read_frame(frame)){

AVPacket pkt; // 存放编码之后的数据

int got_output = 0; // 是否成功编码得到一个图像

avcodec_encode_video2(ctx, &pkt, frame, &got_output); // 编码

if(got_output){

// 得到编码后的数据,进行后续操作

}

}

avcodec_free_context(&ctx); // 关闭编码器

可以看到,ffmpeg隐藏了大部分的编码细节,调用者不需要了解预测、变换、量化、熵编码等细节,这些细节都已经被ffmpeg封装好了,开发者只要把编码参数设置好,然后调用相关的接口函数,即可实现视频编码功能。当然,这知识最基本的编码功能,要想在画面质量和压缩率之间取得平衡,必须了解视频编码的细节,然后设置相应的参数

3Ffmpeg视频解码

Ffmpeg自带了H264的视频解码器,开发者可选择直接使用ffmpeg自带的H264解码器或者第三方的解码库进行视频解码。和视频编码一样,解码操作的大部分细节都已经被ffmpeg隐藏起来了,开发者只需要设置好相关的解码参数,然后调用接口函数就可以实现解码功了。解码流程如下:

(1) 注册解码器

(2) 查找解码器

(3) 创建解码器上下文对象

(4) 设置解码参数

(5) 打开解码器

(6) 读取数据进行解码,直到结束

(7) 关闭解码器

代码示例如下:

avcodec_register_all(); //注册解码器

codec = avcodec_find_decoder_by_name(“h264”); // 查找解码器

ctx = avcodec_alloc_context3(codec); // 创建解码器上下文对象

//…设置解码参数

avcodec_open2(ctx, codec, NULL); // 打开解码器

while(read_packet(pkt)){

AVFrame frame; // 存放解码之后的图像数据

int got_frame = 0;

avcodec_decode_video2(ctx, frame, &got_frame, pkt); // 解码

if(got_frame){

// 解码得到一帧图像,进行后续操作…

}

}

avcodec_free_context(&ctx); // 关闭解码器

可以看到ffmpeg是个非常强大的多媒体处理框架,通过ffmpeg我们可以很容易进行音视频方面的处理。上面介绍的只是ffmpeg的冰山一角,要想熟练使用ffmpeg,必须花很多时间去熟练使用它。

更多即时通讯、音视频技术的干货文章,请关注网易云信博客。

转载于:https://www.cnblogs.com/wangyiyunxin/p/9480934.html

视频编解码的理论和实践2:Ffmpeg视频编解码相关推荐

  1. 音视频开发(9)--视频编解码的理论和实践

    视频编解码的理论和实践1:基础知识介绍   1.视频介绍 视频的本质是图像序列,根据视觉暂留的原理,每秒播放20~25张图像,就会形成连续平滑的视觉效果,人眼将无法区分其中单幅的图像,就这样连续的画面 ...

  2. 视频编解码的理论和实践1:基础知识介绍

    近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术.因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术. 相关阅读推荐 &l ...

  3. 【视频技术解读】编解码的理论和实践

    一.视频编解码基础知识 1.视频介绍 视频的本质是图像序列,根据视觉暂留的原理,每秒播放20~25张图像,就会形成连续平滑的视觉效果,人眼将无法区分其中单幅的图像,就这样连续的画面叫做视频.每秒播放的 ...

  4. 软件工程--理论与实践 微课视频第二版 吕云翔 答案(应用 选择 判断)

    第一部分 第 1 章 1.选择题 (1) B (2) D (3) C (4) A 2.判断题 (1) × (2) × (3) √ (4) × 第 2 章 1.选择题 (1) C (2) C (3) B ...

  5. ffmpeg 视频编码一(精简版)

    1. ffmpeg 视频解码一 2. ffmpeg 视频解码二 3. ffmpeg 音频解码一 4. ffmpeg 音频解码二 5. ffmpeg 音视频解码 6. ffmpeg 视频编码一 7. f ...

  6. ffmpeg 视频编码三(基于 libavfilter 转换视频)

    1. ffmpeg 视频解码一 2. ffmpeg 视频解码二 3. ffmpeg 音频解码一 4. ffmpeg 音频解码二 5. ffmpeg 音视频解码 6. ffmpeg 视频编码一 7. f ...

  7. 视频编解码之理论概述 和即时通信

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关实时 ...

  8. 视频编码零基础入门(1):视频编解码之理论概述

    1.前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关 ...

  9. 即时通讯音视频开发(一):视频编解码之理论概述

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的. 系列文 ...

最新文章

  1. 吴恩达机器学习笔记 —— 3 线性回归回顾
  2. 多线程:线程安全?如何实现?
  3. python--open用法
  4. 最长回文子串python_最长回文子串(Python)
  5. openssl 证书生成手册
  6. 环形链表解法一:快追慢
  7. 用Java统计姓氏个数_JAVA统计数字个数
  8. 树莓派控制电机转速_怎样用树莓派控制直流电机的方向和速度
  9. Python基础44(PyMySQL模块)
  10. 2021餐饮外卖商户研究报告
  11. 搞笑创意海报灵感|终于知道设计该怎么做了!
  12. 6410裸机开发教程下载
  13. wpf中的默认右键菜单中的复制、粘贴、剪贴等没有本地化的解决方式
  14. 超级好用的5个免费在线版流程图制作网站
  15. 利用Global Mapper处理正摄卫片
  16. 俄罗斯方块c语言程序方案设计,c语言俄罗斯方块游戏程序方案设计书报告.doc
  17. 使用 keepalived 设置虚拟 IP 环境
  18. 笔记本触摸屏使用技巧
  19. 第十三题:中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:一只公鸡值5钱,一只母鸡值3钱,三只小鸡值1钱,现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只?
  20. java云闪付,第三方支付-银联云闪付开发教程

热门文章

  1. [Android实例] 最全的Android开发资源整理--进阶必备
  2. 利用Graphviz 画结构图
  3. NTPDATE - no server suitable for synchronization found 修复
  4. IDC运营商如何轻松建立属于自己的数据备份服务中心
  5. 51cto博客程序错误
  6. 一次gitlab无法使用ssh登录的问题解决
  7. TPYBoard开发板搭建与阿里云服务发送数据
  8. iOS 动态更换icon
  9. 附录C 编译安装Hive
  10. 斯隆-凯特琳癌症中心使用RTLS系统,改善患者术后护理流程