RTP映像入力を利用する

SkyWay Linux®︎ SDK (以下、Linux SDK ) では、v3.0.0 から外部から受信した RTP を入力にして映像の送信が行えます。

注意 RTP映像入力機能はβ版です。

本ドキュメントはクイックスタートを実施済みの方を対象としております。

利用方法

RtpCapturerVideoSource を作成し、 skyway::media::StreamFactory::CreateVideoStream に渡すことで RTP 映像を入力とした Stream を生成し、 Publish できます。

下記のコードは外部から H.264でエンコードされた RTP 映像を入力とする例です。

以下のヘッダーを追加してください。

#include <skyway/media/rtp/rtp_capturer_video_source.hpp> #include <skyway/media/codec/h264.hpp>

skyway::Context::Setup を行う時に設定する skyway::Context::SkyWayOptions を以下のように設定してください。

skyway::Context::SkyWayOptions options; // RTP映像入力を有効にします。 options.rtp.input.video.enabled = true; // RTP映像入力のコーデックを設定します。 options.rtp.input.video.codec = std::make_shared<skyway::media::codec::H264>();

注意 RTP映像入力モードを設定する場合は codec を必ず設定してください。

利用できるコーデックは1つだけです。

RTP映像入力モードを設定した場合、OpenCVなど他の映像入力ソースは利用できません。

H.264コーデックの場合、デフォルトの profile-level-id は 多くの環境で受信可能な 42e01f (Constrained Baseline, Level 3.1) を利用します。入力側のエンコーダの設定も 42e01f に合わせる必要がありますのでご注意ください。

他の profile-level-id をコンストラクタ引数に設定することで指定できますが、受信側の環境によっては描画できない可能性があります。

skyway::Context::Setup が完了後、 RtpCapturerVideoSourceOptions で外部 RTP の入力情報を設定し、 skyway::media::rtp::RtpCapturerVideoSource::CreateRtpCapturerVideoSource を生成します。

その後、 StartReceiving をコールして RTP 映像の受信を開始します。

skyway::media::rtp::interface::RtpCapturerVideoSourceOptions options { // SkyWayが外部RTP映像入力を受け付けるIP .recv_rtp_ipv4 = "127.0.0.1", // SkyWayが外部RTP映像入力を受け付けるPort .recv_rtp_port = 50000 }; auto rtp_source = skyway::media::rtp::RtpCapturerVideoSource::Create(options); // RTP映像の受信を開始します。 auto is_receiving = rtp_source->StartReceiving(); if(!is_receiving) { std::cerr << "受信開始処理失敗: IPとポートが利用可能か確認してください。" << std::endl; return; }

注意 設定するポートが利用可能かどうか事前に確認してください。

skyway::media::StreamFactory::CreateVideoStreamStream を生成し、この StreamLocalRoomMemberPublish できます。

auto stream = skyway::media::StreamFactory::CreateVideoStream(rtp_source);

例として、GStreamer の udpsink を利用した RTP 入力の場合は以下のようなパイプラインで入力できます。

デフォルト設定の H.264の場合、Constrained Baseline, Level 3.1でエンコードします。

$ gst-launch-1.0 videotestsrc is-live=true \ ! video/x-raw,width=640,height=480,framerate=30/1 \ ! x264enc tune=zerolatency bitrate=1500 key-int-max=30 byte-stream=true \ ! video/x-h264,profile=constrained-baseline \ ! rtph264pay config-interval=1 \ ! udpsink host=127.0.0.1 port=50000

StartReceiving 後に StopReceiving をコールすることで、入力を一時停止でき、再度 StartReceiving をコールすることで入力を再開できます。

// RTP映像入力の停止 // RTP映像入力に利用しているポートが解放されます。 rtp_source->StopReceiving(); ... // RTP映像の受信を再開します。 rtp_source->StartReceiving();

商標

Linux®︎は、米国およびその他の国における Linus Torvalds の登録商標です。