当前位置: 首页 > news >正文

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超高清电视的出现&#xff0c;视频编解码技术也得到了广泛应用和发展。H.265/HEVC (High Efficiency Video Coding) 编解码标准作为一种新一代的视频编码技术&#xff0c;具有更高的压缩率和更好的画面质量&#xff0c;已经被成为未来视频编码的趋势…...

基于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 #&#xff08;1&#xff09;创建输入管道 # 导入原始数据 (train_images, train…...

数据质量管理概述

1、数据质量的概念 指的是在组织业务&#xff0c;管理要求下&#xff0c;符合数据使用者满足业务&#xff0c;管理需求的评价方式 2、数据质量管理的概念 3、4种常见低质量数据情况 1&#xff09;重要数据缺失 有些信息暂时无法获取或者获取代价太大信息在采集输入中遗漏属…...

C++ const、volatile和mutable关键字详解

对于cv&#xff08;const 与 volatile&#xff09;类型限定符和关键字mutable在《cppreference》中的定义为&#xff1a; cv可出现于任何类型说明符中&#xff0c;以指定被声明对象或被命名类型的常量性&#xff08;constness&#xff09;或易变性&#xff08;volatility&#…...

MySQL实验四:数据更新

MySQL实验四&#xff1a;数据更新 目录MySQL实验四&#xff1a;数据更新导读表结构sql建表语句模型图1、 SQL更新&#xff1a;将所有学生的年龄增加1岁代码2、SQL更新&#xff1a;修改“高等数学”课程倒数三名成绩&#xff0c;在原来分数上减5分代码解析3、SQl更新&#xff1a…...

商汤科技推出“日日新SenseNova”,大模型体系赋能人工智能新未来

2023年4月10日&#xff0c;商汤科技SenseTime技术交流日活动在上海举行&#xff0c;分享了以“大模型大算力”推进AGI&#xff08;通用人工智能&#xff09;发展的战略布局&#xff0c;并公布了商汤在该战略下的“日日新SenseNova”大模型体系。 公开信息显示&#xff0c;商汤科…...

【中创AI】斯坦福人工智能年度报告:AI论文发表量中国世界第一!

斯坦福以人为本人工智能研究所 (HAI) 发布了最新一期的 2023 AI 指数 (2023 AI Index) 报告&#xff0c;探讨了过去一年机器学习的发展。 &#xff08;斯坦福HAI于2019年初成立&#xff0c;致力于研究新的AI方法&#xff0c;并研究该技术对社会的影响。其每年发布一份AI指数报…...

Java基础(五)面向对象编程(基础)

学习面向对象内容的三条主线 Java类及类的成员&#xff1a;&#xff08;重点&#xff09;属性、方法、构造器&#xff1b;&#xff08;熟悉&#xff09;代码块、内部类面向对象的特征&#xff1a;封装、继承、多态、&#xff08;抽象&#xff09;其他关键字的使用&#xff1a;…...

寻找CSDN平行世界的另一个你

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 寻找CSDN平行世界的另一个你摘要前言列表测试目的摘要 本文作了一个测试&#xff0c;看看在 CSDN 的博文中&#xff0c;艾特&#xff08;&#xff09;某个好友&#xff0c;TA是否能够…...

ChatGPT的发展对客户支持能提供什么帮助?

多数组织认为客户服务是一种开销&#xff0c;实际上还可以将客户服务看成是一种机会。它可以让你在销售后继续推动客户的价值。成功的企业深知&#xff0c;客户服务不仅可以留住客户&#xff0c;还可以增加企业收入。客户服务是被低估的手段&#xff0c;它可以通过推荐、见证和…...

数据安全评估体系建设

数据安全评估是指对重要数据、个人信息等数据资产的价值与权益、合规性、威胁、脆弱性、防护等进行分析和判断&#xff0c;以评估数据安全事件发生的概率和可能造成的损失&#xff0c;并采取相应的措施和建议。 数据安全评估的重要性和背景 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 …...

数据密集型应用存储与检索设计

本文内容翻译自《数据密集型应用系统设计》&#xff0c;豆瓣评分高达 9.7 分。 什么是「数据密集型应用系统」&#xff1f; 当数据&#xff08;数据量、数据复杂度、数据变化速度&#xff09;是一个应用的主要挑战&#xff0c;那么可以把这个应用称为数据密集型的。与之相对的是…...

Spring Boot集成Redis实现keyspace监听 | Spring Cloud 34

一、前言 在前面我们通过以下章节对Redis的keyevent&#xff08;键事件通知&#xff09;使用有了基础的了解&#xff1a; Spring Boot集成Redis实现keyevent监听 | Spring Cloud 33 现在开始我们正式学习Redis的keyspace&#xff08;键空间通知&#xff09;&#xff0c;在本…...

如何搭建chatGPT4.0模型-国内如何用chatGPT4.0

国内如何用chatGPT4.0 在国内&#xff0c;目前可以通过以下途径使用 OpenAI 的 ChatGPT 4.0&#xff1a; 自己搭建模型&#xff1a;如果您具备一定的技术能力&#xff0c;可以通过下载预训练模型和相关的开发工具包&#xff0c;自行搭建 ChatGPT 4.0 模型。OpenAI提供了相关的…...

【故障定位】基于多元宇宙算法的主动配电网故障定位方法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&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 作为一款高性能时序数据库&#xff0c;其在实际生产环境中常有数据的清洗、装换以及加载等需求&#xff0c;而对于该如何结构化管理好 ETL 作业&#xff0c;Airflow 提供了一种很好的思路。本篇教程为生产环境中 ETL 实践需求提供了一个解决方案&#xff0c;将 Pytho…...

pip3 升级软件包时遇到超时错误解决方法

如果你在使用 pip3 升级软件包时遇到超时错误&#xff0c;可能是因为下载速度缓慢或网络不稳定。以下是解决方法&#xff1a; 更改 pip3 源&#xff1a;你可以切换到其他 pip3 源&#xff0c;例如清华、阿里等等&#xff0c;以提高下载速度。 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的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

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&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&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开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...

验证redis数据结构

一、功能验证 1.验证redis的数据结构&#xff08;如字符串、列表、哈希、集合、有序集合等&#xff09;是否按照预期工作。 2、常见的数据结构验证方法&#xff1a; ①字符串&#xff08;string&#xff09; 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...

Pandas 可视化集成:数据科学家的高效绘图指南

为什么选择 Pandas 进行数据可视化&#xff1f; 在数据科学和分析领域&#xff0c;可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具&#xff0c;如 Matplotlib、Seaborn、Plotly 等&#xff0c;但 Pandas 内置的可视化功能因其与数据结…...