AnyChat技术支持论坛

标题: linux 下Client SDK 播放问题 [打印本页]

作者: anychat1    时间: 2014-7-9 17:31
标题: linux 下Client SDK 播放问题
  1. DWORD dwFuncMode = BRAC_FUNC_VIDEO_AUTODISP | BRAC_FUNC_AUDIO_AUTOPLAY | BRAC_FUNC_CHKDEPENDMODULE |
  2.         BRAC_FUNC_AUDIO_VOLUMECALC | BRAC_FUNC_NET_SUPPORTUPNP | BRAC_FUNC_FIREWALL_OPEN |
  3.         BRAC_FUNC_AUDIO_AUTOVOLUME| BRAC_FUNC_AUDIO_VOLUMECALC | BRAC_FUNC_CONFIG_LOCALINI | BRAC_FUNC_VIDEO_CBDATA;
  4.     BRAC_InitSDK((HWND*)this->winId(),dwFuncMode);
  5.     DWORD dw =  BRAC_SetVideoDataCallBack(BRAC_PIX_FMT_RGB24,VideoData_CallBack,this);
  6.     qDebug()<<"dw"<<(int)dw;
  7.     BRAC_SetAudioDataCallBack(AudioData_CallBack,this);
  8.     BRAC_SetVolumeChangeCallBack(VolumeChange_CallBack,this);
  9.     BRAC_SetTransBufferExCallBack(TransBufferEx_CallBack,this);
  10.     BRAC_SetTransBufferCallBack(TransBuffer_CallBack,this);
  11.     BRAC_SetTransFileCallBack(TransFile_CallBack,this);
  12.     BRAC_SetRecordSnapShotCallBack(RecordSnapShot_CallBack,this);
  13.     BRAC_SetSDKFilterDataCallBack(SDKFilterData_CallBack,this);
复制代码

  1. void MainWindow::DrawUserVideo(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, BITMAPINFOHEADER bmiHeader)
  2. {

  3.     BITMAPINFOHEADER  *lpbmi = (BITMAPINFOHEADER*)malloc(sizeof(BITMAPINFOHEADER)+dwLen);

  4.     memset( lpbmi, 0 ,sizeof(BITMAPINFOHEADER)+dwLen);
  5.     memcpy((LPBYTE)lpbmi,&bmiHeader,sizeof(bmiHeader));
  6.     memcpy(((LPBYTE)lpbmi+sizeof(BITMAPINFOHEADER)),lpBuf,dwLen);

  7.     qDebug()<<"bmiHeader.biWidth"<<bmiHeader.biWidth;
  8.     qDebug()<<"bmiHeader.biHeight"<<bmiHeader.biHeight;
  9.     QImage *image;
  10.     int width  = bmiHeader.biWidth;
  11.     int height = bmiHeader.biHeight;

  12.     image=new QImage(width,height,QImage::Format_RGB888);


  13.     image->loadFromData((uchar *)lpBuf,dwLen);
  14.     image->save(tr("/hxy/%1.bmp").arg(QTime::currentTime().toString("hhmmss")));

  15.      delete image;
  16.     delete lpbmi;
复制代码
上面保存出来来的图片,很不稳定,一会正常,一会出现花屏,或者图片只有半截,分辨率也很低。

同时终端里出现下面语句
[swscaler @ 0x9f68b20] No accelerated colorspace conversion found from yuv420p to bgr24.

环境:  服务器 ubuntu12.04
            客户端 ubuntu10.04
            编辑器 QT4.8

作者: 佰锐技术-卓剑锐    时间: 2014-7-9 18:05
您好,可否将终端的输出都发来看一下。
作者: admin    时间: 2014-7-9 18:44
您好:

1、终端输出“No accelerated colorspace conversion found from yuv420p to bgr24.”是正常的,不影响视频的保存;

2、
上面保存出来来的图片,很不稳定,一会正常,一会出现花屏,或者图片只有半截
换一个Linux计算机看看,可能与您的摄像头驱动相关;

3、
分辨率也很低
,您可以通过API来设置本地的视频采集分辩率,请参考:http://www.anychat.cn/faq/index. ... =175&artlang=zh
作者: anychat1    时间: 2014-7-11 17:46
和摄像头驱动没有关联,我看的是我自己电脑(win7)通过网页端传输的摄像头视频。

我测试的程序,是虚拟机里的 ubuntu。

网页上看视频是正常的。
作者: admin    时间: 2014-7-11 18:03
您好,如果不通过image->save()来保存bmp图像,而是直接将lpBuf、bmiHeader来构建一个bmp图像,是否正常?

已经和研发人员确认,lpBuf里面的数据在linux平台上是正常的,不会出现您说的只有半截的问题。
作者: anychat1    时间: 2014-7-12 08:41
admin 发表于 2014-7-11 18:03
您好,如果不通过image->save()来保存bmp图像,而是直接将lpBuf、bmiHeader来构建一个bmp图像,是否正常?
...

你看能否这样,你们发一份能在linux最简单的 能显示图片正常的DEMO ,或者代码段都行。


作者: AnyChat--Lee    时间: 2014-9-3 13:11
本帖最后由 AnyChat--Lee 于 2014-9-3 13:14 编辑

   
void Widget:: DrawUserVideo(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, BITMAPINFOHEADER bmiHeader)
{
       if(dwLen <=0)
               return;

        QImage *image;
        int width  = bmiHeader.biWidth;
        int height = bmiHeader.biHeight;

        image=new QImage((uchar *)lpBuf,width,height,QImage::Format_RGB32);// can load the image
        qDebug()<<"Load Image"<<endl;
        image->save(tr("%1.bmp").arg(QTime::currentTime().toString("hhmmss")));
        delete image;
}

您好,以上代码可以保存图片,且图片正常,还有需要注意的是在
DWORD dw =  BRAC_SetVideoDataCallBack(BRAC_PIX_FMT_RGB32,VideoData_CallBack,this);

设置图像格式这里采用RGB32。

环境:ubuntu 14.04
IDE :QT5


作者: AnyChat--Lee    时间: 2014-9-3 13:12
本帖最后由 AnyChat--Lee 于 2014-9-3 13:13 编辑
anychat1 发表于 2014-7-12 08:41
你看能否这样,你们发一份能在linux最简单的 能显示图片正常的DEMO ,或者代码段都行。

   
void Widget:: DrawUserVideo(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, BITMAPINFOHEADER bmiHeader)
{
       if(dwLen <=0)
               return;

        QImage *image;
        int width  = bmiHeader.biWidth;
        int height = bmiHeader.biHeight;

        image=new QImage((uchar *)lpBuf,width,height,QImage::Format_RGB32);// can load the image
        qDebug()<<"Load Image"<<endl;
        image->save(tr("%1.bmp").arg(QTime::currentTime().toString("hhmmss")));
        delete image;
}

您好,以上代码可以保存图片,且图片正常,还有需要注意的是在
DWORD dw =  BRAC_SetVideoDataCallBack(BRAC_PIX_FMT_RGB32,VideoData_CallBack,this);

设置图像格式这里采用RGB32。

环境:ubuntu 14.04
IDE :QT5
作者: admin    时间: 2014-9-6 10:55
亲,最新版本Linux SDK已经包含了一个图形界面的示例程序,位于SDK包src\client\Qt\helloAnyChat目录下,是Qt5的工程,您可以参考一下。




欢迎光临 AnyChat技术支持论坛 (http://bbs.anychat.cn/) Powered by Discuz! X3