multimedia/client/qt_gl_/yuvgl/mainwindow.cpp

115 lines
4.1 KiB
C++
Raw Normal View History

2020-06-04 15:28:45 +00:00
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
2020-06-06 07:39:55 +00:00
QssMainWindow(parent),
2020-06-04 15:28:45 +00:00
ui(new Ui::MainWindow),
m_bCameraOpen(false),
2020-06-05 02:18:37 +00:00
mCamera(nullptr),
2020-06-05 15:59:47 +00:00
m_bRtmpPushing(false),
mPlayerWidget(nullptr),
mVideoCoder(nullptr),
mPusher(nullptr),
mAudioCapture(nullptr)
2020-06-04 15:28:45 +00:00
{
ui->setupUi(this);
std::vector<std::wstring> 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 "<<mMic.size()<<"mic";
for(vector<CaptureAudioFfmpeg::MICInfo>::iterator itr = mMic.begin();itr != mMic.end();itr++){
ui->comboBox_2->addItem(QString::fromLocal8Bit(itr->name.c_str(),itr->name.size()),
QString::fromLocal8Bit(itr->name.c_str(),itr->name.size()));
}
//mAudioCapture->SetObserver(mAudioCoder);
//mAudioCapture->InitCapture(0, 44100, 2);
//mAudioCapture->StartCapture();
2020-06-05 15:59:47 +00:00
mPusher = new H264RtmpPuser();
2020-06-04 15:28:45 +00:00
}
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()<<ui->comboBox->currentText().size()<<ui->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);
}
2020-06-06 07:39:55 +00:00
this->mCamera->SetObserver(mPlayerWidget);
2020-06-04 15:28:45 +00:00
qDebug()<<ui->comboBox->currentText();
ui->pushButton->setText("关闭摄像头");
m_bCameraOpen = true;
mPlayerWidget->show();
2020-06-06 07:39:55 +00:00
ui->verticalLayout->addWidget(mPlayerWidget);
ui->verticalLayout->setStretch(0,1);
ui->verticalLayout->setStretch(1,0);
ui->verticalLayout->setStretch(2,9);
} else{
2020-06-04 15:28:45 +00:00
m_bCameraOpen = false;
ui->pushButton->setText("打开摄像头");
}
}
2020-06-05 02:18:37 +00:00
void MainWindow::on_pushButton_2_clicked()
{
if(!m_bRtmpPushing){
if(!m_bCameraOpen){
ToastWidget::showTip("请打开摄像头",this);
2020-06-05 15:59:47 +00:00
return;
}else{
//
if(nullptr == mVideoCoder){
mVideoCoder = new VideoCoder(mCamera->GetWidth(),
mCamera->GetHeight(),
GUIDToAvFormat(mCamera->MediaType()));
}
mCamera->SetObserver(mVideoCoder);
// todo 根据返回结果判断是否推流
2020-06-06 15:22:37 +00:00
qDebug()<<"连接RTMP服务器"<<ui->lineEdit->text();
2020-06-05 15:59:47 +00:00
if (!mPusher->IfConnect()) {
2020-06-05 17:51:09 +00:00
const char* address = ui->lineEdit->text().toLocal8Bit().data();
if (0 == mPusher->RTMP264_Connect("rtmp://127.0.0.1:1935/live/1")) {
2020-06-05 15:59:47 +00:00
ToastWidget::showTip("已经连接上RTMP服务器",this);
mVideoCoder->SetOberver(mPusher);
mPusher->StartPush();
2020-06-18 17:14:18 +00:00
ui->pushButton_2->setText("关闭推流");
2020-06-05 15:59:47 +00:00
/*
if (nullptr != this->mAudioCoder) {
this->mAudioCoder->SetObserver(mPusher);
//音频流先不推流
}*/
}
else {
ToastWidget::showTip("连接RTMP服务器失败请检查服务器地址",this);
}
2020-06-18 17:14:18 +00:00
}else{
ToastWidget::showTip("正在推流,请先关闭",this);
2020-06-05 15:59:47 +00:00
}
2020-06-05 02:18:37 +00:00
}
}
}
2020-06-05 15:59:47 +00:00
void MainWindow::on_pushButton_3_clicked()
{
}