#include "mainwindow.h" #include "ui_mainwindow.h" #include #include MainWindow::MainWindow(QWidget *parent) : QssMainWindow(parent), ui(new Ui::MainWindow), m_bCameraOpen(false), mCamera(nullptr), m_bRtmpPushing(false), mPlayerWidget(nullptr), mVideoCoder(nullptr), mPusher(nullptr), mAudioCapture(nullptr), mTimer(nullptr) { ui->setupUi(this); this->move(50,50); int i(0); QDesktopWidget* desktopWidget = QApplication::desktop(); QRect clientRect = desktopWidget->availableGeometry(); QRect applicationRect = desktopWidget->screenGeometry(); qDebug()<pos()<m_frame->geometry()<centralWidget()->geometry(); std::vector cameras = Camera::EnumAllCamera(); for(std::wstring x : cameras){ ui->comboBox->addItem(QString::fromWCharArray(x.c_str(),x.size()), QString::fromWCharArray(x.c_str(),x.size())); } mAudioCapture = new CaptureAudioFfmpeg(44100, 2); mMic = mAudioCapture->EnumSpeakers(); qDebug()<<"capture "<::iterator itr = mMic.begin();itr != mMic.end();itr++){ } //mAudioCapture->SetObserver(mAudioCoder); //mAudioCapture->InitCapture(0, 44100, 2); //mAudioCapture->StartCapture(); mPusher = new H264RtmpPuser(); mTimer = new QTimer(this); connect(mTimer, SIGNAL(timeout()), this, SLOT(DetectDpi())); mTimer->start(1000); } MainWindow::~MainWindow(){ delete ui; } void MainWindow::on_pushButton_clicked(){ if(nullptr == mPlayerWidget){ mPlayerWidget = new CPlayWidget(nullptr); } if(!m_bCameraOpen){ mPlayerWidget->SetDataType(CPlayWidget::IMG_TYPE::TYPE_RGB32); mPlayerWidget->SetImgSize(640,480); qDebug()<comboBox->currentText().size()<comboBox->currentText(); wchar_t *opencamera = new wchar_t[ui->comboBox->currentText().size()]; ui->comboBox->currentText().toWCharArray(opencamera); wstring ss = wstring(opencamera,ui->comboBox->currentText().size()); if(nullptr == mCamera){ this->mCamera = new Camera(ss); } this->mCamera->SetObserver(mPlayerWidget); qDebug()<comboBox->currentText(); ui->pushButton->setText("关闭摄像头"); m_bCameraOpen = true; mPlayerWidget->show(); ui->verticalLayout->addWidget(mPlayerWidget); qDebug()<verticalLayout->layout(); ui->verticalLayout->setStretch(0,1); ui->verticalLayout->setStretch(1,0); ui->verticalLayout->setStretch(2,9); } else{ m_bCameraOpen = false; ui->pushButton->setText("打开摄像头"); } } void MainWindow::on_pushButton_2_clicked() { if(!m_bRtmpPushing){ if(!m_bCameraOpen){ ToastWidget::showTip("请打开摄像头",this); return; }else{ // if(nullptr == mVideoCoder){ mVideoCoder = new VideoCoder(mCamera->GetWidth(), mCamera->GetHeight(), GUIDToAvFormat(mCamera->MediaType())); } mCamera->SetObserver(mVideoCoder); // todo 根据返回结果判断是否推流 qDebug()<<"连接RTMP服务器"<lineEdit->text(); if (!mPusher->IfConnect()) { const char* address = ui->lineEdit->text().toLocal8Bit().data(); qDebug()<RTMP264_Connect("rtmp://127.0.0.1:1939/live/1")) { ToastWidget::showTip("已经连接上RTMP服务器",this); mVideoCoder->SetOberver(mPusher); mPusher->StartPush(); ui->pushButton_2->setText("关闭推流"); /* if (nullptr != this->mAudioCoder) { this->mAudioCoder->SetObserver(mPusher); //音频流先不推流 }*/ } else { ToastWidget::showTip("连接RTMP服务器失败,请检查服务器地址",this); } }else{ ToastWidget::showTip("正在推流,请先关闭",this); } } } } void MainWindow::on_pushButton_3_clicked() { qDebug()<comboBox_2->currentText(); } void MainWindow::DetectDpi() { qDebug()<<"detect dpi"; int horizontalDPI = logicalDpiX(); int verticalDPI = logicalDpiY(); qDebug()<