本文書は RICOH Live Streaming サービスを用いたアプリケーションの開発者向けにサービスの使い方を解説する文書です
モジュール | メンテナンスウィンドウ |
---|---|
料金・利用量集計 API | 水曜日 18:00-20:00 |
wss://signaling.livestreaming.mw.smart-integration.ricoh.com/v1/room
Dev 環境のご利用が必要とリコーが判断した場合のみ、エンドポイントの情報をご提供いたします。
ClientSDK for Web
const connectOption = {
localLSTracks: lsTracks,
signalingURL: 'Dev環境のエンドポイントURL', // 本番環境の場合不要
};
client.connect('CLIENT_ID', access_token, connectOption);
ClientSDK for Android
val option = Option.Builder()
.localTracks(localTracks)
.signalingURL("Dev環境のエンドポイントURL") // 本番環境の場合不要
.build()
mClient!!.connect(
"CLIENT_ID",
accessToken,
option)
ClientSDK for Windows
var option = new Option()
.SetLocalTracks(localTracks)
.SetSignalingURL("Dev環境のエンドポイントURL"); // 本番環境の場合不要
client.Connect("CLIENT_ID", accessToken, option);
JavaScript (Node.js)
const jwt = require('jsonwebtoken');
const moment = require('moment');
CLIENT_SECRET = 'sample_client_secret';
function generateToken() {
const nbf = moment().unix();
const exp = moment().add(30, 'seconds').unix();
const connection_id = 'conn1';
const room_id = 'room1';
const room_spec = { type: 'sfu' };
return new Promise((res, rej) => {
jwt.sign(
{ nbf, exp, connection_id, room_id, room_spec },
CLIENT_SECRET,
{ algorithm: 'HS256' },
(err, token) => (err ? rej(err) : res(token)),
);
});
}
Elixir
# {:jose, "~> 1.10"} を依存に追加しているものとする
client_secret = "sample_client_secret"
jwk = %{"kty" => "oct", "k" => :jose_base64url.encode(client_secret)}
jws = %{"alg" => "HS256"}
jwt = %{
"nbf" => DateTime.utc_now() |> DateTime.to_unix(),
"exp" => (DateTime.utc_now() |> DateTime.to_unix()) + 30,
"room_id" => "room1",
"connection_id" => "conn1",
"room_spec" => %{ "type" => "p2p" }
"tags" => [%{"name" => "user_id", "value" => 1, "use_notification" => true}]
}
{_alg, token} = JOSE.JWT.sign(jwk, jws, jwt) |> JOSE.JWS.compact()
Java
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;
import javax.crypto.SecretKey;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
class AccessToken {
public String getAccessToken(
String connectionId,
String clientSecret,
String roomId,
String type,
Integer maxConnections,
Integer bitrateReservationMbps)
{
JwtBuilder builder = Jwts.builder();
byte[] secretByteArray = clientSecret.getBytes(StandardCharsets.US_ASCII);
SecretKey key = Keys.hmacShaKeyFor(secretByteArray);
Calendar now = Calendar.getInstance();
Date nbf = now.getTime();
now.add(Calendar.MINUTE, 30);
Date exp = now.getTime();
Map<String, Object> mediaControl = new HashMap<String, Object>() {
{
put("bitrate_reservation_mbps", bitrateReservationMbps);
}
};
Map<String, Object> spec = new HashMap<String, Object>() {
{
put("type", type);
put("max_connections", maxConnections);
put("media_control", mediaControl);
}
};
return builder
.claim("connection_id", connectionId)
.claim("room_id", roomId)
.claim("room_spec", spec)
.setNotBefore(nbf)
.setExpiration(exp)
.signWith(key, SignatureAlgorithm.HS256)
.compact();
}
}
}
※ 本セクションの情報は予告なく変更される場合があります。
RICOH Live Streaming サービスでは形態に応じて、クライアントは 1 種類から 3 種類のサーバと通信します。
各サーバにはシーケンス図に記載した順序で通信します。前段のサーバとの通信確立に失敗すると後段のサーバとの通信は発生しません。
サーバと FQDN の関係は以下の通りです。
サーバ名 | FQDN | 備考 |
---|---|---|
LSConf サーバ | conf.livestreaming.mw.smart-integration.ricoh.com | |
Signaling サーバ | signaling.livestreaming.mw.smart-integration.ricoh.com | 本番環境の場合。Dev 環境は異なる |
SFU サーバ | *.livestreaming.mw.smart-integration.ricoh.com | トランスポートが TLS の場合のみ。*.livestreaming.mw.smart-integration.ricoh.com を満たすいずれかの FQDN がわりあたる |
TURN サーバ | *.livestreaming.mw.smart-integration.ricoh.com | *.livestreaming.mw.smart-integration.ricoh.com を満たすいずれかの FQDN がわりあたる |
この情報は役に立ちましたか?