delete some files
This commit is contained in:
parent
9bac1f9232
commit
c929823364
@ -1,277 +0,0 @@
|
|||||||
#include "BoxController.h"
|
|
||||||
#include <QProcess>
|
|
||||||
#include <QThread>
|
|
||||||
#include <QTime>
|
|
||||||
|
|
||||||
const char* path = "/root/usb";
|
|
||||||
|
|
||||||
BoxController::BoxController(QObject* parent)
|
|
||||||
: QObject(parent)
|
|
||||||
{
|
|
||||||
// init output in constructor;
|
|
||||||
videoOutput = Link::create("OutputVo");
|
|
||||||
QVariantMap dataVo;
|
|
||||||
dataVo["type"] = "hdmi";
|
|
||||||
dataVo["interface"] = "HDMI-OUT0";
|
|
||||||
videoOutput->setData(dataVo);
|
|
||||||
videoOutput->start();
|
|
||||||
|
|
||||||
// init video duration
|
|
||||||
videoDuration = 1 * 60 * 1000;
|
|
||||||
recordTimer = new QTimer();
|
|
||||||
recordTimer->setInterval(videoDuration);
|
|
||||||
recordTimer->stop();
|
|
||||||
connect(recordTimer, SIGNAL(timeout()), this, SLOT(onTimeout()));
|
|
||||||
|
|
||||||
// init record params
|
|
||||||
videoEncodeParams["codec"] = "h264";
|
|
||||||
videoEncodeParams["width"] = 1920;
|
|
||||||
videoEncodeParams["height"] = 1080;
|
|
||||||
videoEncodeParams["bitrate"] = 4000;
|
|
||||||
videoEncodeParams["framerate"] = 30;
|
|
||||||
|
|
||||||
audioEncodeParams["codec"] = "aac";
|
|
||||||
audioEncodeParams["samplerate"] = 48000;
|
|
||||||
audioEncodeParams["bitrate"] = 128000;
|
|
||||||
audioEncodeParams["channels"] = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief initialize "Link" components
|
|
||||||
*/
|
|
||||||
void BoxController::init()
|
|
||||||
{
|
|
||||||
// audio input by external microphone
|
|
||||||
audioInput = Link::create("InputAlsa");
|
|
||||||
QVariantMap dataAi;
|
|
||||||
dataAi["path"] = "hw:0,0";
|
|
||||||
dataAi["channels"] = 2;
|
|
||||||
audioInput->start(dataAi);
|
|
||||||
|
|
||||||
// audio output by external speaker
|
|
||||||
audioOutput = Link::create("OutputAlsa");
|
|
||||||
QVariantMap dataAo;
|
|
||||||
dataAo["path"] = "hw:0,0";
|
|
||||||
audioOutput->start(dataAo);
|
|
||||||
|
|
||||||
videoInputA = Link::create("InputVi");
|
|
||||||
QVariantMap dataVi;
|
|
||||||
dataVi["interface"] = "HDMI-A";
|
|
||||||
videoInputA->start(dataVi);
|
|
||||||
|
|
||||||
// capture picture from video
|
|
||||||
snap = Link::create("EncodeV");
|
|
||||||
QVariantMap dataSnap;
|
|
||||||
dataSnap["codec"] = "jpeg";
|
|
||||||
dataSnap["snap"] = true;
|
|
||||||
dataSnap["width"] = videoEncodeParams.value("width");
|
|
||||||
dataSnap["height"] = videoEncodeParams.value("height");
|
|
||||||
snap->start(dataSnap);
|
|
||||||
videoInputA->linkV(snap);
|
|
||||||
// sleep 1s, if didnt sleep , function snap would return flase and capture failed
|
|
||||||
QThread::sleep(1);
|
|
||||||
|
|
||||||
videoInputA->linkV(videoOutput);
|
|
||||||
|
|
||||||
// video encode
|
|
||||||
videoEncoder = Link::create("EncodeV");
|
|
||||||
videoEncoder->start(videoEncodeParams);
|
|
||||||
|
|
||||||
// audio encode
|
|
||||||
audioEncoder = Link::create("EncodeA");
|
|
||||||
audioEncoder->start(audioEncodeParams);
|
|
||||||
|
|
||||||
// record
|
|
||||||
record = Link::create("Mux");
|
|
||||||
QVariantMap dataMp4;
|
|
||||||
dataMp4["format"] = "mp4";
|
|
||||||
dataMp4["mute"] = true;
|
|
||||||
record->setData(dataMp4);
|
|
||||||
videoInputA->linkV(videoEncoder)->linkV(record);
|
|
||||||
audioInput->linkA(audioEncoder)->linkA(record);
|
|
||||||
|
|
||||||
// rtmp server
|
|
||||||
rtmpServer = Link::create("Mux");
|
|
||||||
QVariantMap dataRtmp;
|
|
||||||
dataRtmp["path"] = "rtmp://127.0.0.1/live/stream";
|
|
||||||
dataRtmp["mute"] = true;
|
|
||||||
rtmpServer->setData(dataRtmp);
|
|
||||||
videoInputA->linkV(videoEncoder)->linkV(rtmpServer);
|
|
||||||
audioInput->linkA(audioEncoder)->linkA(rtmpServer);
|
|
||||||
|
|
||||||
// init file and decoder
|
|
||||||
file = Link::create("InputFile");
|
|
||||||
file->start();
|
|
||||||
videoDecoder = Link::create("DecodeV");
|
|
||||||
videoDecoder->start();
|
|
||||||
audioDecoder = Link::create("DecodeA");
|
|
||||||
audioDecoder->start();
|
|
||||||
file->linkV(videoDecoder)->linkV(videoOutput);
|
|
||||||
file->linkA(audioDecoder)->linkA(audioOutput);
|
|
||||||
|
|
||||||
connect(file, &LinkObject::newEvent, [=](QString type, QVariant) {
|
|
||||||
if (type == "EOF") {
|
|
||||||
qDebug() << "one video playback end";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief start record
|
|
||||||
*/
|
|
||||||
void BoxController::startRecord()
|
|
||||||
{
|
|
||||||
if (!isMountDisk()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
QString curTime = QDateTime::currentDateTime().toString("yyyy-MM-dd_hh:mm:ss");
|
|
||||||
QVariantMap dataRecord;
|
|
||||||
dataRecord["path"] = QString("%1/videos/%2.mp4").arg(path).arg(curTime);
|
|
||||||
record->setData(dataRecord);
|
|
||||||
record->start();
|
|
||||||
isRecord = true;
|
|
||||||
|
|
||||||
recordTimer->start();
|
|
||||||
snap->invoke("snapSync", QString("%1/snap/%2.jpg").arg(path).arg(curTime));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief stop record
|
|
||||||
*/
|
|
||||||
void BoxController::stopRecord()
|
|
||||||
{
|
|
||||||
record->stop(true);
|
|
||||||
isRecord = false;
|
|
||||||
recordTimer->stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief BoxController::onTimeout
|
|
||||||
*/
|
|
||||||
void BoxController::onTimeout()
|
|
||||||
{
|
|
||||||
if (!isMountDisk()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
record->stop(true);
|
|
||||||
recordTimer->stop();
|
|
||||||
|
|
||||||
QString curTime = QDateTime::currentDateTime().toString("yyyy-MM-dd_hh:mm:ss");
|
|
||||||
QVariantMap dataRecord;
|
|
||||||
dataRecord["path"] = QString("%1/videos/%2.mp4").arg(path).arg(curTime);
|
|
||||||
record->setData(dataRecord);
|
|
||||||
record->start();
|
|
||||||
|
|
||||||
recordTimer->start();
|
|
||||||
snap->invoke("snapSync", QString("%1/snap/%2.jpg").arg(path).arg(curTime));
|
|
||||||
}
|
|
||||||
|
|
||||||
void BoxController::startRtmpServer()
|
|
||||||
{
|
|
||||||
if (rtmpServer->getState() != "started") {
|
|
||||||
rtmpServer->start();
|
|
||||||
qDebug() << "start rtmp server...";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief open console process, and use it by command
|
|
||||||
* @param com
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
QString BoxController::writeCom(const QString& com)
|
|
||||||
{
|
|
||||||
QProcess proc;
|
|
||||||
QStringList argList;
|
|
||||||
argList << "-c" << com;
|
|
||||||
proc.start("/bin/sh", argList);
|
|
||||||
// wait process start
|
|
||||||
proc.waitForFinished();
|
|
||||||
proc.waitForReadyRead();
|
|
||||||
// read data from console
|
|
||||||
QByteArray procOutput = proc.readAll();
|
|
||||||
proc.close();
|
|
||||||
return QString(procOutput);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief judge the disk whether mounted
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
bool BoxController::isMountDisk()
|
|
||||||
{
|
|
||||||
QString mount = writeCom(QString("df %1").arg(path));
|
|
||||||
if (!mount.contains(path))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief start playback and output hdmi signals
|
|
||||||
* @param fileName
|
|
||||||
*/
|
|
||||||
void BoxController::startPlayback(QString fileName)
|
|
||||||
{
|
|
||||||
QString path = "/root/usb/videos/" + fileName;
|
|
||||||
videoInputA->unLinkV(videoOutput);
|
|
||||||
QVariantMap dataFile;
|
|
||||||
dataFile["path"] = path;
|
|
||||||
file->start(dataFile);
|
|
||||||
emit playListNeedHide();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief play live
|
|
||||||
*/
|
|
||||||
void BoxController::startPlayLive()
|
|
||||||
{
|
|
||||||
videoInputA->linkV(videoOutput);
|
|
||||||
file->stop(true);
|
|
||||||
emit playListNeedHide();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief playback -10s
|
|
||||||
*/
|
|
||||||
void BoxController::back()
|
|
||||||
{
|
|
||||||
qDebug() << "back";
|
|
||||||
int curPos = file->invoke("getPosition").toInt();
|
|
||||||
curPos -= 10 * 100;
|
|
||||||
file->invoke("seek", curPos);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief playback +10s
|
|
||||||
*/
|
|
||||||
void BoxController::forward()
|
|
||||||
{
|
|
||||||
qDebug() << "forward";
|
|
||||||
int curPos = file->invoke("getPosition").toInt();
|
|
||||||
curPos += 10 * 100;
|
|
||||||
file->invoke("seek", curPos);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief playback pause
|
|
||||||
*/
|
|
||||||
void BoxController::pause()
|
|
||||||
{
|
|
||||||
QString state = file->getState();
|
|
||||||
if (state != "started") {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
file->invoke("pause", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief playback resume
|
|
||||||
*/
|
|
||||||
void BoxController::resume()
|
|
||||||
{
|
|
||||||
QString state = file->getState();
|
|
||||||
if (state != "started") {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
file->invoke("pause", false);
|
|
||||||
}
|
|
@ -1,72 +0,0 @@
|
|||||||
#ifndef BOXCONTROLLER_H
|
|
||||||
#define BOXCONTROLLER_H
|
|
||||||
|
|
||||||
#include "Link.h"
|
|
||||||
#include <QObject>
|
|
||||||
#include <QTimer>
|
|
||||||
|
|
||||||
class BoxController : public QObject {
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
BoxController(QObject* parent = nullptr);
|
|
||||||
|
|
||||||
// io
|
|
||||||
LinkObject* audioInput;
|
|
||||||
LinkObject* videoInputA;
|
|
||||||
LinkObject* videoInputB;
|
|
||||||
LinkObject* audioOutput;
|
|
||||||
LinkObject* videoOutput;
|
|
||||||
|
|
||||||
// record
|
|
||||||
LinkObject* audioEncoder;
|
|
||||||
LinkObject* videoEncoder;
|
|
||||||
LinkObject* overlay;
|
|
||||||
LinkObject* record;
|
|
||||||
LinkObject* snap;
|
|
||||||
|
|
||||||
// stream server
|
|
||||||
LinkObject* rtmpServer;
|
|
||||||
|
|
||||||
// play
|
|
||||||
LinkObject* file;
|
|
||||||
LinkObject* videoDecoder;
|
|
||||||
LinkObject* audioDecoder;
|
|
||||||
|
|
||||||
QVariantMap videoEncodeParams;
|
|
||||||
QVariantMap audioEncodeParams;
|
|
||||||
|
|
||||||
// record flag
|
|
||||||
bool isRecord = false;
|
|
||||||
// video file format
|
|
||||||
QString format;
|
|
||||||
|
|
||||||
void startRecord();
|
|
||||||
void stopRecord();
|
|
||||||
void startRtmpServer();
|
|
||||||
void init();
|
|
||||||
|
|
||||||
void startPlayback(QString fileName);
|
|
||||||
void startPlayLive();
|
|
||||||
void back();
|
|
||||||
void forward();
|
|
||||||
void pause();
|
|
||||||
void resume();
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void playListNeedHide();
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void onTimeout();
|
|
||||||
|
|
||||||
private:
|
|
||||||
// timer used to limit record time each time
|
|
||||||
QTimer* recordTimer;
|
|
||||||
// duration each video file
|
|
||||||
int videoDuration;
|
|
||||||
|
|
||||||
private:
|
|
||||||
QString writeCom(const QString& com);
|
|
||||||
bool isMountDisk();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BOXCONTROLLER_H
|
|
Loading…
Reference in New Issue
Block a user