腾讯tts获取文件blob推流解析

2024-08-27 17:52

本文主要是介绍腾讯tts获取文件blob推流解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

方案1,获取推流拼接到数据,播放时将 Blob 转换为 URL,把audioUrl赋值给

 ws.onmessage((res) => {// console.log('onmessage res.data',res.data)if (typeof res.data == "object") {blobs.value.push(res.data);const newBolb = new Blob([...blobs.value], { type: "audio/mp3" });// 将 Blob 转换为 URLaudioUrl.value = URL.createObjectURL(newBolb);}// console.log('onmessage audioUrl.value',audioUrl.value)});
<audio  ref="audioPlayer" controls><source :src="audioUrl" type="audio/mpeg" autoplay />Your browser does not support the audio element.
</audio>

方案二,实现边推流边播放(不稳定)

 ws.onmessage((res) => {if (typeof res.data == "object") {appendBuffer(res.data);} else {}});const appendBuffer = (blob) => {const reader = new FileReader();reader.onload = () => {const arrayBuffer = reader.result;if (sourceBuffer && !sourceBuffer.updating && !audioPlayer.value.error ) {sourceBuffer.appendBuffer(arrayBuffer);}};reader.readAsArrayBuffer(blob);
};const onSourceOpen = () => {if (!sourceBuffer) {sourceBuffer = mediaSource.addSourceBuffer('audio/mpeg');sourceBuffer.addEventListener('updateend', () => {// 当 sourceBuffer 更新结束时,可以继续追加数据if (ws && ws.readyState === WebSocket.OPEN) {ws.onmessage((res) => {if (typeof res.data == "object") {appendBuffer(res.data);}});}});}
};

方案3 (推荐)

let mediaSource = new MediaSource();
let sourceBuffer;
let queue = [];
let isUpdating = false;const audioPlayer = document.getElementById('audioPlayer'); // Assume you have an <audio> element with this id
audioPlayer.src = URL.createObjectURL(mediaSource);const appendBuffer = (blob) => {const reader = new FileReader();reader.onload = () => {const arrayBuffer = reader.result;queue.push(arrayBuffer);processQueue();};reader.readAsArrayBuffer(blob);
};const processQueue = () => {if (queue.length > 0 && !isUpdating && sourceBuffer && !audioPlayer.error) {const buffer = queue.shift();isUpdating = true;sourceBuffer.appendBuffer(buffer);}
};const onSourceOpen = () => {if (!sourceBuffer) {sourceBuffer = mediaSource.addSourceBuffer('audio/mpeg');sourceBuffer.mode = 'sequence'; // Ensure the buffer is appended in sequencesourceBuffer.addEventListener('updateend', () => {isUpdating = false;processQueue(); // Continue processing the queue after each update});}
};mediaSource.addEventListener('sourceopen', onSourceOpen);ws.onmessage = (res) => {if (typeof res.data === 'object') {appendBuffer(res.data);}
};

这篇关于腾讯tts获取文件blob推流解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112365

相关文章

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

使用Java实现获取客户端IP地址

《使用Java实现获取客户端IP地址》这篇文章主要为大家详细介绍了如何使用Java实现获取客户端IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 首先是获取 IP,直接上代码import org.springframework.web.context.request.Requ

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT