Слияние кода завершено, страница обновится автоматически
#ifndef ZFFAUDIO_H
#define ZFFAUDIO_H
#include <QMutex>
#include <QMutexLocker>
#include <QThread>
#include <QList>
#include <QAudioOutput>
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavformat/version.h>
#include <libavdevice/avdevice.h>
#include <libavutil/time.h>
#include <libavutil/mathematics.h>
#include <libswscale/swscale.h>
#include <libswresample/swresample.h>
}
class ZFFaudio : public QThread {
public:
static ZFFaudio* getInstance();
float GetCurTimeSec() {
return curTimestampSec;
}
void start(Priority = InheritPriority);
void terminate();
void stop();
void init(int sampleRate,
int channel,
int sampleSize);
private:
ZFFaudio();
static QAtomicPointer<ZFFaudio>_instance;
static QMutex _mutex;
/* Thread */
void run() override;
int ToPCM(char *,
AVFrame *);
/* QMEDIA */
bool StartPlay(); // 启动
void PlayAudio(bool isplay); // 暂停
bool Write(const char *data,
int datasize); // 将音频写入
void StopPlay(); // 停止
int GetFree(); // 获取剩余空间
int sampleRate = 44100; // 样本率
int sampleSize = 32; // 样本大小
int channel = 2; ///通道数
/* */
float curTimestampSec = 0.0;
/* Device */
QIODevice *io = NULL;
QAudioOutput *output = NULL;
bool _canBeRun = false;
};
#endif // ZFFAUDIO_H
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )