{!See https://docs.google.com/document/d/1takg_GmIBBKKTj-GHZCwzxohpQz7Bhekivkk72kYMtE/edit for reference implementation of OneTrust, dataLayer and GTM} {!OneTrust Cookies Consent} {!OneTrust Cookies Consent end} {!dataLayer initialization push} {!dataLayer initialization push end} {!Google Tag Manager} {!Google Tag Manager end} ビデオストリーミング | WebRTC | 2.1.2-preview
docs.unity3d.com
"{0}" の検索結果

    目次を表示する/隠す

    ビデオストリーミング

    WebRTC はピア間での映像のストリーミングを可能にします。 Unity でレンダリングされた映像を同時に複数のブラウザに配信することが可能です。

    コーデック

    ビデオストリーミングで利用するエンコーダーには、ハードウェアでエンコードするものと、ソフトウェアでエンコードするものがあります。利用するコーデックは、ハードウェアエンコーダーの場合には H.264 を利用し、ソフトウェアエンコーダーの場合は、VP8 コーデックを利用します。

    WebRTC.Initialize メソッドの引数に EncoderType を指定することで、 ソフトウェアエンコーダーとハードウェアエンコーダーのいずれかを選択することができます。

    // ソフトウェアエンコーダーを使用
    WebRTC.Initialize(EncoderType.Software);
    
    Note

    このオプションはハードウェアを利用する/利用しないを選択するオプションです。 コーデックを明示的に指定する方法は、現在提供していません。

    WebRTC をサポートしている主要なブラウザでは H.264 及び VP8 が利用できるため、多くのブラウザで Unity から配信されるビデオストリーミングを受信することができます。

    ビデオトラック

    ビデオストリーミングを実装するには、ビデオトラック VideoStreamTrack のインスタンスを生成します。

    // Camera からトラックを生成
    var camera = GetComponnent<Camera>();
    var track = camera.CaptureStreamTrack(1280, 720);
    

    RenderTexture を直接指定する方法もあります。

    // 有効な RendertextureFormat を取得
    var gfxType = SystemInfo.graphicsDeviceType;
    var format = WebRTC.GetSupportedRenderTextureFormat(gfxType);
    
    // RenderTexture からトラックを生成
    var rt = new RenderTexture(width, height, 0, format);
    var track = new VideoStreamTrack("video", renderTexture);
    

    トラックの追加

    生成したビデオトラックを RTCPeerConnection のインスタンスに追加します。AddTrack メソッドを呼び出すことでトラックを追加できます。その後 SDP を生成するために RTCPeerConnection の CreateOffer もしくは CreateAnswer を呼び出します。

    // トラックを追加
    peerConnection.AddTrack(track);
    
    // SDP を生成
    RTCAnswerOptions options = default;
    var op = pc.CreateAnswer(ref options);
    yield return op;
    

    マルチトラック

    ビデオトラックは複数同時に利用することが可能です。 RTCPeerConnection の AddTrack メソッドを複数回呼び出してトラックを追加します。

    // 複数のトラックを追加
    foreach(var track in listTrack)
    {
        peerConnection.AddTrack(track);
    }
    

    ハードウェアエンコーダーを選択している場合、グラフィックデバイスの制約によって、同時に利用可能なトラック数が制限される場合があります。一般的に NVIDIA Geforce で同時に利用可能なビデオトラック数は 2本 までです。詳しくは NVDIA Codec SDK のドキュメント を参照してください。

    ブラウザ側でトラックを同時に受信する方法については、MDN ドキュメント RTCPeerConnection.addTrack の Streamless tracks の項目を参照してください。

    帯域制御

    ビデオトラックの帯域を制御するには、 RTCRtpSender の SetParameter メソッドを利用します。RTCRtpSender は RTCPeerConnection から取得することができます。

    var senders = peerConnection.GetSenders();
    

    あるいは AddTrack の戻り値として取得できます。

    var sender = peerConnection.AddTrack(track);
    

    RTCRtpSender のインスタンスを取得後、 GetParameter メソッドを呼び出すと、現在の送信に関する設定を取得できます。 この設定情報を書き換えて SetParameter を呼び出すと、値を反映させることができます。

    var parameters = sender.GetParameters();
    foreach (var encoding in parameters.Encodings)
    {
        encoding.maxBitrate = bitrate;
    }
    sender.SetParameters(parameters);
    
    Note

    設定に含まれる値の中で、 maxFramerate は現在未対応です。 scaleResolutionDownBy は、ソフトウェアエンコーダでのみ動作します。

    現在使用している帯域はブラウザ上で確認できます。Google Chrome では chrome://webrtc-internals にアクセスすると、現在動作している WebRTC の各種統計情報が表示されます。その中の RTCInboundRTPVideoStream の項目にある、単位時間当たりの受信バイト数のグラフ([bytesReceived_in_bits/s])をご覧ください。

    Chrome WebRTC Stats

    概要
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)