Intel® Collaboration Suite for WebRTC
Community support and discussions on the Intel® Collaboration Suite for WebRTC (Intel® CS for WebRTC).
Announcements
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!
For the latest information on Intel’s response to the Log4j/Log4Shell vulnerability, please see Intel-SA-00646
1136 Discussions

Intel VCA card Can't use hardware in video-agent

董_洪_
Beginner
572 Views

    我在VCA1283LVV 卡上搭建集群,想利用vca的硬件加速能力,我按照官方文档搭建,在primary上启动了除了audio-agent,video-agent的别的其他组件,包括rabbit-mq和mongodb, 然后再vca的一个节点上启动了video-agent, audio-agent, 在初始化video-agent时,没有开启hardware, 这时通过web进入房间是能看到拼接之后的画面的,woogeen-video. woogeen-audio大约占用17%左右的CPU,使用Intel_gpu_top查看,gpu没有使用。然后重新进行video-agent的配置,video_agent/install_deps.sh --hardware video_agent/init.sh --hardware 没有使用libyami,因为我加载的img是vca_persistent_centos7.2_1.3.48.img, 按文档上的介绍,这个img应该本身包含了Intel Media SDK, 我也确实在/opt/inte/中找到了,同时,我在video-agent目录里卸载了openh264, 修改配置文件为hardwareAccelerated=true, 其余2个均为false, 但是发现仍然占用的是CPU,我试着查找原因,以为是没有设置MSS库的路径导致的,接着设置了 LD_LIBRARY_PATH=/opt/intel/mediasdk/lib64/, 重启后仍然无效,请问是还有哪里要配置的吗?谢谢,盼回复

0 Kudos
15 Replies
Qiujiao_W_Intel
Employee
572 Views

请按照下列方法进行诊断:

1. 请提供Host主机以及VCA卡的CPU信息

2. 在VCA卡上运行vainfo显示VAAPI版本信息以及VAProfile信息来确认VCA卡image是否安装正确

3. 请确认video codec是不是h264, 目前VCA卡上的hardware acceleration功能只对h264起作用,如果使用的是VP8的话不会走hardware路径

4. 请提供MCU运行的版本,可以通过查看logs目录下的woogeen-video-agent.stdout以及video.* log来确认是否有报错

董_洪_
Beginner
572 Views

@Qiujiao W.

   谢谢你的回答,我按照你的建议获取了相关信息

   1.HOST的CPU信息文件为 host_cpu_info.txt  VCA卡的为 vca_cpu_info.txt

   2.vca 上vainfo信息文件为 vca_vainfo.txt, 里面有个报错,属于libva的应该不影响

   3和4放在一起来讲, MCU的软件版本为  Intel_CS_WebRTC.v3.3.1

    Host上的EEPROM,Kernel,以及vca的persistence image都是1.3.48的,Host的BIOS是1.3.54的

    通过开启video-agent的日志,发现使用的codec是VP8的,请问通过JS客户端访问如何能够开启H264呢?我在跟踪协商过程时发现是VP8 VP9 H264的顺序进行的,是不是把H264提前就会默认使用H264, 但是我查看了basic_example里的woogeen.sdk.js和socket.IO.js, 由于都进行了混淆处理,不知道如何下手,是否能告知该如何修改,万分感谢

Qiujiao_W_Intel
Employee
572 Views

Hi, 董洪,根据你提供的信息看VCA上的安装是正确的,应该是由于使用的是VP8所以并没有走hardware路径,请查看https://software.intel.com/sites/products/documentation/webrtc/js/index.html 文档关于conferenceClient.publish以及conferenceClient.subscribe API,将其中的options参数的videoCodec修改为h264即可指定publish以及subscribe流的video codec。另外,如果VCA卡上支持运行intel_gpu_top命令的话,可以运行intel_gpu_top来查看GPU的使用情况;如果intel_gpu_top运行不起来,请利用Media SDK里面$/opt/intel/mediasdk/tools/metrics_monitor 来查看。GPU只用来处理视频,所以你那边换成h264之后CPU也不是说完全不消耗,audio agent还是会占用CPU

董_洪_
Beginner
572 Views

@Qiujiao W. 

      感谢帮助,我之前按照你的提示,修改了video codec,已经可以使用硬件了,因为想测试整个视频会议的性能,我想要将分辨率改为1080p, 在 /extras/basic_example/publish里的script2,script3里将vga修改为了hd1080p, 但是开会议时仍然为vga的分辨率,请问应该在哪里修改?

Qiujiao_W_Intel
Employee
572 Views

Hi, 董洪,看你视频会议使用什么流,如果使用mix流的话请参考我们的文档去3000/console页面配置输出分辨率为1080p, 如果是需要forward流也是1080p的话需要在publish的时候就指定分辨率为1080p,具体的请参考文档publish API

董_洪_
Beginner
572 Views

Hi, Qiujiao W.

    我在3000/console中将分辨率配置成了1080p,并且把质量设为best speed, 但是我用intel_gpu_top 查看使用率, 4人参与会议的时候单个vca核gpu占用率7%,9人时达到15%, 16人时达到50%, 这个数据和你们官方的测试数据有出入吗?那三个vca核总共只能支持6路16人的视频会议吗?盼回复,谢谢。

Qiujiao_W_Intel
Employee
572 Views

Hi,测试机器你有tune过吗?包括host机器以及vca node,请参考https://blog.wwwjfy.net/2013/08/04/basic-server-tuning/ 

另外你那边测试的时候publish流的codec跟分辨率分别是什么, 我们这边实验室测试环境publish跟subscribe都是1080p h264的流,1283L 3个node上能支持9路16人的视频会议,具体数据以你那边tune过环境之后测出来的为准

董_洪_
Beginner
572 Views

Hi, Qiujiao W.

     上次测试时,host机器和vca node均未进行tune, 然后按照你给的连接进行了设置,结果差别不大,16人的会议一直在48%~51%的区间徘徊

    截图 Intel_gpu_top16.bmp

     我不太确定我publish的分辨率,我之前在woogeen.sdk.js 中,将publish和subscribe都设为h264了,才启动的硬编码。分辨率我只在3000/console中设置为1080p, 应该是mcu的输出设置,我有几个问题在厚颜请教下

   1.请问每个参会者的分辨率应该怎么设置?如果默认不是1080p,按理说我的性能消耗应该比你们更低才合理,是否是因为我使用的是vca_persistent_centos7.2_1.3.48.img 镜像导致的性能下降?

    2.我在开启16人会议的时候,渲染出来的拼接画面都留有黑边,是因为高宽比的原因吗?如果是的话需要怎么设置?截图 meeting16.bmp

    3.我该如何修改,才能创建多个房间,开启多个会议跑满3 node 节点,开启多个房间后,使用哪个node是自动分配的吗?如果需要设置的话是在哪里设置?

    4.按您测试的结果,3个node上能支持9路16人的会议,那是指全部用的硬件吧?3个node节点上是否能在开启硬件的情况下,同时开启软件,当gpu使用满了之后使用cpu, 另外是否host机器的软硬件也能利用起来,这样是否可行?

   5.我昨天还测试到一个有趣的现象,当一个16人的会议使用 CS_WebRTC_Conference_Server_MCU.v3.3.1.tgz 里的硬件编码时(Intel Media SDK),消耗的资源是 CPU 117%(共8核), GPU 50%, 而使用 CS_WebRTC_Conference_Server_MCU.v3.3.libyami.CentOS.tgz 里的硬件编码时(libyami), 消耗的资源是CPU 79%(共8核), GPU 26%。这个数据是合理的吗?

    盼回复,谢谢

 

Qiujiao_W_Intel
Employee
572 Views

下面是上面6个问题的回复:

1. publish的resolution是在localStream create 的时候指定的, 具体请参考https://software.intel.com/sites/products/documentation/webrtc/js/index.html 中LocalStream.create API, 默认输入是vga, 理论上应该1080p输入消耗更低,请确认输入的codec确实是h264

2. 从你提供的截图看,输入的分辨率应该是vga,而输出分辨率是1080p,比例不一致所以导致有黑边,根据问题1的回复设置输入分辨率为1080p的话就不会有黑边

3.创建多个房间可以通过访问MCU自带的管理界面http://serverip:3000/console来控制,需要输入sample service的key跟id,还有一种方式是通过API创建,请参考文档https://software.intel.com/sites/products/documentation/webrtc/js/index.html#section6_1 , 使用哪个node的话有相应的调度策略,可以通过cluster_manager/cluster_manager.toml中的strategy来设置相应的调度策略

4. 如果想利用host上的CPU资源,可以在host机器上再起一个video agent。目前我们没有将CPU跟GPU作为并行资源使用

5. MSDK跟yami的测试数据大体一致,具体数据还以你们那边实际数据为准

 

董_洪_
Beginner
572 Views

Hi, Qiujiao W.

     我由于搭建的是basic_example中的例子,我在extras/basic_example/public/woogeen.sdk.js中查找LocalStream.create, 只再1538行时找到对应的调用,但是具体看方法名应该是屏幕共享时调用的。我没看懂代码,大概推测在1003行的 c.create中,我跟踪了代码,并进行了截图,发现里面的resolution已经是1080p, 见图resolution, 不知道这个是否有效,但是看分辨率确实高宽比不对,因为如果我把输出的分辨率改成VGA,就能充满全部画面。建立多个房间的问题在console中已经生效,现在剩下这一个问题,如果需要在extras/basic_example/public/woogeen.sdk.js实现发布1080p的,请问应该如何修改,谢谢

Qiujiao_W_Intel
Employee
572 Views

Hi, 请在extras/basic_example/public/script2.js里查找LocalStream.create, woogeen.sdk.js是我们底层的sdk文件不能修改

董_洪_
Beginner
572 Views

Hi, Qiujiao W.

      你好,按照你的方式已经修改完成,现在在测试整体性能时,由于办公室环境用的五类线,到不了1000M的交换能力,现在测下来一路1080P的码率大概在4000kbps/s, 请问在哪里设置降低码率?在script2, video-agent的配置文件中均未发现,在woogeen.sdk.js里有一些maxVideoBW的设置,但是经过处理过,不敢乱修改,请帮忙指导一下,谢谢

董_洪_
Beginner
572 Views

Hi, Qiujiao W.

       你好,我想了一下,刚才说的应该都是客户端的能力,服务器的应该在basic_server.js中,然后我找到了N.api 里面的createRoom里面还有Bitrate参数,我在basic_server.js中103的函数

app.post('/createRoom/', function(req, res) {
  'use strict';
  var name = req.body.name;
  N.API.createRoom(name, function(response) {
    res.send(response);
  }, function(err) {
    res.send(err);
  });
});

修改如下:

app.post('/createRoom/', function(req, res) {
  'use strict';
  var name = req.body.name;
  N.API.createRoom(name, {
  mode: 'hybrid',
  publishLimit: -1,
  userLimit: 30,
  viewports: {
    "common": {
      mediaMixing: {
        video: {
          maxInput: 16,
          resolution: 'hd1080p',
          multistreaming: 1,
          bitrate: 1500,
          bkColor: {"r":0, "g":0, "b":0},
          layout: {
            base: 'lecture',
          },
          avCoordinated: 1,
          crop: 1
        },
        audio: null
      },
    }
  }
}, function(response) {
    res.send(response);
  }, function(err) {
    res.send(err);
  });
});

修改了之后好像没起效果,另外这个参数和3000/console中的是否冲突,是否会被3000/console中覆盖?

在3000/console中,有个custom选项,里面是否可以补充bitrate的设置(我试了一下,一直提示格式不对)?如果不可以的话,是否多个room,并且对码率有要求的话,必须用代码创建?

Qiujiao_W_Intel
Employee
572 Views

如果想限制subscribe的mix流的bitrate,请在3000/console里mediamixing里的qualitylevel来调节,目前有五档对应不同的bitrate。如果想限制publish的bitrate,需要在publish的option里加上maxVideoBW参数来限制,关于publish或者subscribe相关的client端的设置,修改的是script2.js, 具体请参考sdk api文档https://software.intel.com/sites/products/documentation/webrtc/js/class_woogeen_1_1_conference_client.html#a10840c2422699db98ffb6e536841081a

董_洪_
Beginner
572 Views

Hi, Qiujiao W.

       我在publish的option里加上了maxVideoBW参数来限置上行码率,从测试来看,是有效的。同样,我在3000/console里的qualitylevel来设置subscribe的mix流的bitrate, 五档无论我选哪一档,从单一的测试序列来看没有什么差别。另外,对于运动的场景,码率的峰值上升的很大,是否有像publish的option这样的参数设置,可以设置一个明确的码率,目前mix的码率对我们来说太高了,谢谢

Reply