---
lang: ja
path: user-guide/linux-sdk/linux-media-source-and-stream
labels: ユーザーガイド/Linux SDK/LocalStreamの作成方法
metaTitle: LocalStreamの作成方法 ｜ Linux SDK ｜ ユーザーガイド ｜ SkyWay（スカイウェイ）
---

# LocalStreamの作成方法

このセクションでは SkyWay Linux®︎ SDK (以下、Linux SDK ) で Publish するために必要な LocalStream を作成する方法について説明します。

## LocalVideoStreamの作成方法

LocalVideoStream は以下のいずれかの方法を用いて作成できます。
- 映像入力デバイスを利用する
    - カメラなどの映像入力デバイスを利用する方法です。
- [OpenCVを利用する](/ja/docs/cookbook/linux-sdk/opencv/)
    - アプリケーション側で生成・加工した画像フレームを映像として入力する方法です。
- [RTP映像入力を利用する](/ja/docs/cookbook/linux-sdk/rtp-video-input/)
    - アプリケーションで受信したRTP映像ストリームをそのまま入力する方法です。

この記事では映像入力デバイスを利用する手順について説明します。

`skyway::media::DeviceManager::GetVideoDevices()` で利用できる映像入力デバイスの一覧を取得できます。

LocalVideoStream は `skyway::media::StreamFactory::CreateVideoStream()` で作成します。

以下はデバイスを指定して LocalVideoStream を作成する例です。

この例では利用できるデバイスが存在する場合、先頭のデバイスを利用しています。

```cpp
// 利用できる映像入力デバイスの一覧を取得します。
auto video_devices = skyway::media::DeviceManager::GetVideoDevices();
if (video_devices.size() > 0) {
    // index で入力デバイスを指定します。
    auto device = video_devices[0];
    // LocalVideoStream を作成します。
    auto video_stream =
        skyway::media::StreamFactory::CreateVideoStream(device);
}
```

また、以下は利用可能な全デバイスの index と名前を確認する例です。

```cpp
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 以外のデバイスは利用できません。

## LocalAudioStreamの作成

LocalAudioStream は以下のいずれかの方法を用いて作成できます。
- 音声入力デバイスを利用する
    - マイクなどの音声入力デバイスを利用する方法です。
- [PCM音声入力](/ja/docs/cookbook/linux-sdk/pcm-audio-input/)を利用する
    - アプリケーション側で生成・取得した音声データを直接入力する方法です。

この記事では音声入力デバイスを利用する手順について説明します。

`skyway::media::DeviceManager::GetRecordDevices()` で利用できる映像入力デバイスの一覧を取得できます。

取得したデバイスのリストは[0]の要素にデフォルトのデバイスが格納され、[1]以降に各デバイスが列挙されています。

デバイスの指定は `skyway::media::DeviceManager::SetRecordingDevice()` を利用します。

LocalAudioStream は `skyway::media::StreamFactory::CreateAudioStream()` で作成します。

以下はデバイスを指定して LocalAudioStream を作成する例です。

この例では利用できるデバイスが存在する場合、先頭のデバイスを利用しています。

```cpp
// 音声入力デバイスを取得します。
auto audio_devices = skyway::media::DeviceManager::GetRecordDevices();
if (audio_devices.size() > 0) {
    // index で音声入力デバイスを指定します。
    auto device = audio_devices[0];
    skyway::media::DeviceManager::SetRecordingDevice(device);
    // LocalAudioStream を作成します。
    auto audio_stream = skyway::media::StreamFactory::CreateAudioStream();
}
```

> **注意**
> Linux SDK では音声入力デバイスを用いた複数の AudioLocalStream を同時に利用することはできません。
>
> 複数の音声入力を行いたい場合は、[PCM音声入力](/ja/docs/cookbook/linux-sdk/pcm-audio-input/)を利用してください。
>
> ただし、この機能を利用する場合、音声入力デバイスの利用ができなくなります。

## LocalDataStreamの作成

LocalDataStream は `skyway::media::StreamFactory::CreateDataStream()` を利用して作成できます。

データの送信には作成した LocalDataStream の `Write()` メソッドを利用します。

以下は LocalDataStream を作成して一定間隔で文字列を送信する例です。

```cpp:example_room.cpp
// LocalDataStream を作成します。
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 の登録商標です。
