Intel® Collaboration Suite for WebRTC
Community support and discussions on the Intel® Collaboration Suite for WebRTC (Intel® CS for WebRTC).
Announcements
Intel Customer Support will be observing the Martin Luther King holiday on Monday, Jan. 17, and will return on Tues. Jan. 18.
For the latest information on Intel’s response to the Log4j/Log4Shell vulnerability, please see Intel-SA-00646

4.1 更新布局失败

yt__xia
Beginner
3,512 Views

根据文档使用 updateStream 这个接口,修改一个合成流布局

参数如下: (结果始终返回500)

[{
    "op": "replace",
    "path": "/info/layout",
    "value": [{
        "stream": "816759984407917400",
        "region": {
            "id": 3,
            "shape": "rectangle",
            "area": {
                "left": "0/2",
                "top": "0/2",
                "width": "1/2",
                "height": "1/2"
            }
        }
    }, {
        "stream": "30468870494800184",
        "region": {
            "id": 2,
            "shape": "rectangle",
            "area": {
                "left": "1/2",
                "top": "0/2",
                "width": "1/2",
                "height": "1/2"
            }
        }
    }, {
        "stream": null,
        "region": {
            "id": 1,
            "shape": "rectangle",
            "area": {
                "left": "0/2",
                "top": "1/2",
                "width": "1/2",
                "height": "1/2"
            }
        }
    }, {
        "stream": null,
        "region": {
            "id": 4,
            "shape": "rectangle",
            "area": {
                "left": "1/2",
                "top": "1/2",
                "width": "1/2",
                "height": "1/2"
            }
        }
    }]
}]

0 Kudos
17 Replies
Jinpeng_Z_Intel
Employee
3,512 Views

这里updatestream请求的request body我发现三处错误:一是,所有的id都是number,在rest文档中你会发现id只支持string;

二是,    area中的结构要合理,譬如第一个stream的布局为左上角,长宽都是1/2大小,这里的left代表的是stream距离左边边框的距离,同理top是距离上边框的距离,你这里的0/2是不符合预期的,你可以left和top都为0

三是,如果没有stream需要布局,你就没必要增加value这个数组的成员了,stream为null的是可以删除的

这是我写的一个例子,你看下共同进步:

发送PATCH stream 请求    PATCH {url}:3001/rooms/{roomId}/streams/{roomId}-common

示例Request Body如下:

[{ "op": "replace", "path": "/info/layout", "value": [{ "stream": "990136654598519300", "region": { "id": "1", "shape": "rectangle", "area": { "left": "0", "top": "0", "width": "1/2", "height": "1/2" } } }, { "stream": "362529957792808260", "region": { "id": "2", "shape": "rectangle", "area": { "left": "1/2", "top": "1/2", "width": "1/2", "height": "1/2" } } }, { "stream": "308990862608290000", "region": { "id": "3", "shape": "rectangle", "area": { "left": "1/2", "top": "0", "width": "1/2", "height": "1/2" } } }] }]

                                                                                                                                                                 谢谢

Hr__Z
New Contributor I
3,512 Views

我使用manage_console更新布局不生效,重启服务器才生效,每次更新布局都需要重启服务器吗?。

Jinpeng_Z_Intel
Employee
3,513 Views

通过manage_console更新页面也就是通过3300/console页面来更新布局的,不仅仅更新布局,3300/console页面上的其他操作也可以用以下方法来使其生效: 第一种,就是你发现的重启服务器,其原理就是重启服务器会把这个房间的所有操作都停止。 第二种就是直接从原理出发,把这个room上所有操作都停止,譬如有rtmp操作的调用rest API中的delete rtmp;有rtsp操作的调用rest API中的delete rtsp;有recording操作的调用rest API中的delete recording;有各种客户端接入此room的用户,可以让登录此房间的所有用户调用jssdk中leave方法。 以上是我总结的3300/console修改后使其生效的方法,有什么不完善的地方,及时指出,我们共同进步。 谢谢

Jinpeng_Z_Intel
Employee
3,513 Views

通过manage_console更新页面也就是通过3300/console页面来更新布局的,不仅仅更新布局,3300/console页面上的其他操作也可以用以下方法来使其生效: 第一种,就是你发现的重启服务器,其原理就是重启服务器会把这个房间的所有操作都停止。 第二种就是直接从原理出发,把这个room上所有操作都停止,譬如有rtmp操作的调用rest API中的delete rtmp;有rtsp操作的调用rest API中的delete rtsp;有recording操作的调用rest API中的delete recording;有各种客户端接入此room的所有用户删除,可以让登录此房间的所有用户调用jssdk中leave方法。 以上是我总结的3300/console修改后使其生效的方法,有什么不完善的地方,及时指出,我们共同进步。 谢谢

yt__xia
Beginner
3,513 Views

@Zhao, Jinpeng (Intel)  您好,请问下怎么在外网情况下使用外网IP,内网使用内网IP(当前的做法是修改portal.toml ip地址为外网)

修改 webrtc_agent  network_interfaces = [{name = "eth0", replaced_ip_address = "外网IP"}] 好像并不能实现内外网切换。3.5 版本这样配置同样的网络环境下只使用外网访问是正常的,4.1 同样的配置,同样的网络环境使用内网,外网均报错 ics.js:756 Uncaught (in promise) Error: ICE connection failed or closed.
    at new t (ics.js:756)
    at t.value (ics.js:534)
    at RTCPeerConnection._pc.oniceconnectionstatechange (ics.js:539)
t @ ics.js:756
value @ ics.js:534
_pc.oniceconnectionstatechange @ ics.js:539

 

希望回复,谢谢 

 

Jinpeng_Z_Intel
Employee
3,514 Views

mcu所在的服务器是两个IP(网口)?还是一个IP(内网映射到外网)?

首先上述配置不能实现内外网切换。我看你两个模块的配置都是外网ip,所以只能用外网ip登录mcu,内网是不行的。

如果你是两个网口,可以尝试不配置任何东西,在内网用内网ip登录,在外网用外网ip登录,

如果你是一个ip,内网映射外网。可以尝试只配置外网ip,和你上述配置一样,网口名注意别写错了,这样内外网的client都可以用外网ip登录了;也可以尝试起两个mcu,其中一个所有模块都起来,并配置你上述配置,另外一个只启动webrtc_agent和portal两个模块,并且配置你上述配置的内网地址,这样内网ip和外网ip都能登录了,这个同样适用于双网卡的情况。

建议,配置成外网地址,这样只用外网地址登录,不用损耗多余的资源且简单明了

yt__xia
Beginner
3,514 Views

Zhao, Jinpeng (Intel)

 非常感谢,配置外网,并开放UDP 端口,以及可以正常使用了。另外,想了解下 一个MCU编码能力不够,如何通过增加MCU编码服务器,而不修改API调用方式进行多个编码单元集群使用呢?

Jinpeng_Z_Intel
Employee
3,514 Views

mcu支持分布式部署,上述问题可以增加video_agent来解决

yt__xia
Beginner
3,514 Views

Zhao, Jinpeng (Intel)  使用 rest 接口 updateStream 修改 音视频状态后, js 客户端用什么消息可以接受到变化呢? 尝试使用单流对象监听 update activeaudioinputchange  都没反应。

Jinpeng_Z_Intel
Employee
3,514 Views

当用rest接口updateStream使audio、video的状态改变为有效或者无效的时候,会触发Publication和Subscription中的mute或者unmute事件。

yt__xia
Beginner
3,514 Views

then((subscription) => {

subscription.addEventListener("mute", (event) => {

    console.log('Subscription mute: ' + event);

})

是这样使用的吗? 通过 rest 修改  subscript audio 和 video 音视均被关闭 但是  mute 消息始终能接受到。是不是用法不对呢,看文档也没找到相关用法。

 

使用非mix 进行 subscribe 并监听  mute 是可以正常接受到消息的。(如果每个子流都subscribe 合成流也进行 subscribe 是不是占用n+1路的带宽呢)

我使用的合成场景,需要知道合成中某个流通过rest关闭了视频的消息。 希望回复,谢谢!

Jinpeng_Z_Intel
Employee
3,514 Views

首先合成流(mix流)中的一个流通过rest改变了audio或video的状态时,都会触发mute或unmute事件的

也就是说,上述用法是正确的,也能达到你的目的(某流改变状态后,你能得到信息)。当然你可以使用event.kind来输出具体改变了audio还是video的状态。

当通过rest关闭audio和video后,Publication和Subscription调用mute方法还是可以接受到mute事件的。

mute事件的定义是client/remote停止发送audio/video时触发

unmute事件的定义是client/remote继续发送audio/video时触发

所以无论是restAPI中改变某个流的video或audio的状态,还是Publication和Subscription调用mute方法,都会触发mute/unmute

yt__xia
Beginner
3,515 Views

then((subscription) => {

subscriptionForMixedStream = subscription;

$('.remote video').get(0).srcObject = stream.mediaStream;

subscription.addEventListener('error', (err) => {

console.log('Subscription error: ' + err.error.message);

})

 

subscriptionForMixedStream.addEventListener("mute", (event) => {

console.log('Subscription mute: ' + event);

})

 

使用 subscriptionForMixedStream 监听 mute 用 rest 控制 subscrip 里面的音视值,收不到任何消息。

Jinpeng_Z_Intel
Employee
3,515 Views

sub的是mix流还是forward流?forward流能够触发mute事件,mix的话不能触发mute事件。

1、then后的括号貌似少了一个,2、subscription没有error这个事件吧。重新sub一个forward流,然后试试以下代码:

.then((subscription) => {
subscription.addEventListener("mute", (event) => {
console.log(`Subscription ${subscription.id} muted + event.kind`);
})
)

yt__xia
Beginner
3,515 Views

Zhao, Jinpeng (Intel)

您好,动态切换布局按照您说的方式已经调测正常了。我想请问下,调用修改布局后,如何恢复到默认布局呢?(默认是自动变化,但是设置后,指定2个画面,大于2个视频就无法显示出来了)

Hr__Z
New Contributor I
3,515 Views

Zhao, Jinpeng (Intel) wrote:

这里updatestream请求的request body我发现三处错误:一是,所有的id都是number,在rest文档中你会发现id只支持string;

二是,    area中的结构要合理,譬如第一个stream的布局为左上角,长宽都是1/2大小,这里的left代表的是stream距离左边边框的距离,同理top是距离上边框的距离,你这里的0/2是不符合预期的,你可以left和top都为0

三是,如果没有stream需要布局,你就没必要增加value这个数组的成员了,stream为null的是可以删除的

这是我写的一个例子,你看下共同进步:

发送PATCH stream 请求    PATCH {url}:3001/rooms/{roomId}/streams/{roomId}-common

示例Request Body如下:

[{ "op": "replace", "path": "/info/layout", "value": [{ "stream": "990136654598519300", "region": { "id": "1", "shape": "rectangle", "area": { "left": "0", "top": "0", "width": "1/2", "height": "1/2" } } }, { "stream": "362529957792808260", "region": { "id": "2", "shape": "rectangle", "area": { "left": "1/2", "top": "1/2", "width": "1/2", "height": "1/2" } } }, { "stream": "308990862608290000", "region": { "id": "3", "shape": "rectangle", "area": { "left": "1/2", "top": "0", "width": "1/2", "height": "1/2" } } }] }]

                                                                                                                                                                 谢谢

 

V4.2.1版本,使用http request请求进行LayoutUpdate,服务器返回OK,但是布局的行为和默认房间的布局行为相同,也就是说自己设置的布局位置不生效,请问还需要进行其他设置吗?

谢谢。

Jinpeng_Z_Intel
Employee
3,516 Views

其他设置不需要,我这边是成功的,你是按照我写的body发送的请求吗?流id改了吗?

Reply