介紹
基本
uniapp_arcall 是通過 uniapp 實作的語音通話、視頻通話以及相關配套的呼叫邀請, 解決向指定用戶發起呼叫通知,對方接受后進行通話的場景需求,
呼叫邀請基本流程
<style>#mermaid-svg-TNz4j9goni4QNBLS .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-TNz4j9goni4QNBLS .label text{fill:#333}#mermaid-svg-TNz4j9goni4QNBLS .node rect,#mermaid-svg-TNz4j9goni4QNBLS .node circle,#mermaid-svg-TNz4j9goni4QNBLS .node ellipse,#mermaid-svg-TNz4j9goni4QNBLS .node polygon,#mermaid-svg-TNz4j9goni4QNBLS .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-TNz4j9goni4QNBLS .node .label{text-align:center;fill:#333}#mermaid-svg-TNz4j9goni4QNBLS .node.clickable{cursor:pointer}#mermaid-svg-TNz4j9goni4QNBLS .arrowheadPath{fill:#333}#mermaid-svg-TNz4j9goni4QNBLS .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-TNz4j9goni4QNBLS .flowchart-link{stroke:#333;fill:none}#mermaid-svg-TNz4j9goni4QNBLS .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-TNz4j9goni4QNBLS .edgeLabel rect{opacity:0.9}#mermaid-svg-TNz4j9goni4QNBLS .edgeLabel span{color:#333}#mermaid-svg-TNz4j9goni4QNBLS .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-TNz4j9goni4QNBLS .cluster text{fill:#333}#mermaid-svg-TNz4j9goni4QNBLS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-TNz4j9goni4QNBLS .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-TNz4j9goni4QNBLS text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-TNz4j9goni4QNBLS .actor-line{stroke:grey}#mermaid-svg-TNz4j9goni4QNBLS .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-TNz4j9goni4QNBLS .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-TNz4j9goni4QNBLS #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-TNz4j9goni4QNBLS .sequenceNumber{fill:#fff}#mermaid-svg-TNz4j9goni4QNBLS #sequencenumber{fill:#333}#mermaid-svg-TNz4j9goni4QNBLS #crosshead path{fill:#333;stroke:#333}#mermaid-svg-TNz4j9goni4QNBLS .messageText{fill:#333;stroke:#333}#mermaid-svg-TNz4j9goni4QNBLS .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-TNz4j9goni4QNBLS .labelText,#mermaid-svg-TNz4j9goni4QNBLS .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-TNz4j9goni4QNBLS .loopText,#mermaid-svg-TNz4j9goni4QNBLS .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-TNz4j9goni4QNBLS .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-TNz4j9goni4QNBLS .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-TNz4j9goni4QNBLS .noteText,#mermaid-svg-TNz4j9goni4QNBLS .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-TNz4j9goni4QNBLS .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-TNz4j9goni4QNBLS .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-TNz4j9goni4QNBLS .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-TNz4j9goni4QNBLS .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-TNz4j9goni4QNBLS .section{stroke:none;opacity:0.2}#mermaid-svg-TNz4j9goni4QNBLS .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-TNz4j9goni4QNBLS .section2{fill:#fff400}#mermaid-svg-TNz4j9goni4QNBLS .section1,#mermaid-svg-TNz4j9goni4QNBLS .section3{fill:#fff;opacity:0.2}#mermaid-svg-TNz4j9goni4QNBLS .sectionTitle0{fill:#333}#mermaid-svg-TNz4j9goni4QNBLS .sectionTitle1{fill:#333}#mermaid-svg-TNz4j9goni4QNBLS .sectionTitle2{fill:#333}#mermaid-svg-TNz4j9goni4QNBLS .sectionTitle3{fill:#333}#mermaid-svg-TNz4j9goni4QNBLS .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-TNz4j9goni4QNBLS .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-TNz4j9goni4QNBLS .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-TNz4j9goni4QNBLS .grid path{stroke-width:0}#mermaid-svg-TNz4j9goni4QNBLS .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-TNz4j9goni4QNBLS .task{stroke-width:2}#mermaid-svg-TNz4j9goni4QNBLS .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-TNz4j9goni4QNBLS .taskText:not([font-size]){font-size:11px}#mermaid-svg-TNz4j9goni4QNBLS .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-TNz4j9goni4QNBLS .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-TNz4j9goni4QNBLS .task.clickable{cursor:pointer}#mermaid-svg-TNz4j9goni4QNBLS .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-TNz4j9goni4QNBLS .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-TNz4j9goni4QNBLS .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-TNz4j9goni4QNBLS .taskText0,#mermaid-svg-TNz4j9goni4QNBLS .taskText1,#mermaid-svg-TNz4j9goni4QNBLS .taskText2,#mermaid-svg-TNz4j9goni4QNBLS .taskText3{fill:#fff}#mermaid-svg-TNz4j9goni4QNBLS .task0,#mermaid-svg-TNz4j9goni4QNBLS .task1,#mermaid-svg-TNz4j9goni4QNBLS .task2,#mermaid-svg-TNz4j9goni4QNBLS .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-TNz4j9goni4QNBLS .taskTextOutside0,#mermaid-svg-TNz4j9goni4QNBLS .taskTextOutside2{fill:#000}#mermaid-svg-TNz4j9goni4QNBLS .taskTextOutside1,#mermaid-svg-TNz4j9goni4QNBLS .taskTextOutside3{fill:#000}#mermaid-svg-TNz4j9goni4QNBLS .active0,#mermaid-svg-TNz4j9goni4QNBLS .active1,#mermaid-svg-TNz4j9goni4QNBLS .active2,#mermaid-svg-TNz4j9goni4QNBLS .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-TNz4j9goni4QNBLS .activeText0,#mermaid-svg-TNz4j9goni4QNBLS .activeText1,#mermaid-svg-TNz4j9goni4QNBLS .activeText2,#mermaid-svg-TNz4j9goni4QNBLS .activeText3{fill:#000 !important}#mermaid-svg-TNz4j9goni4QNBLS .done0,#mermaid-svg-TNz4j9goni4QNBLS .done1,#mermaid-svg-TNz4j9goni4QNBLS .done2,#mermaid-svg-TNz4j9goni4QNBLS .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-TNz4j9goni4QNBLS .doneText0,#mermaid-svg-TNz4j9goni4QNBLS .doneText1,#mermaid-svg-TNz4j9goni4QNBLS .doneText2,#mermaid-svg-TNz4j9goni4QNBLS .doneText3{fill:#000 !important}#mermaid-svg-TNz4j9goni4QNBLS .crit0,#mermaid-svg-TNz4j9goni4QNBLS .crit1,#mermaid-svg-TNz4j9goni4QNBLS .crit2,#mermaid-svg-TNz4j9goni4QNBLS .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-TNz4j9goni4QNBLS .activeCrit0,#mermaid-svg-TNz4j9goni4QNBLS .activeCrit1,#mermaid-svg-TNz4j9goni4QNBLS .activeCrit2,#mermaid-svg-TNz4j9goni4QNBLS .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-TNz4j9goni4QNBLS .doneCrit0,#mermaid-svg-TNz4j9goni4QNBLS .doneCrit1,#mermaid-svg-TNz4j9goni4QNBLS .doneCrit2,#mermaid-svg-TNz4j9goni4QNBLS .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-TNz4j9goni4QNBLS .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-TNz4j9goni4QNBLS .milestoneText{font-style:italic}#mermaid-svg-TNz4j9goni4QNBLS .doneCritText0,#mermaid-svg-TNz4j9goni4QNBLS .doneCritText1,#mermaid-svg-TNz4j9goni4QNBLS .doneCritText2,#mermaid-svg-TNz4j9goni4QNBLS .doneCritText3{fill:#000 !important}#mermaid-svg-TNz4j9goni4QNBLS .activeCritText0,#mermaid-svg-TNz4j9goni4QNBLS .activeCritText1,#mermaid-svg-TNz4j9goni4QNBLS .activeCritText2,#mermaid-svg-TNz4j9goni4QNBLS .activeCritText3{fill:#000 !important}#mermaid-svg-TNz4j9goni4QNBLS .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-TNz4j9goni4QNBLS g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-TNz4j9goni4QNBLS g.classGroup text .title{font-weight:bolder}#mermaid-svg-TNz4j9goni4QNBLS g.clickable{cursor:pointer}#mermaid-svg-TNz4j9goni4QNBLS g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-TNz4j9goni4QNBLS g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-TNz4j9goni4QNBLS .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-TNz4j9goni4QNBLS .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-TNz4j9goni4QNBLS .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-TNz4j9goni4QNBLS .dashed-line{stroke-dasharray:3}#mermaid-svg-TNz4j9goni4QNBLS #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-TNz4j9goni4QNBLS #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-TNz4j9goni4QNBLS #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-TNz4j9goni4QNBLS #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-TNz4j9goni4QNBLS #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-TNz4j9goni4QNBLS #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-TNz4j9goni4QNBLS #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-TNz4j9goni4QNBLS #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-TNz4j9goni4QNBLS .commit-id,#mermaid-svg-TNz4j9goni4QNBLS .commit-msg,#mermaid-svg-TNz4j9goni4QNBLS .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-TNz4j9goni4QNBLS .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-TNz4j9goni4QNBLS .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-TNz4j9goni4QNBLS g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-TNz4j9goni4QNBLS g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-TNz4j9goni4QNBLS g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-TNz4j9goni4QNBLS g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-TNz4j9goni4QNBLS g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-TNz4j9goni4QNBLS g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-TNz4j9goni4QNBLS .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-TNz4j9goni4QNBLS .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-TNz4j9goni4QNBLS .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-TNz4j9goni4QNBLS .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-TNz4j9goni4QNBLS .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-TNz4j9goni4QNBLS .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-TNz4j9goni4QNBLS .edgeLabel text{fill:#333}#mermaid-svg-TNz4j9goni4QNBLS .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-TNz4j9goni4QNBLS .node circle.state-start{fill:black;stroke:black}#mermaid-svg-TNz4j9goni4QNBLS .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-TNz4j9goni4QNBLS #statediagram-barbEnd{fill:#9370db}#mermaid-svg-TNz4j9goni4QNBLS .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-TNz4j9goni4QNBLS .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-TNz4j9goni4QNBLS .statediagram-state .divider{stroke:#9370db}#mermaid-svg-TNz4j9goni4QNBLS .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-TNz4j9goni4QNBLS .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-TNz4j9goni4QNBLS .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-TNz4j9goni4QNBLS .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-TNz4j9goni4QNBLS .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-TNz4j9goni4QNBLS .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-TNz4j9goni4QNBLS .note-edge{stroke-dasharray:5}#mermaid-svg-TNz4j9goni4QNBLS .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-TNz4j9goni4QNBLS .error-icon{fill:#522}#mermaid-svg-TNz4j9goni4QNBLS .error-text{fill:#522;stroke:#522}#mermaid-svg-TNz4j9goni4QNBLS .edge-thickness-normal{stroke-width:2px}#mermaid-svg-TNz4j9goni4QNBLS .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-TNz4j9goni4QNBLS .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-TNz4j9goni4QNBLS .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-TNz4j9goni4QNBLS .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-TNz4j9goni4QNBLS .marker{fill:#333}#mermaid-svg-TNz4j9goni4QNBLS .marker.cross{stroke:#333}
:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}</style>
<style>#mermaid-svg-TNz4j9goni4QNBLS {
color: rgba(0, 0, 0, 0.75);
font: ;
}</style>
發起呼叫
收到被叫接聽
收到被叫拒絕
通知主叫接聽
通知主叫拒絕
主叫
被叫收到呼叫
主叫執行 RTC
相關邏輯
被叫接聽
被叫拒絕
被叫執行 RTC
60s 無操作邀請自動失敗
通話基本流程
<style>#mermaid-svg-7SzTyaCd5pDTDeMS .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .label text{fill:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .node rect,#mermaid-svg-7SzTyaCd5pDTDeMS .node circle,#mermaid-svg-7SzTyaCd5pDTDeMS .node ellipse,#mermaid-svg-7SzTyaCd5pDTDeMS .node polygon,#mermaid-svg-7SzTyaCd5pDTDeMS .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-7SzTyaCd5pDTDeMS .node .label{text-align:center;fill:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .node.clickable{cursor:pointer}#mermaid-svg-7SzTyaCd5pDTDeMS .arrowheadPath{fill:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-7SzTyaCd5pDTDeMS .flowchart-link{stroke:#333;fill:none}#mermaid-svg-7SzTyaCd5pDTDeMS .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-7SzTyaCd5pDTDeMS .edgeLabel rect{opacity:0.9}#mermaid-svg-7SzTyaCd5pDTDeMS .edgeLabel span{color:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-7SzTyaCd5pDTDeMS .cluster text{fill:#333}#mermaid-svg-7SzTyaCd5pDTDeMS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-7SzTyaCd5pDTDeMS .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-7SzTyaCd5pDTDeMS text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-7SzTyaCd5pDTDeMS .actor-line{stroke:grey}#mermaid-svg-7SzTyaCd5pDTDeMS .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-7SzTyaCd5pDTDeMS #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .sequenceNumber{fill:#fff}#mermaid-svg-7SzTyaCd5pDTDeMS #sequencenumber{fill:#333}#mermaid-svg-7SzTyaCd5pDTDeMS #crosshead path{fill:#333;stroke:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .messageText{fill:#333;stroke:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-7SzTyaCd5pDTDeMS .labelText,#mermaid-svg-7SzTyaCd5pDTDeMS .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-7SzTyaCd5pDTDeMS .loopText,#mermaid-svg-7SzTyaCd5pDTDeMS .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-7SzTyaCd5pDTDeMS .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-7SzTyaCd5pDTDeMS .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-7SzTyaCd5pDTDeMS .noteText,#mermaid-svg-7SzTyaCd5pDTDeMS .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-7SzTyaCd5pDTDeMS .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-7SzTyaCd5pDTDeMS .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-7SzTyaCd5pDTDeMS .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-7SzTyaCd5pDTDeMS .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7SzTyaCd5pDTDeMS .section{stroke:none;opacity:0.2}#mermaid-svg-7SzTyaCd5pDTDeMS .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-7SzTyaCd5pDTDeMS .section2{fill:#fff400}#mermaid-svg-7SzTyaCd5pDTDeMS .section1,#mermaid-svg-7SzTyaCd5pDTDeMS .section3{fill:#fff;opacity:0.2}#mermaid-svg-7SzTyaCd5pDTDeMS .sectionTitle0{fill:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .sectionTitle1{fill:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .sectionTitle2{fill:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .sectionTitle3{fill:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7SzTyaCd5pDTDeMS .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-7SzTyaCd5pDTDeMS .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7SzTyaCd5pDTDeMS .grid path{stroke-width:0}#mermaid-svg-7SzTyaCd5pDTDeMS .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-7SzTyaCd5pDTDeMS .task{stroke-width:2}#mermaid-svg-7SzTyaCd5pDTDeMS .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7SzTyaCd5pDTDeMS .taskText:not([font-size]){font-size:11px}#mermaid-svg-7SzTyaCd5pDTDeMS .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7SzTyaCd5pDTDeMS .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-7SzTyaCd5pDTDeMS .task.clickable{cursor:pointer}#mermaid-svg-7SzTyaCd5pDTDeMS .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-7SzTyaCd5pDTDeMS .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-7SzTyaCd5pDTDeMS .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-7SzTyaCd5pDTDeMS .taskText0,#mermaid-svg-7SzTyaCd5pDTDeMS .taskText1,#mermaid-svg-7SzTyaCd5pDTDeMS .taskText2,#mermaid-svg-7SzTyaCd5pDTDeMS .taskText3{fill:#fff}#mermaid-svg-7SzTyaCd5pDTDeMS .task0,#mermaid-svg-7SzTyaCd5pDTDeMS .task1,#mermaid-svg-7SzTyaCd5pDTDeMS .task2,#mermaid-svg-7SzTyaCd5pDTDeMS .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-7SzTyaCd5pDTDeMS .taskTextOutside0,#mermaid-svg-7SzTyaCd5pDTDeMS .taskTextOutside2{fill:#000}#mermaid-svg-7SzTyaCd5pDTDeMS .taskTextOutside1,#mermaid-svg-7SzTyaCd5pDTDeMS .taskTextOutside3{fill:#000}#mermaid-svg-7SzTyaCd5pDTDeMS .active0,#mermaid-svg-7SzTyaCd5pDTDeMS .active1,#mermaid-svg-7SzTyaCd5pDTDeMS .active2,#mermaid-svg-7SzTyaCd5pDTDeMS .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-7SzTyaCd5pDTDeMS .activeText0,#mermaid-svg-7SzTyaCd5pDTDeMS .activeText1,#mermaid-svg-7SzTyaCd5pDTDeMS .activeText2,#mermaid-svg-7SzTyaCd5pDTDeMS .activeText3{fill:#000 !important}#mermaid-svg-7SzTyaCd5pDTDeMS .done0,#mermaid-svg-7SzTyaCd5pDTDeMS .done1,#mermaid-svg-7SzTyaCd5pDTDeMS .done2,#mermaid-svg-7SzTyaCd5pDTDeMS .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-7SzTyaCd5pDTDeMS .doneText0,#mermaid-svg-7SzTyaCd5pDTDeMS .doneText1,#mermaid-svg-7SzTyaCd5pDTDeMS .doneText2,#mermaid-svg-7SzTyaCd5pDTDeMS .doneText3{fill:#000 !important}#mermaid-svg-7SzTyaCd5pDTDeMS .crit0,#mermaid-svg-7SzTyaCd5pDTDeMS .crit1,#mermaid-svg-7SzTyaCd5pDTDeMS .crit2,#mermaid-svg-7SzTyaCd5pDTDeMS .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-7SzTyaCd5pDTDeMS .activeCrit0,#mermaid-svg-7SzTyaCd5pDTDeMS .activeCrit1,#mermaid-svg-7SzTyaCd5pDTDeMS .activeCrit2,#mermaid-svg-7SzTyaCd5pDTDeMS .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-7SzTyaCd5pDTDeMS .doneCrit0,#mermaid-svg-7SzTyaCd5pDTDeMS .doneCrit1,#mermaid-svg-7SzTyaCd5pDTDeMS .doneCrit2,#mermaid-svg-7SzTyaCd5pDTDeMS .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-7SzTyaCd5pDTDeMS .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-7SzTyaCd5pDTDeMS .milestoneText{font-style:italic}#mermaid-svg-7SzTyaCd5pDTDeMS .doneCritText0,#mermaid-svg-7SzTyaCd5pDTDeMS .doneCritText1,#mermaid-svg-7SzTyaCd5pDTDeMS .doneCritText2,#mermaid-svg-7SzTyaCd5pDTDeMS .doneCritText3{fill:#000 !important}#mermaid-svg-7SzTyaCd5pDTDeMS .activeCritText0,#mermaid-svg-7SzTyaCd5pDTDeMS .activeCritText1,#mermaid-svg-7SzTyaCd5pDTDeMS .activeCritText2,#mermaid-svg-7SzTyaCd5pDTDeMS .activeCritText3{fill:#000 !important}#mermaid-svg-7SzTyaCd5pDTDeMS .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7SzTyaCd5pDTDeMS g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-7SzTyaCd5pDTDeMS g.classGroup text .title{font-weight:bolder}#mermaid-svg-7SzTyaCd5pDTDeMS g.clickable{cursor:pointer}#mermaid-svg-7SzTyaCd5pDTDeMS g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-7SzTyaCd5pDTDeMS g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-7SzTyaCd5pDTDeMS .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-7SzTyaCd5pDTDeMS .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-7SzTyaCd5pDTDeMS .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-7SzTyaCd5pDTDeMS .dashed-line{stroke-dasharray:3}#mermaid-svg-7SzTyaCd5pDTDeMS #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-7SzTyaCd5pDTDeMS #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-7SzTyaCd5pDTDeMS #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-7SzTyaCd5pDTDeMS #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-7SzTyaCd5pDTDeMS #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-7SzTyaCd5pDTDeMS #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-7SzTyaCd5pDTDeMS #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-7SzTyaCd5pDTDeMS #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-7SzTyaCd5pDTDeMS .commit-id,#mermaid-svg-7SzTyaCd5pDTDeMS .commit-msg,#mermaid-svg-7SzTyaCd5pDTDeMS .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7SzTyaCd5pDTDeMS .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7SzTyaCd5pDTDeMS .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7SzTyaCd5pDTDeMS g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7SzTyaCd5pDTDeMS g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-7SzTyaCd5pDTDeMS g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-7SzTyaCd5pDTDeMS g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-7SzTyaCd5pDTDeMS g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-7SzTyaCd5pDTDeMS g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-7SzTyaCd5pDTDeMS .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-7SzTyaCd5pDTDeMS .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-7SzTyaCd5pDTDeMS .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-7SzTyaCd5pDTDeMS .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-7SzTyaCd5pDTDeMS .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-7SzTyaCd5pDTDeMS .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-7SzTyaCd5pDTDeMS .edgeLabel text{fill:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-7SzTyaCd5pDTDeMS .node circle.state-start{fill:black;stroke:black}#mermaid-svg-7SzTyaCd5pDTDeMS .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-7SzTyaCd5pDTDeMS #statediagram-barbEnd{fill:#9370db}#mermaid-svg-7SzTyaCd5pDTDeMS .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-7SzTyaCd5pDTDeMS .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-7SzTyaCd5pDTDeMS .statediagram-state .divider{stroke:#9370db}#mermaid-svg-7SzTyaCd5pDTDeMS .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-7SzTyaCd5pDTDeMS .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-7SzTyaCd5pDTDeMS .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-7SzTyaCd5pDTDeMS .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-7SzTyaCd5pDTDeMS .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-7SzTyaCd5pDTDeMS .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-7SzTyaCd5pDTDeMS .note-edge{stroke-dasharray:5}#mermaid-svg-7SzTyaCd5pDTDeMS .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-7SzTyaCd5pDTDeMS .error-icon{fill:#522}#mermaid-svg-7SzTyaCd5pDTDeMS .error-text{fill:#522;stroke:#522}#mermaid-svg-7SzTyaCd5pDTDeMS .edge-thickness-normal{stroke-width:2px}#mermaid-svg-7SzTyaCd5pDTDeMS .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-7SzTyaCd5pDTDeMS .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-7SzTyaCd5pDTDeMS .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-7SzTyaCd5pDTDeMS .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-7SzTyaCd5pDTDeMS .marker{fill:#333}#mermaid-svg-7SzTyaCd5pDTDeMS .marker.cross{stroke:#333}
:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}</style>
<style>#mermaid-svg-7SzTyaCd5pDTDeMS {
color: rgba(0, 0, 0, 0.75);
font: ;
}</style>
采集音視頻
本地采集音視頻
通過回呼獲取遠端音視頻
初始化 RTC 實體
加入房間
發布并渲染音視頻
渲染遠端音視頻
arcall 具體實作
demo 原始碼 地址
呼叫邀請相關邏輯
引入呼叫邀請所需插件
// rtm 實時訊息引入
const rtmModule = uni. requireNativePlugin ( 'AR-RtmModule' ) ;
呼叫邀請初始化
uniapp_arcall的是專案啟動就登陸 RTM,因此寫在 onLaunch中,除錯時會發生以下錯誤
Error: [JS Framework] Failed to receiveTasks, instance (1) is not available.
原因是多次將 RTM 實體初始化,會影響到 RTM 相關的使用請將程式殺死后在進行除錯
// 初始化回呼
await rtmModule. setCallBack ( res => {
switch ( res. rtmEvent) {
// SDK 與 RTM 系統的連接狀態發生改變回呼,
case 'onConnectionStateChanged' :
break ;
// 收到點對點訊息回呼
case 'onPeerMessageReceived' :
break ;
// 被訂閱用戶在線狀態改變
case 'onPeersOnlineStatusChanged' :
break ;
// 回傳給主叫:被叫已接受呼叫邀請
case 'onLocalInvitationAccepted' :
break ;
// 回傳給主叫:呼叫邀請已被取消
case 'onLocalInvitationCanceled' :
break ;
// 回傳給主叫:呼叫邀請行程失敗
case 'onLocalInvitationFailure' :
break ;
// 回傳給主叫:被叫已收到呼叫邀請
case 'onLocalInvitationReceivedByPeer' :
break ;
// 回傳給主叫:被叫已拒絕呼叫邀請
case 'onLocalInvitationRefused' :
break ;
// 回傳給被叫:接受呼叫邀請成功
case 'onRemoteInvitationAccepted' :
break ;
// 回傳給被叫:主叫已取消呼叫邀請
case 'onRemoteInvitationCanceled' :
break ;
// 回傳給被叫:來自主叫的呼叫邀請行程失敗
case 'onRemoteInvitationFailure' :
break ;
// 回傳給被叫:收到一個呼叫邀請
case 'onRemoteInvitationReceived' :
break ;
// 回傳給被叫:拒絕呼叫邀請成功
case 'onRemoteInvitationRefused' :
break ;
default :
break ;
}
} )
// 初始化實體
await rtmModule. createInstance ( {
"appId" : "你的 appid"
} , res => {
console. log ( res) ;
} )
// 登錄 RTM 系統
await rtmModule. login ( {
"token" : "" ,
"userId" : "本地用戶標識"
} , ( res ) => {
console. log ( "登錄 RTM 系統" , res) ;
} )
// // 使用 RTM 呼叫邀請(設定邀請呼叫實體的監聽器)
await rtmModule. setCallEventListener ( ) ;
主叫
查詢呼叫用戶是否在線
rtmModule. queryPeersOnlineStatus ( {
"peerIds" : [ "呼叫用戶" ]
} , ( res ) => {
console. log ( res) ;
} )
呼叫用戶在線時發起呼叫并訂閱
rtmModule. sendLocalInvitation ( {
"calleeId" : calleeId, // 被呼叫者的 user ID
"content" : JSON . stringify ( info) // 邀請內容
} , ( res ) => {
resolve ( res. code) ;
} )
訂閱(獲取對方在線狀態) 當結束通話或結束邀請時記得取消訂閱 rtmModule. subscribePeersOnlineStatus ( {
"peerIds" : [ "對方 uid" ]
} , ( res ) => {
//smething
console. log ( "訂閱指定單個或多個用戶的在線狀態" , res) ;
} )
主叫取消呼叫
rtmModule. cancelLocalInvitation ( {
"calleeId" : calleeId, // 被呼叫者的 user ID
"content" : JSON . stringify ( info) // 邀請內容
} , ( res ) => {
console. log ( "取消給對方的呼叫邀請" , res) ;
} ) ;
被叫
通過回呼 onRemoteInvitationReceived 收到主叫
rtmModule. refuseRemoteInvitation ( {
"calleeId" : userId,
"response" : JSON . stringify ( info) / 邀請內容
} , ( res ) => {
} ) ;
rtmModule. acceptRemoteInvitation ( {
"calleeId" : calleeId, // 供被叫獲取主叫的用戶 ID
"response" : info ? JSON . stringify ( info) : "" // 邀請回應
} , ( res ) => {
} ) ;
// 訂閱對方在線狀態
...
相關提示
相關的提示、邏輯都可通過回呼來進行操作
通話相關邏輯
視頻組件必須實在 nvue 頁面
< AR-CanvasView ref = " location" style = " flex : 1; " />
不管是主叫還是被叫,收到接聽的回呼后就可以進入 RTC 的相關邏輯
const rtcModule = uni. requireNativePlugin ( 'AR-RtcModule' ) ;
// 初始化回呼
await rtcModule. setCallBack ( res => {
switch ( res. engineEvent) {
case "onConnectionLost" :
console. log ( "onConnectionLost" , res) ;
break ;
// 網路連接狀態已改變回呼
case "onConnectionStateChanged" :
console. log ( "網路連接狀態已改變回呼" , res) ;
break ;
// 發生警告回呼
case "onWarning" :
break ;
// 發生錯誤回呼
case "onError" :
break ;
// 加入頻道成功回呼
case "onJoinChannelSuccess" :
// 本地渲染
break ;
// 遠端用戶加入當前頻道回呼
case "onUserJoined" :
break ;
// 遠端用戶離開當前頻道回呼
case "onUserOffline" :
console. log ( "遠端用戶離開當前頻道回呼" , res) ;
break ;
// 網路連接狀態已改變回呼
case "onConnectionStateChanged" :
break ;
// 已顯示遠端視頻首幀回呼
case "onFirstRemoteVideoFrame" :
break ;
case "onFirstRemoteVideoDecoded" :
break ;
// 遠端用戶視頻狀態發生已變化回呼(當頻道內的用戶超過 17 時,該回呼可能不準確)
case "onRemoteVideoStateChanged" :
break ;
// // 本地網路型別發生改變回呼
// case "onNetworkTypeChanged":
// break;
// // 網路連接中斷
// case "onConnectionLost":
// break;
// // 遠端音頻狀態發生改變回呼
// case "onRemoteAudioStateChanged":
// break;
// // 本地音頻狀態發生改變回呼
// case "onLocalAudioStateChanged":
// break;
// // 本地視頻狀態發生改變回呼
// case "onLocalVideoStateChanged":
// break;
// // 重新加入頻道回呼
// case "onRejoinChannelSuccess":
// break;
// // 離開頻道回呼
// case "onLeaveChannel":
// break;
// 已發送本地音頻首幀回呼
// case "onFirstLocalAudioFrame":
// break;
// // 已顯示本地視頻首幀回呼
// case "onFirstLocalVideoFrame":
// break;
// // Token 服務即將過期回呼
// case "onTokenPrivilegeWillExpire":
// break;
// // Token 過期回呼
// case "onRequestToken":
// break;
// // 用戶角色已切換回呼(直播場景下)
// case "onClientRoleChanged":
// break;
// // 本地或遠端視頻大小或旋轉資訊發生改變回呼
// case "onVideoSizeChanged":
// break;
// // 通話中遠端音頻流的統計資訊回呼
// case "onRemoteAudioStats":
// break;
// // 當前通話統計回呼, 該回呼在通話中每兩秒觸發一次
// case "onRtcStats":
// break;
// // 通話中每個用戶的網路上下行 last mile 質量報告回呼
// case "onNetworkQuality":
// break;
// // 通話中本地視頻流的統計資訊回呼
// case "onLocalVideoStats":
// break;
// // 通話中本地音頻流的統計資訊回呼
// case "onLocalAudioStats":
// break;
// // 通話中遠端視頻流的統計資訊回呼
// case "onRemoteVideoStats":
// break;
}
} ) ;
// 初始化實體
await rtcModule. create ( {
"appId" : '你的 appid'
} , res => {
console. log ( '初始化實體 rtc' , res) ;
} ) ;
// 開啟智能降噪
await rtcModule. setParameters ( {
Cmd: 'SetAudioAiNoise' ,
Enable: 1
} , ( res ) => {
console. log ( '私人定制' , res) ;
} ) ;
// 設定視頻編碼屬性
await rtcModule. setVideoEncoderConfiguration ( { } , res) => {
console. log ( 'RTC 設定視頻編碼屬性 setVideoEncoderConfiguration 方法呼叫' , res. code === 0 ? '成功' : '失敗:' + res) ;
} ) ;
// 啟用視頻
await rtcModule. enableVideo ( ( res ) => {
console. log ( 'RTC 啟用視頻 enableVideo 方法呼叫' , res. code === 0 ? '成功' : '失敗:' + res) ;
} ) ;
rtcModule. joinChannel ( {
"token" : '' ,
"channelId" : 本地創建的頻道/ 通過呼叫邀請傳遞過來的頻道,
"uid" : 本地的userid,
} , ( res ) => {
console. log ( 'RTC joinChannel 方法呼叫' , res. code === 0 ? '成功' : '失敗:' + res) ;
} ) ;
本地視頻渲染
< AR-CanvasView ref = " location" style = " flex : 1; " />
獲取容器
// 請確保可以獲取到容器
Store. location = this . $refs. location;
console. log ( Store. location) ;
// 列印后 類似這種
{
"ref" : "68" ,
"type" : "AR-CanvasView" ,
"attr" : {
"@styleScope" : "data-v-39c12bd0"
} ,
"style" : {
"flex" : "1"
}
}
// 渲染視頻
await Store. location. setupLocalVideo ( {
"renderMode" : 1 ,
"channelId" : 加入的頻道房間
"uid" : 本地的userid
"mirrorMode" : 0
} , ( res ) => {
console. log ( '渲染視頻' , res) ;
} ) ;
// 本地預覽
await Store. location. startPreview ( ( res ) => {
console. log ( '本地預覽' , res) ;
} )
遠端視頻渲染 通過回呼 onFirstRemoteVideoDecoded 獲取遠端用戶發布視頻 Store.remote 與 Store.location 類似
await Store. remote. setupRemoteVideo ( {
"renderMode" : 1 ,
"channelId" : 加入的頻道
"uid" : res. uid
"mirrorMode" : 0
} , ( res ) => {
console. log ( '渲染遠端視頻' , res) ;
} )
// 本地預覽
await Store. remote. startPreview ( ( res ) => {
console. log ( '遠端本地預覽' , res) ;
} )
掛斷
// 銷毀實體
rtcModule. destroyRtc ( ( res ) => {
console. log ( "銷毀實體" , res) ;
} ) ;
總結
當前邏輯基本實作呼叫邀請+通話 需要更詳細,更具體,更全面的代碼請前往 demo 原始碼 地址
注意事項
RTM 初始化、RTC 初始化都只需要執行一次,多次執行請殺掉程式 RTM 可以在 vue頁面, RTC 視頻容器 必須在 nvue 頁面