You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.4 KiB
C++
53 lines
1.4 KiB
C++
#ifndef SAVESTREAM_H
|
|
#define SAVESTREAM_H
|
|
|
|
#include <QDir>
|
|
#include <QMutex>
|
|
#include <QMutexLocker>
|
|
#include <QObject>
|
|
#include <QQueue>
|
|
#include <QThread>
|
|
|
|
#include "avpacketqueuemanager.h"
|
|
#include "ffmpeginclude.h"
|
|
|
|
class SaveStream : public QObject {
|
|
Q_OBJECT
|
|
public:
|
|
explicit SaveStream(QObject *parent = nullptr);
|
|
bool init(AVFormatContext *formatContext,
|
|
AVPacketQueueManager *queueManager, int videoIndex);
|
|
/**
|
|
* @brief 设置拉流保存文件夹路径
|
|
* @param fileDirPath 文件夹路径
|
|
*/
|
|
void setSaveFileDirPath(QString fileDirPath);
|
|
void close();
|
|
public slots:
|
|
void startSaveStream();
|
|
signals:
|
|
void startSaveStreamSignal();
|
|
void sendErrorMessageSignal(QString message, int type);
|
|
|
|
private:
|
|
bool openFile();
|
|
void free();
|
|
|
|
private:
|
|
AVFormatContext *m_formatContextSave = nullptr; // 封装上下文
|
|
AVFormatContext *m_inputFormatContext = nullptr;
|
|
// AVCodecContext *m_inputCodecContex = nullptr; // 解码器上下文
|
|
QString m_strCodecName; // 编解码器名称
|
|
AVStream *m_videoStreamOut = nullptr; // 输出视频流
|
|
int m_videoIndex = 0;
|
|
bool m_writeHeader = false; // 是否写入文件头
|
|
QString m_outputDirPath;
|
|
bool m_start;
|
|
|
|
// QQueue<AVPacket *> *m_saverQueue;
|
|
AVPacketQueueManager *m_queueManager = nullptr;
|
|
// QMutex m_mutex;
|
|
};
|
|
|
|
#endif // SAVESTREAM_H
|