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::Create
で RtpCapturerVideoSource
を生成します。
その後、 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::CreateVideoStream
で Stream
を生成し、この Stream
を LocalRoomMember
が Publish
できます。
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 の登録商標です。