如何基于YoC播放器实时播放语音合成码流

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 如何基于YoC播放器实时播放语音合成码流

image.png

YoC播放器中支持的码流url类型有如下几种:

流类型 URL前缀 URL格式
http流 http(s):// http(s)://ip:port/xx.mp3
文件流 file:// file:///fatfs0/xx.mp3?avformat=%s&avcodec=%u&channel=%u&rate=%u
内存流 mem:// mem://addr=%u&size=%u&avformat=%u&avcodec=%u&channel=%u&rate=%u
fifo流 fifo:// fifo://tts/1?avformat=%s&avcodec=%u&channel=%u&rate=%u
由于fifo是基于生产者-消费者原理来实现的,我们可以基于fifo码流类型来实现实时语音合成码流播放。用户在创建fifo后,通过将fifo传递给播放器播放。与此同时可不断从网络上读取tts流,写入fifo中。

示例代码如下:
//核心代码片段
static player_t* g_player;
static nsfifo_t* g_tts_fifo;

static void _ptask(void *arg)
{

int fd;
int cnt = 0, rc, wlen;
char *val, *pos;
uint8_t reof = 0;
web_session_t *session;
/* 创建一个http会话 */
session = web_session_create();
/* 向指定地址发起http请求 */
rc = web_session_get(session, "http://www.srcbin.net/ai/result.mp3", 3);
if (rc) {
    LOGE(TAG, "web_session_get fail. rc = %d, code = %d, phrase = %s", rc, session->code, session->phrase);
    goto err;
}
/* 获取内容的长度 */
val = (char*)dict_get_val(&session->hdrs, "Content-Length");
CHECK_RET_TAG_WITH_GOTO(val != NULL, err);
fd = session->fd;
LOGD(TAG, "content len = %d", atoi(val));

for (;;) {
    /* 获取fifo的可写指针及长度 */
    wlen = nsfifo_get_wpos(g_tts_fifo, &pos, 8*1000);
    /* 获取播放器fifo读端是否退出(可能播放出错) */
    nsfifo_get_eof(g_tts_fifo, &reof, NULL);
    if (wlen <= 0 || reof) {
        LOGE(TAG, "get wpos err. wlen = %d, reof = %d", wlen, reof);
        break;
    }
    /* 从网络套接字中读取数据 */
    rc = sock_readn(fd, pos, wlen, 6*1000);
    if (rc <= 0) {
        LOGE(TAG, "readn err. rc = %d", rc);
        break;
    }
    /* 设置写指针 */
    nsfifo_set_wpos(g_tts_fifo, rc);
    cnt += rc;
}
LOGD(TAG, "rc = %8d, cnt = %8d", rc, cnt);

err:

/* 销毁web会话资源 */
web_session_destroy(session);
return;

}
/ 创建fifo,指定fifo地址和大小 /
g_tts_fifo = nsfifo_open("fifo://tts/1", O_CREAT, 64*1024);
if (g_tts_fifo) {

/* 创建 _ptask任务,用于通过网络获取码流数据 */
aos_task_new("xx_task", _ptask, NULL, 6*1024);
/* 设置播放器取流超时时间 */
player_ioctl(g_player, PLAYER_CMD_RCVTIMEO, AOS_WAIT_FOREVER);
/* 播放之前创建的fifo码流 */
player_play(g_player, "fifo://tts/1", 0);

}

相关文章
|
3月前
|
人工智能 安全 Linux
OpenClaw(小龙虾)从0到1部署手册:阿里云+本地全流程+千问/Coding Plan适配+避坑指南
2026年,开源AI Agent框架OpenClaw(曾用名Moltbot、Clawdbot,因Logo酷似小龙虾被网友亲切称为“小龙虾”)凭借“本地优先+主动执行”的核心特性,成为现象级工具。它打破了传统AI仅能“对话答疑”的局限,通过自主规划任务、调用工具、执行操作,实现“自然语言指令→AI规划→工具调用→任务落地”的全闭环,适配办公自动化、文件管理、多渠道协作等全场景需求。
751 1
|
4月前
|
人工智能 Linux API
全平台部署OpenClaw指南|阿里云+本地三系统+千问/Coding Plan API配置+避坑全解
2026年,OpenClaw(原Clawdbot)凭借“指令驱动+工具执行”的核心优势,从技术极客的探索工具升级为全球通用的AI基础设施,被国际数据科学媒体KDnuggets评为“2026年最火的免费AI Agent工具”。与传统聊天式AI不同,OpenClaw并非单一模型,而是一个能连接各类大语言模型、实现终端执行、文件读写、跨应用协同的“万能适配器”,通过可插拔的Skill生态,让AI从“提供建议”升级为“落地执行”,真正成为能干活的“数字员工”。
453 0
|
11月前
|
Ubuntu 安全 搜索推荐
揭秘Ubuntu系统的优势,你想知道吗?
对于移动设备,Ubuntu系统还在不断地探索与支持。众多Ubuntu系统的社区和开发人员正在探索Ubuntu系统在移动领域的应用,以提供全新的、更加开放和稳定的移动系统体验。 对于云服务器,Ubuntu系统作为一种轻量级的操作系统,越来越受到云服务提供商的青睐。Ubuntu系统可以作为一种安全和高效的云服务器操作系统,无论在公有云、私有云或混合云里,都可以提供出色的性能和体验。
|
9月前
|
CDN
如何切换阿里云CDN的加速区域?
本文介绍如何通过阿里云CDN控制台切换加速区域,涵盖登录、域名管理、修改加速范围及注意事项,助企业轻松实现从中国大陆到全球的CDN加速调整,优化海外用户访问体验。
|
11月前
|
人工智能 数据可视化 开发者
惊艳!GitHub 开发者一键接入!4.2k star 项目 Champ,用一张照片秒变动画
“Champ” 致力于从一张静态人物图生成流畅连续的人体动画,支撑精准姿态控制与形状一致性,其核心思路是将 3D 参数化人体模型(SMPL)引入扩散模型:
325 0
|
存储 API 文件存储
单页图床HTML源码+本地API接口图床系统源码
图床系统是一种用于存储和管理图片文件的在线服务。它允许用户上传图片文件,并生成相应的图片链接,从而方便用户在网页、社交媒体或其他平台上分享图片。
686 2
单页图床HTML源码+本地API接口图床系统源码
|
索引
一次区分 B树、B+树,B*树
一次区分 B树、B+树,B*树
377 0
|
机器学习/深度学习 数据采集 开发工具
从哪里开始学Python
【10月更文挑战第2天】
575 13
|
机器学习/深度学习 人工智能 达摩院
阿里巴巴达摩院“绿色能源AI”解决方案
阿里巴巴达摩院决策智能实验室致力于研究决策智能系统需要的国际前沿技术,提升业务运营效率和收益、降低成本。在电力能源行业构建出“绿色能源AI”方案,与国家电网、南方电网等企业合作落地多个项目。代表作软件是行业领先的MindOpt优化求解器、智能电力预测eForecaster、MindOpt Studio决策开发云平台。研究方向包含机器学习、数学建模、优化求解、 时序预测、因果分析、决策方案可解释性、决策推理大模型等。本篇是达摩院“绿色能源AI"方案的介绍幻灯片图,供大家了解方案的能力。
2775 1
阿里巴巴达摩院“绿色能源AI”解决方案

热门文章

最新文章