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

FFMPEG编码容错处理解决办法之途径----升级库文件

在qt开发环境下接收网络数据,调用ffmpeg解码播放视频,出现闪屏现象,具体现象可以使用操作系统自带的ffplay播放器播放原始视频流可复现;而使用操作系统自带的mpv播放器播放视频则不会出现闪屏;闪屏时会报Could not find ref with POC xx错误(由于是无线通信该错误无法避免)要求能达到mpv的播放效果就行,具体实现方式不限。 

根本解决方法:通过测试不同版本的pplay功能,哪个版本容错能力强就用哪个版本。

当只使用 I 帧进行编码时,编码时间较短,但生成的视频流较长;而加入 P B 帧后,会使编码时间变长,但生成的视频流长度只有纯 I 帧编码的 25%。因此,P B 帧的加入本质上是用时间换空间的思路(跟算法设计思路刚好反过来)。

将无线传输过来的UDP协议视频,将UDP去掉包头及包尾将数据组合成一帧编码数据后保存成h265裸流文件。用ffmpeg4.2.2的命令ffplay播放有花屏现象并伴随报错误Could not  find ref with POC xx。但是利用mpv播放虽然也有报错Could not  find ref with POC xx但是不花屏。将一帧H265编码数据组成一帧后送入函数 avcodec_send_packet(进行解码)和avcodec_receive_frame(从解码的图像中获取YUV图像)这些函数的返回值也是对的。

为此解决此问题用到的方法进行梳理如下:

方法1、加入数据缓冲器---有少部分改善

        由原来的收到一帧就进行处理修改为根据UDP协议序号帧收满数据后,再直接送入解码器进行解码(开辟有缓冲器)。

方法2、硬件解码---效果不明显

硬件解码数据不能为RGB24,

方法3、OPenGL显示图像数据--效果不明显

通过加入库文件进行显示

方法4、 MPV与FFMPEG播放处理不通--确定问题解决思路

发现MPV虽然是基于FFMPEG库上开发的但是对FFMPEG进行了优化,其播放效果优于FFMPEG

方法5、更新FFMPEG库---效果明显

Step 1 下载并编译FFMPEG库

1)下载ffmpeg源代码

说明:

ffmpeg下载地址 http://ffmpeg.org/releases/

点击Last modified(最后修改内容可看到最新版本--其实是快照版本)

  • Snapshot版本‌:这是一种开发中的版本,表示该版本尚未正式发布,可能会频繁发生变化。它主要用于开发阶段,特别是多个团队或模块之间协同开发时,确保依赖的模块始终是最新的。‌12
  • Release版本‌:这是一种正式发布的版本,表示该版本已经经过测试和验证,不会再有频繁的变化。它通常用于生产环境,确保依赖的版本是稳定和可靠的。

2) ffmpeg编译安装
首先,将下载好的ffmpeg压缩包解压。输入解压bz2压缩文件的命令

sudo tar -xjf ffmpeg-snapshot.tar.bz2

然后进入解压后的文件夹,打开终端,设置安装配置,配置文件是configure,在编译和安装之前,需要配置一下,不然无法执行编译指令.

配置configure的指令为:(注意将--enable-libx264去掉,否则配置报错)

sudo ./configure --enable-gpl --enable-libx264 --prefix=/media/cssc/708/ZHKZ/YTHWQ/FFMPEG_BUILD/ffmpeg-build --enable-shared

其中,gpl和libx264是额外的库,可根据情况选择,默认都是disable。
--prefix:指定安装路径,如果不指定,头文件会默认安装在/usr/local/include,库会默认在/usr/local/lib
--enable-shared:选择编译动态库,如果不加上这一句,编译出来的只有静态库(.a),加上之后才有动态库(.so)

配置完以后,执行编译和安装命令:

make -j8 && sudo make install
其中,make -j8:多线程编译的意思,加快编译速度,当然也要看电脑最大线程数。make install:安装各种头文件和库,要加上sudo,不然建不了文件夹。

编译以及安装完之后,在ffmpeg-build文件夹下会多出四个文件夹,bin、include、lib、share;

如果没有指定安装路径,bin文件夹下的两个文件会默认至/usr/local/bin/
include文件夹下的内容会默认在/usr/local/include/下
lib文件夹下的内容会默认在/usr/local/lib/下
share文件夹下的内容默认在/usr/local/share/下

除此之外,还需要注意一点,每次编译之前都需要配置configure,上次的配置在此次编译无效

3)添加环境变量

打开ffmpeg(安装后的)下的bin,执行./ffmpeg -version会出现报错信息:这是因为ffmpeg库没有链接到系统库里边,建立链接有两种办法,第一种在环境变量中添加ffmpeg库路径,第二种是在/etc/ld.so.conf.d文件夹下建立ffmpeg.conf,推荐使用第一种,更简单快捷一些,第二种权当记录在此。

第一种方法:

将ffmpeg添加到环境变量,首先执行 

sudo gedit /etc/profile

在文件末尾添加ffmpeg主程序路径和库路径:(也可命令行执行只对当前cmd用户有效)

export PATH=$PATH:/media/cssc/708/ZHKZ/YTHWQ/FFMPEG_BUILD/ffmpeg-build/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/media/cssc/708/ZHKZ/YTHWQ/FFMPEG_BUILD/ffmpeg-build/lib

保存后,再执行   

source /etc/profile

再次执行ffmpeg -version就可以正常显示ffmpeg版本信息了,也不用进入ffmpeg-build/bin下了。不仅可以看到版本信息,还能看到编译ffmpeg时的configure配置信息,以及库的版本。

补充说明:除了用新版本可以解决视频解码播放花屏问题,同时也尝试基于FFMPEG4.2.2版本的MPV库进行播放,因为MPV库对FFMPEG库进行了优化。

方法6、采用MPV库---效果明显

linux下GPU硬件解码接口,常用的有vdpau和vaapi。mpv是基于mplayer开发的一个播放器。此外,mpv还提供了函数库libmpv,通过使用libmpv可以编写一个简单的播放器。

mpv是一款一优秀的播放器。由于需要将其内嵌到代码中,所以需要将其编译成动态库的形式使用。编译流程如下:

1)mpv源码URL

             URL1:  https://github.com/mpv-player/mpv     

             URL2: https://github.com/mpv-player/mpv-build  

URL1是mpv的源码,而URL2是将源码和其所需要的库做了一个整合脚本。此文档使用URL2进行编译安装。

windows环境下的64为开发库的下载地址为:https://sourceforge.net/projects/mpv-player-windows/进入后页面如下,选择dev x86-64位的压缩包进行下载。

2)mpv编译安装流程记录:

相关文章:

FFMPEG编码容错处理解决办法之途径----升级库文件

在qt开发环境下接收网络数据,调用ffmpeg解码播放视频,出现闪屏现象,具体现象可以使用操作系统自带的ffplay播放器播放原始视频流可复现;而使用操作系统自带的mpv播放器播放视频则不会出现闪屏;闪屏时会报Could not fin…...

uniapp h5端和app端 使用 turn.js

前提:添加页后,添加页与当前页会重叠在一起,不知道为什么,没有找到解决办法 1.h5端 <template><view class"container"><view id"flipbook"><view class"page page1">Page 1</view><view class"page pag…...

【idea问题排查技巧】

以下是针对 IDEA 中 日志打标(动态标记) 和 全链路追踪 功能的分步详解,结合具体场景和操作截图说明,帮助快速掌握实战技巧。 一、动态日志打标:不修改代码输出关键信息 1. 断点日志打印(非侵入式打标) 场景:在调试时,需要临时查看某个变量的值,但不想修改代码添加…...

【入门音视频】音视频基础知识

&#x1f308;前言&#x1f308; 这个系列在我学习过程中&#xff0c;对音视频知识归纳总结的笔记。因为音视频相关讲解非常稀少&#xff0c;所以我希望通过这个音视频系列&#xff0c;跟大家一起学习音视频&#xff0c;希望减少初学者在学习上的压力。同时希望也欢迎指出文章的…...

JMeter性能问题

性能测试中TPS上不去的几种原因 性能测试中TPS上不去的几种原因_tps一直上不去-CSDN博客 网络带宽 连接池 垃圾回收机制 压测脚本 通信连接机制 数据库配置 硬件资源 压测机 业务逻辑 系统架构 CPU过高什么原因 性能问题分析-CPU偏高 - 西瓜汁拌面 - 博客园 US C…...

软考高级信息系统项目管理师笔记-第2章信息技术发展

第2章 信息技术发展 2.1 信息技术及其发展 1、按表现形态的不同,信息技术可分为硬技术(物化技术)与软技术(非物化技术)。前者指各种信息设备及其功 能,如传感器、服务器、智能手机、通信卫星、笔记本电脑。后者指有关信息获取与处理的各种知识、方法 与技能,如语言文字…...

大语言模型(LLM)提示词(Prompt)高阶撰写指南

——结构化思维与工程化实践 一、LLM提示词设计的核心逻辑 1. 本质认知 LLM是「超强模式识别器概率生成器」&#xff0c;提示词的本质是构建数据分布约束&#xff0c;通过语义信号引导模型激活特定知识路径。优秀提示词需实现&#xff1a; 精准性&#xff1a;消除歧义&#…...

捷 C++ 课程学习笔记:STL 应用与复杂度分析

一、STL 六大组件 STL&#xff08;Standard Template Library&#xff09;是 C 标准库的重要组成部分&#xff0c;提供了通用的模板类和函数&#xff0c;用于实现常用的数据结构和算法。STL 主要包括以下六大组件&#xff1a; 容器&#xff08;Containers&#xff09;&#xf…...

【python】提取word\pdf格式内容到txt文件

一、使用pdfminer提取 import os import re from pdfminer.high_level import extract_text import docx2txt import jiebadef read_pdf(file_path):"""读取 PDF 文件内容:param file_path: PDF 文件路径:return: 文件内容文本"""try:text ext…...

数据结构☞泛型

一.基础定义与应用方向 1.定义&#xff1a; 一般的类和方法&#xff0c;只能使用具体的类型 : 要么是基本类型&#xff0c;要么是自定义的类。如果要编写可以 应用于多种类型 的代码&#xff0c;这种刻板的限制对代码的束缚就会很大。----- 来源《 Java 编程思想》对泛型的介…...

MFC学习笔记-1

一、编辑框和按钮 //.h文件private:CString str;//给窗口类加了一个变量&#xff08;定义一个成员变量&#xff09;&#xff0c;关联到IDC_EDIT1中&#xff08;要在实现中关联&#xff0c;源文件文件夹中&#xff09;CString str2;//接收button2&#xff0c;和IDC_EDIT2绑定 p…...

html中rel、href、src、url的区别

1.url url&#xff08;统一资源定位符&#xff09;&#xff1a;是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示&#xff0c;是互联网上标准资源的地址。 2.href href&#xff1a;Hypertext Reference的缩写。 意思是超文本引用。 3.rel rel&#xff1a;relatio…...

hot100-二叉树

二叉树 二叉树递归 相当于这个的顺序来回调换 class Solution {private List<Integer> res new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {if(root null)return res;inorderTraversal(root.left);res.add(root.val);inorde…...

嵌入式项目:STM32刷卡指纹智能门禁系统

本文详细介绍基于STM32的刷卡指纹智能门禁系统。 获取资料/指导答疑/技术交流/选题/帮助&#xff0c;请点链接&#xff1a; https://gitee.com/zengzhaorong/share_contact/blob/master/stm32.txt 1 系统功能 1.1 功能概述 本系统由STM32硬件端&#xff08;下位机&#xff09;…...

短剧小程序系统源码

短剧小程序系统源码 今天我要向大家介绍的是最新作品——短剧小程序系统源码。这不仅仅是一款简单的播放工具&#xff0c;它背后蕴含的强大功能能够帮助你的短剧业务实现质的飞跃&#xff01; 为什么说这款源码很厉害&#xff1f; 首先&#xff0c;在当今竞争激烈的市场环境…...

鸿蒙5.0实战案例:基于measure实现的文本测量

往期推文全新看点&#xff08;文中附带全新鸿蒙5.0全栈学习笔录&#xff09; ✏️ 鸿蒙&#xff08;HarmonyOS&#xff09;北向开发知识点记录~ ✏️ 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…...

C#中级教程(2)——走进 C# 面向对象编程:从基础到进阶的深度探索

一、为什么选择面向对象编程 在软件开发的演进过程中&#xff0c;随着程序规模和复杂度的不断增加&#xff0c;传统的编程方式逐渐暴露出局限性。面向对象编程应运而生&#xff0c;它就像是一位智慧的组织者&#xff0c;将程序中的功能进行模块化划分。每个模块各司其职&#x…...

基于SpringBoot的“流浪动物救助系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“流浪动物救助系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统…...

基于WebRTC与AI大模型接入EasyRTC:打造轻量级、高实时、强互动的嵌入式音视频解决方案

随着物联网和嵌入式技术的快速发展&#xff0c;嵌入式设备对实时音视频通信的需求日益增长。然而&#xff0c;传统的音视频解决方案往往存在体积庞大、实时性差、互动体验不佳等问题&#xff0c;难以满足嵌入式设备的资源限制和应用场景需求。 针对以上痛点&#xff0c;本文将介…...

Windows - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式

Windows(奇思妙想) - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式 前言 Windows启用OpenSSH客户端后就可以通过SSH的方式访问Windows了。但是通过SSH启动的程序&#xff1a; 无法显示图形界面会随着SSH进程的结束而结束 于是想到了一种通过执行“计划…...

应用层的协议-http/https的状态码

1xx&#xff1a;表示临时响应&#xff0c;需要操作者继续操作 2xx&#xff1a;成功&#xff0c;操作被成功接受并处理 3xx&#xff1a;一般是重定向问题 4xx&#xff1a;客户端的问题 5xx&#xff1a;服务端的问题 1xx&#xff1a; 100: 表示服务器收到客户端的第一部分请…...

前端Sass面试题及参考答案

目录 什么是 Sass? Sass 和 CSS 的主要区别是什么? Sass 中如何处理列表? Sass 中如何处理映射(map)? Sass 中如何使用函数? Sass 中如何使用内置函数? Sass 中如何设置默认值? Sass 中的 @function 和 @mixin 有什么区别? Sass 中如何实现模块化? Sass 中…...

python采集京东商品详情API接口系列,json数据示例返回

在Python中采集京东商品详情API接口的数据&#xff0c;你需要与京东开放平台&#xff08;现已更名为京东联盟开放平台&#xff09;进行交互。京东开放平台提供了多种API接口&#xff0c;用于访问京东的商品数据、用户数据等。然而&#xff0c;需要注意的是&#xff0c;京东对于…...

RT-Thread+STM32L475VET6——USB鼠标模拟

文章目录 前言一、板载资源二、具体步骤1.配置icm20608传感器2.打开CubeMX进行USB配置3. 配置USB3.1 打开USB驱动3.2 声明USB3.3 剪切stm32xxxx_hal_msp.c中的void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd)和void HAL_PCD_MspDeInit(PCD_HandleTypeDef* hpcd)函数至board.c3.…...

计算机毕业设计SpringBoot+Vue.js母婴商城(源码+LW文档+PPT+讲解+开题报告)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

Teigha(ODA<Open Design Alliance>_开放设计联盟)——cad c# 二次开发

需将dll库文件与exe文件放同一路径下&#xff0c;运行exe即可执行。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Thread…...

Java 中 HTTP 协议版本使用情况剖析

Java 中 HTTP 协议版本使用情况剖析 一、HTTP/1.1 与 HTTP/2 概述 (一)HTTP/1.1 HTTP/1.1 是广泛应用且成熟的 HTTP 协议版本,它在互联网发展历程中扮演了重要角色。其特点主要包括: 连接方式:默认采用短连接,即每次请求都要建立新的 TCP 连接,请求完成后断开。不过也…...

Zama fhEVM应用:摩根大通旗下 Kinexys 发布概念验证

1. 引言 Zama 全同态加密 (FHE) 技术在摩根大通的 Kinexys&#xff08;以前称为 Onyx&#xff09;中成功进行了概念验证。该概念验证是“EPIC 项目&#xff1a;通过链上企业隐私、身份和可组合性推动代币化金融”的一部分&#xff0c;在 Kinexys 数字资产沙盒&#xff08;以前…...

idea 部署 AJ-Report 启动的注意事项

AJ-Report 入门参考&#xff1a; AJ-Report 初学(入门教程) gitee 下载&#xff1a;https://gitee.com/anji-plus/report/releases 根据上面提供的 gitee 下载链接&#xff0c;点击直接下载 最上面的就是最新版本的&#xff0c;旧版本往下拉就可以找到&#xff0c;有三个下载…...

智能化客户行为轨迹分析:AI视频监控在大型商场的技术方案

项目背景&#xff1a;为了提升顾客体验并支持精准营销&#xff0c;卖场或商场需要通过智能化手段分析客户在商场内的行为路线。 一、具体需求 1、行为路径分析&#xff1a;跟踪顾客在商场内的移动轨迹&#xff0c;了解顾客的购物习惯和偏好。 2、高频活动区域识别&#xff1a…...