音声・映像入力ソースと LocalStream の作成方法
Publish をするためには、音声・映像入力ソースまたはデータソースと紐付いた LocalStream が必要です。
このセクションでは SkyWay SDK for Linux®︎ (以下、SDK for Linux ) でソースを取得し LocalStream を作成する方法について説明します。
音声入力ソース
音声入力ソース(音声入力デバイス)を取得しLocalStreamを作成します。
音声入力の LocalStream を作る操作は以下の流れで行います。
- 利用できるデバイスのリストを取得する
- 利用するデバイスを指定する
- デバイスから LocalStream を作成する
デバイス一覧の取得には skyway::media::DeviceManager::GetRecordDevices()
を、デバイスの指定には skyway::media::DeviceManager::SetRecordingDevice()
を利用します。
LocalStreamは skyway::media::StreamFactory::CreateAudioStream()
で作成します。
取得したデバイスのリストは[0]の要素にデフォルトのデバイスが格納され、[1]以降に各デバイスが列挙されています。
以下は音声入力デバイスを取得して LocalStream を作成する例です。デフォルトのデバイスである audio_devices[0]
を指定しています。
// 音声入力デバイスを取得します。 auto audio_devices = skyway::media::DeviceManager::GetRecordDevices(); if (audio_devices.size() > 0) { // index で入力デバイスを指定します。 auto device = audio_devices[0]; skyway::media::DeviceManager::SetRecordingDevice(device); // LocalStream を作成します。 auto audio_stream = skyway::media::StreamFactory::CreateAudioStream(); }
注意 SDK for Linux では複数の音声入力ソースを同時に利用することはできません。
映像入力ソース
映像ソース(ビデオデバイス)を取得しLocalStreamを作成します。
skyway::media::DeviceManager::GetVideoDevices()
で利用できるビデオデバイスの一覧を取得できます。
LocalStreamはskyway::media::StreamFactory::CreateVideoStream(device)
で作成します。
以下はデバイスを指定してLocalStreamを作成する例です。
この例では利用できるデバイスが存在する場合、先頭のデバイスを利用しています。
// 利用できるビデオデバイスの一覧を取得します。 auto video_devices = skyway::media::DeviceManager::GetVideoDevices(); if (video_devices.size() > 0) { // index で入力デバイスを指定します。 auto device = video_devices[0]; // LocalStream を作成します。 auto video_stream = skyway::media::StreamFactory::CreateVideoStream(device); }
また、以下は利用可能な全デバイスの index と名前を確認する例です。
auto video_devices = skyway::media::DeviceManager::GetVideoDevices(); if (video_devices.size() > 0) { std::cout << "- VideoDevices" << std::endl; for (auto device : video_devices) { std::cout << " - Index: " << device.index << " Name: " << device.name << std::endl; } }
注意 /dev/video0 ~ /dev/video63 以外のデバイスは利用できません。
データソース
データソースの LocalStream の作成は以下の手順で行います。
- LocalStream を作成する
- LocalStream にデータを書き込む
データソースの LocalStream を作成するために skyway::media::StreamFactory::CreateDataStream()
を利用します。
データの送信には作成した LocalStream の Write()
メソッドを利用します。
以下は LocalStream を作成して一定間隔で文字列を送信する例です。
// LocalStream を作成します。 auto data_stream = skyway::media::StreamFactory::CreateDataStream(); // 一定間隔でメッセージを送信するthreadを作成します。 auto data_thread = std::make_unique<std::thread>([this] { auto count = 0; while (true) { auto data = "send msg: " + std::to_string(count); data_stream->Write(data); count++; std::this_thread::sleep_for(std::chrono::seconds(1)); } });
商標
Linux®︎は、米国およびその他の国における Linus Torvalds の登録商標です。