Intel® Collaboration Suite for WebRTC
Community support and discussions on the Intel® Collaboration Suite for WebRTC (Intel® CS for WebRTC).
1146 Discussions

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

董_洪_
Beginner
2,473 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
2,473 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来确认是否有报错

0 Kudos
董_洪_
Beginner
2,472 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, 由于都进行了混淆处理,不知道如何下手,是否能告知该如何修改,万分感谢

0 Kudos
Qiujiao_W_Intel
Employee
2,472 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

0 Kudos
董_洪_
Beginner
2,472 Views

@Qiujiao W. 

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

0 Kudos
Qiujiao_W_Intel
Employee
2,472 Views

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

0 Kudos
董_洪_
Beginner
2,472 Views

Hi, Qiujiao W.

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

0 Kudos
Qiujiao_W_Intel
Employee
2,472 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过环境之后测出来的为准

0 Kudos
董_洪_
Beginner
2,471 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%。这个数据是合理的吗?

    盼回复,谢谢

 

0 Kudos
Qiujiao_W_Intel
Employee
2,471 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的测试数据大体一致,具体数据还以你们那边实际数据为准

 

0 Kudos
董_洪_
Beginner
2,471 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的,请问应该如何修改,谢谢

0 Kudos
Qiujiao_W_Intel
Employee
2,471 Views

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

0 Kudos
董_洪_
Beginner
2,471 Views

Hi, Qiujiao W.

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

0 Kudos
董_洪_
Beginner
2,471 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,并且对码率有要求的话,必须用代码创建?

0 Kudos
Qiujiao_W_Intel
Employee
2,471 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

0 Kudos
董_洪_
Beginner
2,471 Views

Hi, Qiujiao W.

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

0 Kudos
Reply