Licode para Android. Ico 的 一個月… 時間 將 網路 上 舊 的 Licode para Android | lähde: Jiahen | jiaen_developer | Octubre de 2020

Ico 了 一個月 ico vol 將 網路 上 舊 的 Licode para la aplicación de Android L 版本 改成 新 的 版本 , 適用 於 現在 最新 的 Lanzamiento de Licode v8 版本。

有些 上 有些 Licode 學習 文章 需要 , , , 但 又怕 花錢 , 後來 終於 出來 , , 此 分享 一下 學習 學習 ico ico Licode 心得

了解 必須 要 了解 Señal Licode 了解 , 我 分成 三個 部分

  1. Conexión 連線
  2. Suscribir
  3. Publicar 視訊 本地 視訊

從 一定 要先 從 Conexión 做起 :

Paso 1. publicar createToken , Licode Server 傳 傳 Base64 Token 資料 , 將 這個 Token 資料 Decode Base64 後 取得 host 、 tokenId 、 firma 、 seguro 等 資料。

Paso 2. 用 用 此anfitrión 連線 連線websocket 偵聽 並 偵聽 ‘conectar«事件 事件。

Paso 3. 觸發 ”後 會 觸發” conectar ”事件 , 接著 我們 將 之前 取得 的tokenId 、 token 透過 透過 websocket 送出 «token» ken , 注意 這邊 要 送出 的 參數 token 成 轉 成 jsonObject 參數 送出 的 參數 singlePC 設為 false。 範例 如下 :

// tokenValue 是之前createToken 取得的token資料
JSONObject jsonToken = new JSONObject(tokenValue);
JSONObject sendJson = new JSONObject();
sendJson.put("singlePC", false);
sendJson.put("token", jsonToken);

Paso 4. 步驟 3 步驟 , ico Licode Server 會 回 傳 如下 資料 格式 (此 為 範例)

response:
[
success,
{
clientId = "1234de-149e-44bd-a5b6-c445f1a22cb3";
defaultVideoBW = 300;
iceServers = (
{
url = "xxxxx";
}
);
id = 1f21456173c8ccb42a6dbe349;
maxVideoBW = 300;
singlePC = 0;
streams = (
);
}
]

Paso 5. 是 得 是 iceServers 跟 streams , , iceServers 是 可以 配置 rotar servidor 是 部分 , streams 是 其他 有 在 這間房 間 發佈 視訊 的 人 , 我們 做 Suscribir 訂閱 時 需要 用到 他。

Paso 1. 解析 連線 完畢 , 透過 解析 streams 資料 我們 可以 得到 carné de identidad (ID de secuencia) 、video 、 audio 透過 資料 , 透過 id 、 video 等 資料 我們 送出 «subscribe» 給 給 Licode Server, Licode Server 回 回 傳 資料 如下 :

response:
[
1, //streamId
"aaaaaa-7aa5-75fd-3443-0b8f4b4be592",//erizoId
"ccccccc-86f6-406e-977f-aadff-7aa5-75fd-3443-0b8f4b4be592_2"//connectionId
]

Paso 2. 第 要做 1 要做 做完 , 還需 O createPeerConnection-> createOffer -> 接著 這 一步 很 關鍵 , 送出 connectionMessage ess 事件!

try {
JSONObject wrapperJson = new JSONObject();
JSONObject msgJson = new JSONObject();
JSONObject configJson = new JSONObject();
configJson.put("maxVideoBW", 1024);
msgJson.put("config", configJson);
msgJson.put("type", "offer");
msgJson.put("sdp", sdp);
wrapperJson.put("msg", msgJson);
wrapperJson.put("connectionId", "填入步驟6獲得的connectionId");
wrapperJson.put("erizoId", "填入步驟6獲得的erizoId");
//送出指令事件 "connectionMessage"
webSocket.emit("connectionMessage", wrapperJson, null);
} catch (JSONException e) {
e.printStackTrace();
}

Paso 3. 偵聽 _m , , Servidor Licode 資料 資料 格式 如下 :

{
connectionId = "xxx";
evt = {
sdp = "v=0
no=- 0 0 IN IP4 127.0.0.1
ns=LicodeMCU
nt=0 0
na=msid-semantic: WMS *
na=group:BUNDLE audio video
nm=audio 9 UDP/TLS/RTP/SAVPF 111
nc=IN IP4 0.0.0.0
na=rtpmap:111 opus/48000/2
na=rtcp:1 IN IP4 0.0.0.0
na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
na=setup:active
na=mid:audio
na=recvonly
na=ice-ufrag:62f64800
na=ice-pwd:a9f2d4d05ff8f8c86d87c803142c4436
na=fingerprint:sha-256 88:AA:AE:15:CC:E7:2B:10:76:45:04:B8:94:CB:DD:F4:5B:3B:DF:03:26:3B:E0:79:74:CD:39:B9:62:49:B9:61
na=candidate:2 1 udp 2130379007 10.254.252.24 50838 typ host generation 0
na=end-of-candidates
na=rtcp-mux
nm=video 9 UDP/TLS/RTP/SAVPF 96
nc=IN IP4 0.0.0.0
na=rtpmap:96 VP8/90000/2
na=rtcp:1 IN IP4 0.0.0.0
na=rtcp-fb:96 ccm fir
na=rtcp-fb:96 nack
na=rtcp-fb:96 nack pli
na=rtcp-fb:96 goog-remb
na=extmap:2 urn:ietf:params:rtp-hdrext:toffset
na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
na=extmap:4 urn:3gpp:video-orientation
na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
na=setup:active
na=mid:video
na=recvonly
na=ice-ufrag:asddf
na=ice-pwd:a9f2d4d05ff8fdddffg
na=fingerprint:sha-256 88:71:AE:15:29:E7:2B:10:76:45:04:B8:94:CB:14:F4:5B:3B:DF:03:26:3B:E0:79:74:CD:39:B9:62:49:B9:61
na=candidate:2 1 udp 2130379007 10.254.252.24 50838 typ host generation 0
na=end-of-candidates
na=rtcp-mux
n";
type = answer;
};
info = 202;
}

Paso 4. 上面 Licode 傳 回 傳 respuesta , 接著 我們 做 setRemoteDescription。

Paso 5. IceCandidate IceCandidate IceCandidateconnectionMessage 的 事件! 但 的 參數 跟 之前 的 connectionMessage 不 一樣 , 送完 後 成功 的 會 收到 收到 onIceCompleted

try {  
String connectionId = streamDescription.getConnectionId();
JSONObject wrapperJson = new JSONObject();
JSONObject msgJson = new JSONObject();
msgJson.put("candidate", jsonObject);
msgJson.put("type", "candidate");
wrapperJson.put("msg", msgJson);
wrapperJson.put("erizoId", erizoId);
wrapperJson.put("connectionId", connectionId);

//送出指令事件 "connectionMessage"
webSocket.emit("connectionMessage", wrapperJson, null);

} catch (JSONException e) {
e.printStackTrace();
}

Paso 1. 要 要 Conexiones 成功 後再 做 Publicar

Paso 2. Publicar ”publicar” 範例 事件 、 資料 格式 如下 (此 為 範例)

JSONObject publishJson = new JSONObject();

String username = "Jason";
//attributes
JSONObject attributesJson = new JSONObject();
attributesJson.put("actualName", username);
attributesJson.put("name", username);
attributesJson.put("type", "public");
attributesJson.put("maxVideoBW", 10000);
attributesJson.put("minVideoBW", 100);
attributesJson.put("scheme", "notify-break-recover");
JSONObject metadataObj = new JSONObject();
metadataObj.put("type", "publisher");
attributesJson.put("metadata", metadataObj);

publishJson.put("attributes", attributesJson);

publishJson.put("video", true);
publishJson.put("audio", true);
publishJson.put("data", true);
publishJson.put("label", "ARDAMS");
publishJson.put("state", "erizo");

JSONObject muteJson = new JSONObject();
muteJson.put("audio", false);
muteJson.put("video", false);
publishJson.put("muteStream", muteJson);

webSocket.emit("publish", publishJson); ....

Paso 3. «Publicar» 會 回 傳 如下 :

response:
[
1, //streamId
"aaaaaa-7aa5-75fd-3443-0b8f4b4be592",//erizoId
"ccccccc-86f6-406e-977f-aadff-7aa5-75fd-3443-0b8f4b4be592_2"//connectionId
]

Paso 4. 一樣 一樣 createPeerConnection-> createOffer -> 一樣 這 一步 很 關鍵 , 送出 connectionMessage 指令 事件! (跟 Suscribirse a 流程 依 樣)

Paso 5. 偵聽 connection_message_erizo , 事件 , Licode Server 回 傳 資料 格式 同 iniciar sesión Paso 3.

Paso 6. 跟 的 流程 跟 Suscríbete a Krok , 回 傳 的 資料 格式 也 相同 , 在 此 就不 多做 解釋 了 、 請 參閱 Suscríbete Paso 3 ~ Paso 5 Paso 步驟。

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *