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

OpenHarmony 5.0 mpegts封装的H265视频播放失败的解决方案

问题现象

OpenHarmony 5.0版本使用AVPlayer播放mpegts封装格式的H.265(HEVC)编码格式的视频时出现报错导致播放失败

问题原因

OpenHarmony 5.0版本AVPlayer播放器使用histreamer引擎,因为 libav_codec_hevc_parser.z.so 动态库未开源导致H265编码格式视频解析不到正确的宽高,硬件解码器框架层初始化时因为分辨率不合理导致报错

解决方案

版本信息

OpenHarmony-v5.0.1-Release 和 OpenHarmony-v5.0.2-Release 标准系统

方案一:设置默认的分辨率

修改 foundation/multimedia/av_codec/services/media_engine/plugins/ffmpeg_adapter/demuxer/ffmpeg_format_helper.cpp 文件,"+"符号为新增的代码

void FFmpegFormatHelper::ParseVideoTrackInfo(const AVStream& avStream, Meta &format,const AVFormatContext& avFormatContext)
{format.Set<Tag::VIDEO_WIDTH>(static_cast<uint32_t>(avStream.codecpar->width));format.Set<Tag::VIDEO_HEIGHT>(static_cast<uint32_t>(avStream.codecpar->height));format.Set<Tag::VIDEO_DELAY>(static_cast<uint32_t>(avStream.codecpar->video_delay));+   if ((avStream.codecpar->width <=0 || avStream.codecpar->height <=0) && (avStream.codecpar->codec_id == AV_CODEC_ID_HEVC)) {
+       format.Set<Tag::VIDEO_WIDTH>(1920);
+       format.Set<Tag::VIDEO_HEIGHT>(1080);
+   }double frameRate = 0;...
}

如果demuxer未解析到H265视频的分辨率,设置默认值用于初始化解码器,分辨率的默认值需要在codec hcs配置文件的分辨率范围内(minWidth和maxWidth,minHeight和maxHeight之间)

方案二:打开ffmpeg hevc软解用于解析分辨率

1、third_party/ffmpeg/BUILD.gn 新增h265 parser和decoder源文件编译

ohos_source_set("ffmpeg_dynamic") {source = [..."//third_party/ffmpeg/libavcodec/dovi_rpu.c","//third_party/ffmpeg/libavcodec/dynamic_hdr10_plus.c","//third_party/ffmpeg/libavcodec/dynamic_hdr_vivid.c","//third_party/ffmpeg/libavcodec/hevc_cabac.c","//third_party/ffmpeg/libavcodec/hevc_data.c","//third_party/ffmpeg/libavcodec/hevc_filter.c","//third_party/ffmpeg/libavcodec/hevc_mvs.c","//third_party/ffmpeg/libavcodec/hevc_parse.c","//third_party/ffmpeg/libavcodec/hevc_parser.c","//third_party/ffmpeg/libavcodec/hevc_ps.c","//third_party/ffmpeg/libavcodec/hevc_refs.c","//third_party/ffmpeg/libavcodec/hevc_sei.c","//third_party/ffmpeg/libavcodec/hevcdec.c","//third_party/ffmpeg/libavcodec/hevcdsp.c","//third_party/ffmpeg/libavcodec/hevcpred.c","//third_party/ffmpeg/libavutil/hdr_dynamic_vivid_metadata.c",]...
}

注意:如果是64位平台,还需要添加//third_party/ffmpeg/libavcodec/aarch64 目录下的部分文件,
另外可能需要修改libavcodec/hevcdec.c的部分代码以通过编译
2、third_party/ffmpeg/ohos_config.sh 新增h265 parser和decoder配置
修改1有两处

-    "--enable-parser=h263,h264,mpeg4video,vp8,vp9,mpegvideo" 
+    "--enable-parser=h263,h264,mpeg4video,vp8,vp9,mpegvideo,hevc"

修改2有两处

-    "--enable-decoder=h263,h264,mpeg2video,mpeg4,vp8,vp9"   
+    "--enable-decoder=h263,h264,mpeg2video,mpeg4,vp8,vp9,hevc"

结语

修改后验证播放mpegts封装的H.265格式的视频走硬件解码可以正常播放。
下一篇文章更新mp4封装的H265视频播放失败的解决方案。

相关文章:

OpenHarmony 5.0 mpegts封装的H265视频播放失败的解决方案

问题现象 OpenHarmony 5.0版本使用AVPlayer播放mpegts封装格式的H.265(HEVC)编码格式的视频时出现报错导致播放失败 问题原因 OpenHarmony 5.0版本AVPlayer播放器使用histreamer引擎&#xff0c;因为 libav_codec_hevc_parser.z.so 动态库未开源导致H265编码格式视频解析不到…...

Qt从入门到入土(九) -model/view(模型/视图)框架

简介 Qt的模型/视图&#xff08;Model/View&#xff09;架构是一种用于分离数据处理和用户界面展示的设计模式。它允许开发者将数据存储和管理&#xff08;模型&#xff09;与数据的显示和交互&#xff08;视图&#xff09;解耦&#xff0c;从而提高代码的可维护性和可扩展性。…...

缓存之美:Guava Cache 相比于 Caffeine 差在哪里?

大家好&#xff0c;我是 方圆。本文将结合 Guava Cache 的源码来分析它的实现原理&#xff0c;并阐述它相比于 Caffeine Cache 在性能上的劣势。为了让大家对 Guava Cache 理解起来更容易&#xff0c;我们还是在开篇介绍它的原理&#xff1a; Guava Cache 通过分段&#xff08;…...

[漏洞篇]XSS漏洞详解

[漏洞篇]XSS漏洞 一、 介绍 概念 XSS&#xff1a;通过JS达到攻击效果 XSS全称跨站脚本(Cross Site Scripting)&#xff0c;为避免与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆&#xff0c;故缩写为XSS。这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以…...

【Leetcode 每日一题】2269. 找到一个数字的 K 美丽值

问题背景 一个整数 n u m num num 的 k k k 美丽值定义为 n u m num num 中符合以下条件的 子字符串 数目&#xff1a; 子字符串长度为 k k k。子字符串能整除 n u m num num。 给你整数 n u m num num 和 k k k&#xff0c;请你返回 n u m num num 的 k k k 美丽值…...

IO进程线程(线程)

作业 1.创建两个线程&#xff0c;分支线程1拷贝文件的前一部分&#xff0c;分支线程2拷贝文件的后一部分 2.创建三个线程&#xff0c;实现线程A打印A&#xff0c;线程B打印B&#xff0c;线程C打印C&#xff1b;重复打印顺序ABC。 信号量实现&#xff1a; 条件变量实现&#x…...

1-002:MySQL InnoDB引擎中的聚簇索引和非聚簇索引有什么区别?

在 MySQL InnoDB 存储引擎 中&#xff0c;索引主要分为 聚簇索引&#xff08;Clustered Index&#xff09; 和 非聚簇索引&#xff08;Secondary Index&#xff09;。它们的主要区别如下&#xff1a; 1. 聚簇索引&#xff08;Clustered Index&#xff09; 定义 聚簇索引是表数…...

tomcat单机多实例部署

一、部署方法 多实例可以运行多个不同的应用&#xff0c;也可以运行相同的应用&#xff0c;类似于虚拟主机&#xff0c;但是他可以做负载均衡。 方式一&#xff1a; 把tomcat的主目录挨个复制&#xff0c;然后把每台主机的端口给改掉就行了。 优点是最简单最直接&#xff0c;…...

论文阅读分享——UMDF(AAAI-24)

概述 题目&#xff1a;A Unified Self-Distillation Framework for Multimodal Sentiment Analysis with Uncertain Missing Modalities 发表&#xff1a;The Thirty-Eighth AAAI Conference on Artificial Intelligence (AAAI-24) 年份&#xff1a;2024 Github&#xff1a;暂…...

解决asp.net mvc发布到iis下安全问题

解决asp.net mvc发布到iis下安全问题 环境信息1.The web/application server is leaking version information via the "Server" HTTP response2.确保您的Web服务器、应用程序服务器、负载均衡器等已配置为强制执行Strict-Transport-Security。3.在HTML提交表单中找不…...

概念|RabbitMQ 消息生命周期 待消费的消息和待应答的消息有什么区别

目录 消息生命周期 一、消息创建与发布阶段 二、消息路由与存储阶段 三、消息存活与过期阶段 四、消息投递与消费阶段 五、消息生命周期终止 关键配置建议 待消费的消息和待应答的消息 一、待消费的消息&#xff08;Unconsumed Messages&#xff09; 二、待应答的消息…...

springboot三层架构详细讲解

目录 springBoot三层架构 0.简介1.各层架构 1.1 Controller层1.2 Service层1.3 ServiceImpl1.4 Mapper1.5 Entity1.6 Mapper.xml 2.各层之间的联系 2.1 Controller 与 Service2.2 Service 与 ServiceImpl2.3 Service 与 Mapper2.4 Mapper 与 Mapper.xml2.5 Service 与 Entity2…...

2025最新群智能优化算法:云漂移优化(Cloud Drift Optimization,CDO)算法求解23个经典函数测试集,MATLAB

一、云漂移优化算法 云漂移优化&#xff08;Cloud Drift Optimization&#xff0c;CDO&#xff09;算法是2025年提出的一种受自然现象启发的元启发式算法&#xff0c;它模拟云在大气中漂移的动态行为来解决复杂的优化问题。云在大气中受到各种大气力的影响&#xff0c;其粒子的…...

2025年Draw.io最新版本下载安装教程,附详细图文

2025年Draw.io最新版本下载安装教程&#xff0c;附详细图文 大家好&#xff0c;今天给大家介绍一款非常实用的流程图绘制软件——Draw.io。不管你是平时需要设计流程图、绘制思维导图&#xff0c;还是制作架构图&#xff0c;甚至是简单的草图&#xff0c;它都能帮你轻松搞定。…...

记录--洛谷 P1451 求细胞数量

如果想查看完整题目&#xff0c;请前往洛谷 P1451 求细胞数量 P1451 求细胞数量 题目描述 一矩形阵列由数字 0 0 0 到 9 9 9 组成&#xff0c;数字 1 1 1 到 9 9 9 代表细胞&#xff0c;细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞&#xff0c;求给定矩形…...

Android Studio 配置国内镜像源

Android Studio版本号&#xff1a;2022.1.1 Patch 2 1、配置gradle国内镜像&#xff0c;用腾讯云 镜像源地址&#xff1a;https\://mirrors.cloud.tencent.com/gradle 2、配置Android SDK国内镜像 地址&#xff1a;Index of /AndroidSDK/...

做到哪一步才算精通SQL

做到哪一步才算精通SQL-Structured Query Language 数据定义语言 DDL for StructCREATE&#xff1a;用来创建数据库、表、索引等对象ALTER&#xff1a;用来修改已存在的数据库对象DROP&#xff1a;用来删除整个数据库或者数据库中的表TRUNCATE&#xff1a;用来删除表中所有的行…...

Manus演示案例: 英伟达财务估值建模 解锁投资洞察的深度剖析

在当今瞬息万变的金融投资领域&#xff0c;精准剖析企业价值是投资者决胜市场的关键。英伟达&#xff08;NVIDIA&#xff09;&#xff0c;作为科技行业的耀眼明星&#xff0c;其在人工智能和半导体领域的卓越表现备受瞩目。Manus 凭借专业的财务估值建模能力&#xff0c;深入挖…...

postman接口请求中的 Raw是什么

前言 在现代的网络开发中&#xff0c;API 的使用已经成为数据交换的核心方式之一。然而&#xff0c;在与 API 打交道时&#xff0c;关于如何发送请求体&#xff08;body&#xff09;内容类型的问题常常困扰着开发者们&#xff0c;尤其是“raw”和“json”这两个术语之间的区别…...

DeepSeek大语言模型下几个常用术语

昨天刷B站看到复旦赵斌老师说的一句话“科幻电影里在人脑中植入芯片或许在当下无法实现&#xff0c;但当下可以借助AI人工智能实现人类第二脑”&#xff08;大概是这个意思&#xff09; &#x1f49e;更多内容&#xff0c;可关注公众号“ 一名程序媛 ”&#xff0c;我们一起从 …...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...