Libhevc介绍
随着高清电视的普及和4K、8K超高清电视的出现,视频编解码技术也得到了广泛应用和发展。H.265/HEVC (High Efficiency Video Coding) 编解码标准作为一种新一代的视频编码技术,具有更高的压缩率和更好的画面质量,已经被成为未来视频编码的趋势和方向。libhevc 库作为一个开源的 H.265/HEVC 编解码库,提供了完整的解码功能和接口,方便用户快速地进行 H.265/HEVC 视频的解码。
H.265/HEVC 编解码标准
H.265/HEVC 是 ITU-T 和 ISO/IEC 联合制定的一种视频编解码标准,于2013年发布。相比较 H.264/AVC(Advanced Video Coding)标准,H.265/HEVC 可以在保证画面质量的前提下,减少一半以上的比特率,从而实现更高的压缩效率。H.265/HEVC 的编码中采用了一些新的技术和算法,如分块预测、运动矢量扩展、变形并行处理等,用于提高视频的压缩率和画面质量。同时,H.265/HEVC 标准还支持超高清分辨率视频(比如 4K 和 8K),并在网络传输和存储方面也有更好的表现。
libhevc 库的结构
libhevc 库是一个开源的 H.265/HEVC 编解码库,它实现了完整的解码功能,并且提供了一系列常用接口和工具,方便用户使用。
libhevc 库的核心功能包括三部分:Parser、Decoder 和 Filter。其中,
- Parser:负责将 H.265/HEVC 数据流解析成语法单元,并保存到不同层次的结构体中;
- Decoder:依据解析结果,进行解码处理,最终生成 YUV 视频数据;
- Filter:提供各种滤镜、特效等功能,可以用于后期处理或者预处理。
在上述三个部分的基础上,libhevc 还提供了一些工具和接口,如命令行工具 hevcdec、API 接口等,方便用户调用和使用。
libhevc 库的编译与安装
libhevc 库是一个开源的 C 语言库,可以在 Linux、Windows 等操作系统平台上编译和运行。下面我们以 Linux 系统为例,介绍 libhevc 库的编译和安装步骤:
前置依赖库
在编译 libhevc 库之前,需要先安装以下依赖库:
- yasm:a portable and lightweight assembler;
- nasm:a free BSD licensed assembler;
- cmake:cross-platform build system;
- gcc:GNU Compiler Collection;
- g++:GNU C++ Compiler。
在 Ubuntu 下可以使用如下命令进行安装:
sudo apt-get install yasm nasm cmake build-essential
下载源码
libhevc 库的源码可以从 GitHub 上克隆或者下载。下面我们以克隆源码为例,假设要将源码克隆到 /usr/local/src 目录下:
git clone https://github.com/strukturag/libhevc.git /usr/local/src/libhevc
编译和安装
进入源码目录,使用 cmake 进行编译和安装,假设要将库安装到 /usr/local/lib 和 /usr/local/include 目录下:
cd /usr/local/src/libhevc
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install
编译和安装完成后,编译生成的库文件和头文件都会被拷贝到 /usr/local/lib 和 /usr/local/include 目录下。
libhevc 库的使用
libhevc 库提供了一系列的 API 接口,可以用于 H.265/HEVC 视频的解码处理。下面我们以 C/C++ 语言为例,介绍如何使用 libhevc 库进行 H.265/HEVC 视频的解码:
导入头文件
在使用 libhevc 库之前,需要先导入相关头文件。libhevc 库的头文件一般都在 /usr/local/include/hevc 目录下,其中包含了所有的函数声明和结构体定义。以下是常用头文件列表:
#include <hevc/hevc.h>
#include <hevc/hevcdec.h>
#include <hevc/hevcps.h>
#include <hevc/hevcpred.h>
打开解码器
在使用 libhevc 库时,需要先打开解码器,并指定解码器的参数和输入数据格式。通常情况下,可以使用 hevc_parser_open() 和 hevc_decoder_open() 函数来打开解析器和解码器。
// 打开解析器
HevcParser *parser = hevc_parser_open();// 打开解码器
HevcDecoder *decoder = hevc_decoder_open();
decoder->set_option(decoder, "threads", "4"); // 设置解码线程数
decoder->set_option(decoder, "output-flags", "0"); // 设置输出标志
decoder->set_option(decoder, "verbose", "1"); // 设置输出详细信息
解码视频数据
在打开解码器之后,就可以读入 H.265/HEVC 视频数据并进行解码操作。通常情况下,我们可以使用 fread() 函数从文件中读取数据,然后调用 hevc_parser_decode() 和 hevc_decoder_decode() 函数进行语法单元解析和解码操作。
// 打开输入文件
FILE *infile = fopen("test.hevc", "rb");// 逐帧读取数据进行解码
while (fread(buffer, 1, size, infile) == size) {int data_len = size;// 解析语法单元HevcNalu nalu;while ((data_len = hevc_parser_decode(parser, buffer, data_len, &nalu)) > 0) {if (nalu.type == HEVC_NAL_UNIT_CODED_SLICE_IDR || nalu.type == HEVC_NAL_UNIT_CODED_SLICE) {// 解码视频数据HevcPicture *picture = NULL;hevc_decoder_decode(decoder, &nalu, &picture);// 处理解码结果if (picture != NULL) {printf("decoded frame size: %d x %d\n", picture->width, picture->height);hevc_picture_free(picture);}}}
}// 关闭输入文件
fclose(infile);
关闭解码器
结束解码操作后,需要释放相关资源并关闭解码器。通常情况下,可以使用 hevc_parser_close() 和 hevc_decoder_close() 函数来关闭解析器和解码器。
// 关闭解析器
hevc_parser_close(parser);// 关闭解码器
hevc_decoder_close(decoder);
总结
libhevc 库作为一个开源的 H.265/HEVC 编解码库,提供了完整的解码功能和接口,方便用户快速地进行 H.265/HEVC 视频的解码。libhevc 库具有良好的可移植性和扩展性,可以在多个平台上编译和运行。同时,libhevc 库的源码也由于其简单易懂的结构和清晰的编程风格,可以作为学习 H.265/HEVC 编解码技术的参考和示范。
相关文章:
Libhevc介绍
随着高清电视的普及和4K、8K超高清电视的出现,视频编解码技术也得到了广泛应用和发展。H.265/HEVC (High Efficiency Video Coding) 编解码标准作为一种新一代的视频编码技术,具有更高的压缩率和更好的画面质量,已经被成为未来视频编码的趋势…...
基于Tensorflow的最基本GAN网络模型
import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers import matplotlib.pyplot as plt %matplotlib inline import numpy as np import glob import os #(1)创建输入管道 # 导入原始数据 (train_images, train…...
数据质量管理概述
1、数据质量的概念 指的是在组织业务,管理要求下,符合数据使用者满足业务,管理需求的评价方式 2、数据质量管理的概念 3、4种常见低质量数据情况 1)重要数据缺失 有些信息暂时无法获取或者获取代价太大信息在采集输入中遗漏属…...
C++ const、volatile和mutable关键字详解
对于cv(const 与 volatile)类型限定符和关键字mutable在《cppreference》中的定义为: cv可出现于任何类型说明符中,以指定被声明对象或被命名类型的常量性(constness)或易变性(volatility&#…...
MySQL实验四:数据更新
MySQL实验四:数据更新 目录MySQL实验四:数据更新导读表结构sql建表语句模型图1、 SQL更新:将所有学生的年龄增加1岁代码2、SQL更新:修改“高等数学”课程倒数三名成绩,在原来分数上减5分代码解析3、SQl更新:…...
商汤科技推出“日日新SenseNova”,大模型体系赋能人工智能新未来
2023年4月10日,商汤科技SenseTime技术交流日活动在上海举行,分享了以“大模型大算力”推进AGI(通用人工智能)发展的战略布局,并公布了商汤在该战略下的“日日新SenseNova”大模型体系。 公开信息显示,商汤科…...
【中创AI】斯坦福人工智能年度报告:AI论文发表量中国世界第一!
斯坦福以人为本人工智能研究所 (HAI) 发布了最新一期的 2023 AI 指数 (2023 AI Index) 报告,探讨了过去一年机器学习的发展。 (斯坦福HAI于2019年初成立,致力于研究新的AI方法,并研究该技术对社会的影响。其每年发布一份AI指数报…...
Java基础(五)面向对象编程(基础)
学习面向对象内容的三条主线 Java类及类的成员:(重点)属性、方法、构造器;(熟悉)代码块、内部类面向对象的特征:封装、继承、多态、(抽象)其他关键字的使用:…...
寻找CSDN平行世界的另一个你
本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 寻找CSDN平行世界的另一个你摘要前言列表测试目的摘要 本文作了一个测试,看看在 CSDN 的博文中,艾特()某个好友,TA是否能够…...
ChatGPT的发展对客户支持能提供什么帮助?
多数组织认为客户服务是一种开销,实际上还可以将客户服务看成是一种机会。它可以让你在销售后继续推动客户的价值。成功的企业深知,客户服务不仅可以留住客户,还可以增加企业收入。客户服务是被低估的手段,它可以通过推荐、见证和…...
数据安全评估体系建设
数据安全评估是指对重要数据、个人信息等数据资产的价值与权益、合规性、威胁、脆弱性、防护等进行分析和判断,以评估数据安全事件发生的概率和可能造成的损失,并采取相应的措施和建议。 数据安全评估的重要性和背景 1.国家法律法规下的合规需要 目前数…...
论文阅读 - ANEMONE: Graph Anomaly Detection with Multi-Scale Contrastive Learning
目录 摘要 1 简介 2 问题陈述 3 PROPOSED ANEMONE FRAMEWORK 3.1 多尺度对比学习模型 3.1.1 增强的自我网络生成 3.1.2 补丁级对比网络 3.1.3 上下文级对比网络 3.1.4 联合训练 3.2 统计异常估计器 4 EXPERIMENTS 4.1 Experimental Setup 4.1.1 Datasets 4.1.2 …...
数据密集型应用存储与检索设计
本文内容翻译自《数据密集型应用系统设计》,豆瓣评分高达 9.7 分。 什么是「数据密集型应用系统」? 当数据(数据量、数据复杂度、数据变化速度)是一个应用的主要挑战,那么可以把这个应用称为数据密集型的。与之相对的是…...
Spring Boot集成Redis实现keyspace监听 | Spring Cloud 34
一、前言 在前面我们通过以下章节对Redis的keyevent(键事件通知)使用有了基础的了解: Spring Boot集成Redis实现keyevent监听 | Spring Cloud 33 现在开始我们正式学习Redis的keyspace(键空间通知),在本…...
如何搭建chatGPT4.0模型-国内如何用chatGPT4.0
国内如何用chatGPT4.0 在国内,目前可以通过以下途径使用 OpenAI 的 ChatGPT 4.0: 自己搭建模型:如果您具备一定的技术能力,可以通过下载预训练模型和相关的开发工具包,自行搭建 ChatGPT 4.0 模型。OpenAI提供了相关的…...
【故障定位】基于多元宇宙算法的主动配电网故障定位方法研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
基于html+css的自适应展示1
准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…...
DolphinDB +Python Airflow 高效实现数据清洗
DolphinDB 作为一款高性能时序数据库,其在实际生产环境中常有数据的清洗、装换以及加载等需求,而对于该如何结构化管理好 ETL 作业,Airflow 提供了一种很好的思路。本篇教程为生产环境中 ETL 实践需求提供了一个解决方案,将 Pytho…...
pip3 升级软件包时遇到超时错误解决方法
如果你在使用 pip3 升级软件包时遇到超时错误,可能是因为下载速度缓慢或网络不稳定。以下是解决方法: 更改 pip3 源:你可以切换到其他 pip3 源,例如清华、阿里等等,以提高下载速度。 pip3 install -i https://pypi.tun…...
Linux环境开机自启动
1.制作服务 在/etc/systemd/system/路径下创建kkFile.service文件 cd /etc/systemd/system/ vim kkFile.service2.写入如下内容 [Unit] DescriptionkkFile service [Service] Typeforking ExecStart/sinosoft/yjya/kkFileView-4.0.0/bin/startup.sh [Install] WantedBymulti…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...
验证redis数据结构
一、功能验证 1.验证redis的数据结构(如字符串、列表、哈希、集合、有序集合等)是否按照预期工作。 2、常见的数据结构验证方法: ①字符串(string) 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...
Pandas 可视化集成:数据科学家的高效绘图指南
为什么选择 Pandas 进行数据可视化? 在数据科学和分析领域,可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具,如 Matplotlib、Seaborn、Plotly 等,但 Pandas 内置的可视化功能因其与数据结…...
