资源简介

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  LocalPlayer\.gitignore

     文件        746  2021-01-06 17:14  LocalPlayer\.qmake.stash

     文件       2880  2019-08-27 21:43  LocalPlayer\audioplaythread.cpp

     文件        534  2019-08-27 21:43  LocalPlayer\audioplaythread.h

     文件     510864  2021-01-06 17:14  LocalPlayer\audioplaythread.o

     文件      10248  2021-01-26 16:50  LocalPlayer\avdemuxthread.cpp

     文件       1025  2021-01-11 11:17  LocalPlayer\avdemuxthread.h

     文件     640424  2021-01-08 18:19  LocalPlayer\avdemuxthread.o

     文件       3629  2021-01-12 18:23  LocalPlayer\avmessagequeue.cpp

     文件       1391  2021-01-12 16:50  LocalPlayer\avmessagequeue.h

     文件        854  2021-01-08 17:04  LocalPlayer\avplayer.cpp

     文件        380  2019-08-27 21:43  LocalPlayer\avplayer.h

     文件     534152  2021-01-08 18:18  LocalPlayer\avplayer.o

     文件       2571  2021-01-12 16:53  LocalPlayer\framequeue.cpp

     文件       1106  2021-01-12 16:48  LocalPlayer\framequeue.h

     文件        637  2021-01-08 16:56  LocalPlayer\imagedispaly.cpp

     文件        332  2019-08-27 21:43  LocalPlayer\imagedispaly.h

     文件     824600  2021-01-08 16:56  LocalPlayer\imagedispaly.o

     文件      35149  2019-08-27 21:43  LocalPlayer\LICENSE

     文件        360  2021-01-26 16:50  LocalPlayer\main.cpp

     文件     814296  2021-01-08 18:18  LocalPlayer\main.o

     文件       1682  2019-08-27 21:43  LocalPlayer\mainwindow.cpp

     文件        463  2019-08-27 21:43  LocalPlayer\mainwindow.h

     文件     877872  2021-01-06 17:14  LocalPlayer\mainwindow.o

     文件       1973  2019-08-27 21:43  LocalPlayer\mainwindow.ui

     文件      35986  2021-01-06 17:14  LocalPlayer\Makefile

     文件       4817  2021-01-08 18:18  LocalPlayer\moc_avdemuxthread.cpp

     文件     578704  2021-01-08 18:18  LocalPlayer\moc_avdemuxthread.o

     文件       2565  2021-01-08 18:18  LocalPlayer\moc_avplayer.cpp

     文件     688552  2021-01-08 18:18  LocalPlayer\moc_avplayer.o

............此处省略14个文件信息

评论

共有 条评论