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

使用libmpeg解码mp3格式文件

mp3格式的数据是通过udp循环从硬件发送过来的

#define BUFF_SIZE 1024
//定义线程锁
static std::mutex decodelock;
std::condition_variable dataAvailable;
	//mpg123的初始化mpg123_init();int err;mh = mpg123_new(NULL, &err);if (mh == NULL) {qDebug() <<  "Error initializing mpg123: " << mpg123_plain_strerror(err);return;}//设置参数mpg123_param(mh,MPG123_ADD_FLAGS,MPG123_FORCE_STEREO,100);mpg123_open_feed(mh);
void AudioCode::MP32PCM()
{int buff_size = BUFF_SIZE;unsigned char *buffer = (unsigned char *)malloc(buff_size);size_t frame_offset = 0;qInfo() << "start decode";while (che) {if(mp3DataAll.length() > BUFF_SIZE){std::unique_lock<std::mutex> lock(decodelock);dataAvailable.wait(lock);QByteArray array = mp3DataAll.left(BUFF_SIZE);mp3DataAll.remove(BUFF_SIZE);if (mpg123_feed(mh,reinterpret_cast<const unsigned char *>(array.data()), array.size())!= MPG123_OK) {qDebug() << "Error feeding data to mpg123: %s\n" << mpg123_strerror(mh);continue;}while (mpg123_read(mh, buffer, buff_size, &frame_offset) == MPG123_OK) {audioDeviceO->write(reinterpret_cast<const char *>(buffer),buff_size);}}}qInfo() << "end decode";free(buffer);mpg123_close(mh);mpg123_delete(mh);mpg123_exit();return;
}
//udp接收数据
void AudioCode::processDatagrams(){while (socket->hasPendingDatagrams()) {connectState = false;emit sendConnectState(connectState);timer->start(CONNECT_TIME);QByteArray datagram;datagram.resize(socket->pendingDatagramSize());socket->readDatagram(datagram.data(), datagram.size());std::lock_guard<std::mutex> guard(decodelock);mp3DataAll += datagram;dataAvailable.notify_one();if(mp3InFILE.isOpen())mp3InFILE.write(datagram.data(),datagram.size());}
}

http://www.mrgr.cn/news/24593.html

相关文章:

  • ORCAD位号,BOOM表
  • 【Linux】【Vim】Vim 基础
  • 【网络安全】-文件下载漏洞-pikachu
  • 什么是谷歌留痕?
  • windows下 MySQL8.4.2 LTS 解压版的安装使用
  • Python 资源管理的得力助手
  • 动态规划(算法)---03.斐波那契数列模型_最小花费爬楼梯
  • 记录一次NGINX和Java后端造成的CORS跨域BUG
  • (一)springboot2.6.13+mybatis-plus3.5.3.1+shardingsphere4.0.0-RC2
  • 如何通过海外云手机提升运营效率
  • 漏洞挖掘 | 产出如此简单?BigF5内网ip泄漏
  • k8s环境配置
  • Leetcode 701-二叉搜索树中的插入操作
  • 287. 寻找重复数(stl法)
  • 即插即用篇 | YOLOv8 引入并行的分块注意力 | 北京大学 2024 | 微小目标
  • QT设置闹钟超时播报
  • 1.简述语言建模LM、统计语言建模SLM、神经语言模型NLM、预训练语言模型PLM、大语言模型LLM
  • 搜索功能技术方案
  • Linux——高流量 高并发(访问场景) 高可用(架构要求)
  • 源码编译 openblas for windows on arm