资源简介
Qt和FFmpeg的视频播放器
代码片段和文件信息
#include “audioplaythread.h“
#include
#include
const int BufferSize = 44100 * 10000;
int iCurrentRead = 0;
int iCurrentWrite = 0;
char buffer[BufferSize];
QSemaphore freeBytes(BufferSize);
QSemaphore usedBytes;
AudioPlayThread::AudioPlayThread(Qobject *parent):
QThread (parent)
m_audioOutput(nullptr)
m_audioOutDevice(nullptr)
m_buf(nullptr)
m_index(0)
{
initializeAudio(QAudioDeviceInfo::defaultOutputDevice());
}
void AudioPlayThread::updateAudioData(QByteArray audio)
{
int out_buffer_size = audio.size();
if(freeBytes.tryAcquire(out_buffer_size)){
memcpy(buffer + iCurrentWrite audio.constData() out_buffer_size);
iCurrentWrite += out_buffer_size;
iCurrentWrite = iCurrentWrite % BufferSize;
usedBytes.release(out_buffer_size);
}
}
void AudioPlayThread::run()
{
while (1) {
#if 0
QByteArray buffer(32768 0);
int chunks = m_audioOutput->bytesFree() / m_audioOutput->periodSize();
while (chunks) {
const qint64 len = m_generator->read(buffer.data() m_audioOutput->periodSize());
if (len)
io->write(buffer.data() len);
if (len != m_audioOutput->periodSize())
break;
--chunks;
}
#endif
int chunks = m_audioOutput->bytesFree() / m_audioOutput->periodSize();
while (chunks) {
int len = m_audioOutput->periodSize();
if(usedBytes.tryAcquire(len)){
m_audioOutDevice->write(buffer + iCurrentRead len);
iCurrentRead += len;
iCurrentRead = iCurrentRead % BufferSize;
freeBytes.release();
}
--chunks;
}
}
}
void AudioPlayThread::initializeAudio(const QAudioDeviceInfo &deviceInfo)
{
if(m_audioOutput){
m_audioOutput->stop();
delete m_audioOutput;
m_audioOutput = nullptr;
}
if(m_audioOutDevice){
m_audioOutDevice->close();
delete m_audioOutDevice;
m_audioOutDevice = nullptr;
}
QAudioFormat format;
format.setSampleRate(44100);
format.setChannelCount(2);
format.setSampleSize(16);
format.setCodec(“audio/pcm“);
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
if (!deviceInfo.isFormatSupported(format)) {
qWarning() << “Default format not supported - trying to use nearest“;
format = deviceInfo.nearestFormat(format);
}
m_audioOutput = new QAudioOutput(deviceInfo format);
m_audioOutDevice = m_audioOutput->start();
// m_pcmStream = new PcmStream();
// m_pcmStream->start();
int bf = m_audioOutput->bytesFree();
if(!m_buf){
m_buf = new char[bf * 2000];
}
memset(m_buf 0 bf * 2000);
m_index = 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 270 2019-08-27 21:43 LocalPla
文件 746 2021-01-06 17:14 LocalPla
文件 2880 2019-08-27 21:43 LocalPla
文件 534 2019-08-27 21:43 LocalPla
文件 510864 2021-01-06 17:14 LocalPla
文件 10248 2021-01-26 16:50 LocalPla
文件 1025 2021-01-11 11:17 LocalPla
文件 640424 2021-01-08 18:19 LocalPla
文件 3629 2021-01-12 18:23 LocalPla
文件 1391 2021-01-12 16:50 LocalPla
文件 854 2021-01-08 17:04 LocalPla
文件 380 2019-08-27 21:43 LocalPla
文件 534152 2021-01-08 18:18 LocalPla
文件 2571 2021-01-12 16:53 LocalPla
文件 1106 2021-01-12 16:48 LocalPla
文件 637 2021-01-08 16:56 LocalPla
文件 332 2019-08-27 21:43 LocalPla
文件 824600 2021-01-08 16:56 LocalPla
文件 35149 2019-08-27 21:43 LocalPla
文件 360 2021-01-26 16:50 LocalPla
文件 814296 2021-01-08 18:18 LocalPla
文件 1682 2019-08-27 21:43 LocalPla
文件 463 2019-08-27 21:43 LocalPla
文件 877872 2021-01-06 17:14 LocalPla
文件 1973 2019-08-27 21:43 LocalPla
文件 35986 2021-01-06 17:14 LocalPla
文件 4817 2021-01-08 18:18 LocalPla
文件 578704 2021-01-08 18:18 LocalPla
文件 2565 2021-01-08 18:18 LocalPla
文件 688552 2021-01-08 18:18 LocalPla
............此处省略14个文件信息
- 上一篇:linux 0.11内核代码
- 下一篇:QT 动态曲线
相关资源
- QT 动态曲线
- 嵌入式QtC++编程课件
- STM32连接EC20使用内置MQTT协议接入阿里
- Qt 瑞士军刀开发工具
- qt处理图形
- basler相机图像采集和显示
- 交互式计算机图形学 第六版 OpenGL源代
- c++ 画图(14Qt-XPS)
- 图形学简单绘图系统
- QT CAN例程
- 使用Qt实现Excel读取工具
- Qt 通讯软件模块的开发
- Qt TCP聊天室demo
- Qt曲线
- qt样式表武林秘籍(73页)
- stm32 MQTT
- 基于ege图形的推箱子游戏
- QT信号槽开发
- Wemos D1 mini阿里云MQTT例程
- QT 计算文件夹内所有代码行数
- qt写的记事本
- QT自定义皮肤例子56387
- qt上位机采集51单片机温湿度数据
- MQTT协议
- 五子棋C++(Qt版).zip
- OpenGL迷宫山东大学图形学实验三
- Qt飞机大战小游戏源代码
- 基于qt的c++编写的贪吃蛇游戏
- 嵌入式Qt实战教程.
- QT5.9_c++开发指南——随书[源码]
评论
共有 条评论