前沿
之前开发了一个云真机软件,参考的是QtScrcpy这个工程来开发。
开发的时间比较旧了,当时参考的这个工程还是一年多前了,现在回头再看看,源码解析一下这个工程,顺便也重新学习一下。
QtScrcpy地址
解析的版本是v2.1.2
QtScrcpy视频流处理(ui层)
// dialog.cpp
void Dialog::onDeviceConnected(bool success, const QString &serial, const QString &deviceName, const QSize &size)
{
// 省略
// 注册监听
qsc::IDeviceManage::getInstance().getDevice(serial)->registerDeviceObserver(videoForm);
// 省略
}
// videoform.cpp
void VideoForm::onFrame(int width, int height, uint8_t *dataY, uint8_t *dataU, uint8_t *dataV, int linesizeY, int linesizeU, int linesizeV)
{
updateRender(width, height, dataY, dataU, dataV, linesizeY, linesizeU, linesizeV);
}
// 这边自定义了yuvopengl控件,来解析视频帧
void VideoForm::updateRender(int width, int height, uint8_t* dataY, uint8_t* dataU, uint8_t* dataV, int linesizeY, int linesizeU, int linesizeV)
{
if (m_videoWidget->isHidden()) {
if (m_loadingWidget) {
m_loadingWidget->close();
}
m_videoWidget->show();
}
updateShowSize(QSize(width, height));
m_videoWidget->setFrameSize(QSize(width, height));
m_videoWidget->updateTextures(dataY, dataU, dataV, linesizeY, linesizeU, linesizeV);
}