首页 > 编程语言 >【HarmonyOS】【续集】实现从视频提取音频并保存到pcm文件功能(API6 Java)

【HarmonyOS】【续集】实现从视频提取音频并保存到pcm文件功能(API6 Java)

时间:2023-08-08 10:46:44浏览次数:60  
标签:视频 Java getAudioTime 音频 HarmonyOS pcm 播放 解码

【关键字】

视频提取类Extractor、视频编解码、保存pcm文件、getAudioTime

 

【背景和问题】

上篇中介绍了从视频提取音频并保存到pcm文件功能,请参考文档:https://developer.huawei.com/consumer/cn/forum/topic/0209125665541017202?fid=0101591351254000314,解码步骤使用的是普通模式进行解码,测试过程中发现此模式从视频提取音频到保存文件整体流程耗时较长,可能十几秒视频读取需要一两分钟,主要普通模式解码过程比较耗时,本文针对此问题提供解决方案。

 

【解决方案】

关于视频编解码开发指导文档中,除了普通模式编解码,还有管道模式编解码,经测试,使用管道模式进行解码会快很多,解码具体开发步骤见文档即可,将上篇文章“从视频提取音频并保存到pcm文件功能”中解码开发步骤替换成使用管道模式进行解码即可,使用Extractor从视频提取音频数据和将音频数据写入pcm文件过程与原来一致。

 

【音频播放类接口getAudioTime说明】

1、关于getAudioTime接口,官方文档解释为“获取播放时间戳信息”,通过此接口返回的TimeStamp对象中包含getNanoTimestamp信息,此数据并非表示音频开始播放,到当前播放的时长,如果一个10s音频,播放到5s时并非返回5s对应的纳秒数;也并非跟系统时间有关,返回的数据无法转换成系统时间戳;

此接口通常使用方式为:若想要获取当前播放的时间信息,可以在播放开始时通过getAudioTime接口记录时间,然后在播放过程中再调用一次记录时间,两次时间相减再转换成秒单位的数据,即可获取正确播放时间;

(由于此接口比较耗费性能,若音频较长需要调用接口次数比较多,建议直接通过java原生方法在播放开始和过程中分别记录时间,然后相减获取播放时长,此方式性能更优)

2、调用getAudioTime接口是需要调用getStage方法检查播放状态,需要在播放过程中调用才可正确返回数据。

 

【视频转音频过程中,解码如何判断是否完成?】

在framebuffer方法中,若bufferInfo.bufferType为4表示解码完成,可通过此数据判断是否完成解码。

 

【参考文档】

  • 实现从视频提取音频并保存到pcm文件功能:https://developer.huawei.com/consumer/cn/forum/topic/0209125665541017202?fid=0101591351254000314

  • 视频解码文档(管道模式):

    https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-video-codec-0000000000031749#section151781927112310

  • 媒体提取开发指导:

    https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-video-extractor-0000000000044202

  • 音频播放开发指导:

    https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-audio-playback-0000000000031734

  • getAudioTime API接口文档:

    https://developer.harmonyos.com/cn/docs/documentation/doc-references/audiorenderer-0000001054358892#ZH-CN_TOPIC_0000001054358892__getAudioTime--

标签:视频,Java,getAudioTime,音频,HarmonyOS,pcm,播放,解码
From: https://www.cnblogs.com/mayism123/p/17613549.html

相关文章

  • Java读取Excel中的合并单元格
    1、 Maven仓库下载导入在pom.xml中配置maven路径,指定依赖,如下:<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.1</version></dependency><dependency><groupId>......
  • 遇到的问题----java Unsupported major.minor version 51.0
     Unsupportedmajor.minorversion51.0不同的JDK版本使用的major.minor不同,所以会导致这个错误。编译器运行的jdk选择版本和使用的jdk版本号应该对应。解决起来也很方便:打开exclipse中项目上的属性—javacompiler–选择一个合适的版本后重新编译即可。具体步骤解决:项目------......
  • 数据查询解决列名和java对象属性名对不上——三种方法
    问题描述:当使用查询语句时,返回来的数据出现null值。下面是数据库映射文件代码查询语句:<selectid="selectCarById"resultType="com.powernode.mybatis.pojo.Car">select*fromt_carwhereid=#{id}</select>下面是返回查询返回数据 原因是:查询结果集的列名:id,c......
  • java日常.md
    JavaSpringSpring中进行Junit测试时,PageHelper未被消耗如果mapper被mock掉,会导致Mapper之前的PageHelper的线程存储未被消耗。导致后续出现错误。//源码//.....voidq(){PageHelper.startPage(1,1); someMapper.query();}//.....//问题单测@Mockpri......
  • JavaScript 基础(1) - 笔记
    1JavaScript基础1.1JavaScript是什么1.JavaScript(是什么?)是一种运行在客户端(浏览器)的编程语言,实现人机交互效果。2.作用(做什么?)网页特效(监听用户的一些行为让网页做出对应的反馈)表单验证(针对表单数据的合法性进行判断)数据交互(获取后台的数据,渲染到前端)服务端编程(node.js......
  • Java HTTP请求封装的方法及实现
    JavaHTTP请求封装的方法及实现在Java开发中,我们经常需要与服务器进行数据交互,发送HTTP请求是其中常见的一种方式。为了简化开发过程,我们可以封装HTTP请求的方法,让调用者只需要关注业务逻辑而不用关心底层的细节实现。本文将介绍一种基于Java的HTTP请求封装方法及其实现。JavaHT......
  • Java HTTP请求 如何获取并解析返回的HTML内容
    JavaHTTP请求如何获取并解析返回的HTML内容在Java开发中,经常会遇到需要获取网页内容的情况。而HTTP请求是实现这一目标的常用方法之一。本文将介绍如何使用Java进行HTTP请求,并解析返回的HTML内容。JavaHTTP请求如何获取并解析返回的HTML内容首先,我们需要导入相关的Java类库:j......
  • Java HTTPS如何加载证书
    JavaHTTPS如何加载证书在进行Java编程开发中,经常会涉及到使用HTTPS协议进行安全通信。而HTTPS的安全性是建立在数字证书的基础上的,因此在Java中加载证书是一个非常重要的步骤。本文将围绕“JavaHTTPS如何加载证书”这一主题,为大家介绍一种简洁、高效的加载证书的方法。JavaHTTP......
  • JavaSwing界面跳转技巧
    JavaSwing界面跳转技巧在JavaSwing应用程序中实现流畅的用户界面是非常重要的一部分。一个好的用户界面不仅需要美观的设计,还需要良好的交互体验。其中,界面跳转是用户体验的重要组成部分。本文将为你介绍JavaSwing界面跳转技巧,帮助你设计出流畅且易用的用户界面。JavaSwing界面......
  • Java Spring MVC 图片上传操作详解
    JavaSpringMVC图片上传操作详解在现代的Web开发中,图片上传是一个非常常见的需求。而JavaSpringMVC框架则是JavaWeb开发中常用的框架之一。本文将介绍如何在JavaSpringMVC框架中实现图片上传操作。JavaSpringMVC图片上传操作详解1.创建文件上传表单首先需要在前端页面......