• 2294阅读
  • 6回复

setConfig 614 叠加图片 这个怎么使用? [复制链接]

上一主题 下一主题
离线developer
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2020-07-01
614 Picture RGBA buffer            str      W           叠加一个 RGBA 内存区,格式:"address;width;height"问题是这样的,我要把 QT中的Widget 转为图片,然后 通过 setconfig 614 ,设置到视频画面中, 请问这个614 怎么使用啊?本人尝试了好几种方法还是不会, 拜托版主
离线aplayer

只看该作者 沙发  发表于: 2020-07-01
输入的是内存区,address 填写地址,width 填写图像宽度,height 填写图像高度,这些都是地址的数值的十进制字符串,比如内存地址是 0x00100000(十进制数是1048576),宽度 640,高度 480 的 RGBA 图像,设置给 APlayer 就是这样的语法:

APlayer.SetConfig(602, "1);  // 激活图像叠加功能
APlayer.SetConfig(614, "1048576;640;480"); // 叠加内存图像(可带 Alpha 通道)

这个要在 OpenSucceeded 后或者播放过程中设置才有效。

离线developer

只看该作者 板凳  发表于: 2020-07-01
非常感谢亲的回复

这是一段伪代码
this代表当前QLabel的指针

QWidget temp_widget(m_parent);  //创建一个临时的QWidget 局部变量
temp_widget.resize(newVideoWidth, newVideoHeight);  // 设置大小
this->setParent(&temp_widget); // 将当前QLabel的父组件设置为QWidget
this->setGeometry(QRect(positionX, positionY, width, height)); // 设置QLabel 在父组件的位置
temp_widget.setAttribute(Qt::WA_TranslucentBackground); //将temp_widget背景设置为透明
QPixmap fwMarkPixmap =  QPixmap::grabWidget(&temp_widget, 0, 0, -1, -1 ); // 创建一个 QPixmap (从temp_widget转换)
//QImage fwMarkImage =  fwMarkPixmap.toImage(); //可以将QPixmap 转为图像
QByteArray bytes;
QBuffer qbuf(&bytes);
qbuf.open(QIODevice::WriteOnly);
//fwMarkImage.save(&qbuf, "PNG"); // QImage 存入buf
fwMarkPixmap.save(&qbuf, "PNG"); // QPixmap 存入qbuf
long qbuf_size = bytes.size();
char mBuf[64*1024] = {};
memcpy(mBuf, &bytes, qbuf_size);
string strtest;
stringstream stringtest;
stringtest.clear();
//stringtest<<&qbuf;
stringtest<<mBuf;
stringtest>>strtest;
QString tempaddr = QString::fromStdString(strtest);
QString temppattern = tempaddr + ";" + QString::number(newVideoWidth) + ";" + QString::number(newVideoHeight) + ";";
long int ret=0;
m_pAPlayer->SetConfig(614,  _bstr_t(temppattern.toStdString().c_str()), &ret);

上面是我的一段代码,  鄙人才疏学浅,QT 中的 QImage 或者是 QPixmap 如何转为 setCopnfig 需要的 rgba内存区呢? 很显然代码中 我的尝试是错误的。
离线developer

只看该作者 地板  发表于: 2020-07-01
这是一段伪代码
this代表当前QLabel的指针

QWidget temp_widget(m_parent);  //创建一个临时的QWidget 局部变量
temp_widget.resize(newVideoWidth, newVideoHeight);  // 设置大小
this->setParent(&temp_widget); // 将当前QLabel的父组件设置为QWidget
this->setGeometry(QRect(positionX, positionY, width, height)); // 设置QLabel 在父组件的位置
temp_widget.setAttribute(Qt::WA_TranslucentBackground); //将temp_widget背景设置为透明
QPixmap fwMarkPixmap =  QPixmap::grabWidget(&temp_widget, 0, 0, -1, -1 ); // 创建一个 QPixmap (从temp_widget转换)
//QImage fwMarkImage =  fwMarkPixmap.toImage(); //可以将QPixmap 转为图像
QByteArray bytes;
QBuffer qbuf(&bytes);
qbuf.open(QIODevice::WriteOnly);
//fwMarkImage.save(&qbuf, "PNG"); // QImage 存入buf
fwMarkPixmap.save(&qbuf, "PNG"); // QPixmap 存入qbuf
long qbuf_size = bytes.size();
char mBuf[64*1024] = {};
memcpy(mBuf, &bytes, qbuf_size);
string strtest;
stringstream stringtest;
stringtest.clear();
//stringtest<<&qbuf;
stringtest<<mBuf;
stringtest>>strtest;
QString tempaddr = QString::fromStdString(strtest);
QString temppattern = tempaddr + ";" + QString::number(newVideoWidth) + ";" + QString::number(newVideoHeight) + ";";
long int ret=0;
m_pAPlayer->SetConfig(614,  _bstr_t(temppattern.toStdString().c_str()), &ret);

刚才我好像没有提交成功,如果重复发帖了,请勿见怪
上述这段代码 是我的一个尝试,显然没有成功, 鄙人才疏学浅,请问如何才能将 QImage 或者是QPixmap 转为rgba内存区,传递给 setConfig 614 呢


离线aplayer

只看该作者 4楼 发表于: 2020-07-02
回 developer 的帖子
developer:这是一段伪代码
this代表当前QLabel的指针
QWidget temp_widget(m_parent);  //创建一个临时的QWidget 局部变量
temp_widget.resize(newVideoWidth, newVideoHeight);  // 设置大小
....... (2020-07-01 17:52) 

QT我不太熟,这帖子中提到的访问 QImage 的像素的方法,也许对你有帮助,不过帖子中用的是 RGB888,我们这里需要的可能是含义为 “RGBA8888" 之类。
离线developer

只看该作者 5楼 发表于: 2020-07-07
回 aplayer 的帖子
aplayer:QT我不太熟,这帖子中提到的访问 QImage 的像素的方法,也许对你有帮助,不过帖子中用的是 RGB888,我们这里需要的可能是含义为 “RGBA8888" 之类。 (2020-07-02 21:54) 

非常感谢 QT的问题 ,我们解决了,现在还有个问题,播放https资源的时候,偶尔会出现卡住的情况,播放http资源 不会卡住
离线aplayer

只看该作者 6楼 发表于: 2020-07-08
回 developer 的帖子
developer:非常感谢 QT的问题 ,我们解决了,现在还有个问题,播放https资源的时候,偶尔会出现卡住的情况,播放http资源 不会卡住 (2020-07-07 17:12) 

卡住是一直卡住还是过段时间后会开始进入播放?方便的话地址可以发我测试下吗?
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个