{"id":23762408,"url":"https://github.com/fairydevicesrd/thinklet.squid.run","last_synced_at":"2025-07-02T06:04:29.451Z","repository":{"id":248795494,"uuid":"806514005","full_name":"FairyDevicesRD/thinklet.squid.run","owner":"FairyDevicesRD","description":"THINKLETから直接 Youtube Live にストリーミング配信をする","archived":false,"fork":false,"pushed_at":"2024-12-10T01:19:03.000Z","size":154,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-15T13:56:28.856Z","etag":null,"topics":["thinklet"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FairyDevicesRD.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-27T10:45:50.000Z","updated_at":"2025-04-30T12:48:52.000Z","dependencies_parsed_at":"2024-07-17T06:10:49.615Z","dependency_job_id":"2ae9a467-0ceb-4fe8-a4f0-1f30ccb2a4e0","html_url":"https://github.com/FairyDevicesRD/thinklet.squid.run","commit_stats":null,"previous_names":["fairydevicesrd/thinklet.squid.run"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/FairyDevicesRD/thinklet.squid.run","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FairyDevicesRD%2Fthinklet.squid.run","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FairyDevicesRD%2Fthinklet.squid.run/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FairyDevicesRD%2Fthinklet.squid.run/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FairyDevicesRD%2Fthinklet.squid.run/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FairyDevicesRD","download_url":"https://codeload.github.com/FairyDevicesRD/thinklet.squid.run/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FairyDevicesRD%2Fthinklet.squid.run/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263083593,"owners_count":23411163,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["thinklet"],"created_at":"2024-12-31T21:19:11.228Z","updated_at":"2025-07-02T06:04:29.414Z","avatar_url":"https://github.com/FairyDevicesRD.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SquidRun\n\nSquidRunは、THINKLETを用いたRTMP(S)によるライブストリーミング配信を行うためのアプリです。\n\n## 機能\n\n- RTMP(S)によるライブストリーミング配信\n    - Youtube Liveを含む任意のRTMP(S)サーバに配信可能\n\n## 注意点\n\n- 縦広角モデルでは縦長の解像度、横広角モデルでは横長の解像度のみをサポートしています。\n    - 縦広角モデルの場合、起動オプションの`longSide`が縦の解像度、`shortSide`が横の解像度となります。\n\n## 操作\n\nアプリ起動後、以下の操作が可能です。\n\n| ボタン   | 短押し               | 長押し |\n|-------|-------------------|-----|\n| 第1ボタン | 無し                | 無し  |\n| 第2ボタン | ストリーミングの開始/終了     | 無し  |\n| 第3ボタン | オーディオのミュートの切り替え   | 無し  |\n| 電源ボタン | ストリーミングの終了・アプリの終了 | 無し  |\n\n## フィードバック\n\n### エラー時のフィードバック\n\n起動時またはストリーミングの開始時などにエラーを検知した場合、以下のバイブレーションパターンでエラーを通知します。\n\n| タイミング       | パターン | 意味                    |\n|-------------|------|-----------------------|\n| 起動時         | 2回   | 必要な権限が全て付与されていない場合    |\n| 起動時         | 3回   | 必須の起動オプションが設定されていない場合 |\n| ストリーミングの開始時 | 2回   | ストリーミングの開始に失敗した場合     |\n\n### 操作時のフィードバック\n\n操作時には、以下のバイブレーションパターンで操作を通知します。\n\n| タイミング          | パターン |\n|----------------|------|\n| オーディオをミュートした   | 2回   |\n| オーディオをミュート解除した | 1回   |\n\n## 起動オプション\n\n以下のオプションを指定可能です。\nオプションはアプリ起動のためのIntent Extraとして指定します。\n\n| キー                | 値の型     | 必須 | 規定値     | 説明                                                                                             |\n|-------------------|---------|----|---------|------------------------------------------------------------------------------------------------|\n| `streamUrl`       | String  | ○  |         | RTMP(S)サーバのURL                                                                                 |\n| `streamKey`       | String  | ○  |         | ストリームキー                                                                                        |\n| `longSide`        | Int     |    | 720     | ストリームの長辺の解像度                                                                                   |\n| `shortSide`       | Int     |    | 480     | ストリームの短辺の解像度                                                                                   |\n| `orientation`     | String  |    |         | 指定された方向の解像度を強制する。\u003cbr/\u003e`landscape`の場合は横長、`portrait`の場合は縦長となる。\u003cbr/\u003e未指定の場合はデバイスのモデルに応じた方向の解像度になる。 |\n| `videoBitrate`    | Int     |    | 4096    | ビデオのビットレート。単位はkbps。                                                                            |\n| `audioSampleRate` | Int     |    | 48000   | オーディオのサンプリングレート。単位はHz。                                                                         |\n| `audioBitrate`    | Int     |    | 128     | オーディオのビットレート。単位はkbps。                                                                          |\n| `audioChannel`    | String  |    | stereo  | オーディオのチャンネル数。\u003cbr/\u003e`monaural`の場合は1チャンネル、`stereo`の場合は2チャンネルとなる。                                  |\n| `echoCanceler`    | Boolean |    | false   | エコーキャンセラーを有効にするかどうか。                                                                           |\n| `micMode`         | String  |    | android | マイクモードの設定。下記のマイクモードを参照                                                                         |\n| `preview`         | Boolean |    | false   | 画面上にストリーミングのプレビューを表示するかどうか。\u003cbr/\u003eデバッグ時以外はバッテリー節約のためOFFを推奨。                                      |\n\n#### マイクモード\n\n| 値         | 説明                                                                                                                             |\n|-----------|--------------------------------------------------------------------------------------------------------------------------------|\n| android   | Androidの標準実装を使用する。`audioChannel`に応じて1つまたは2つのマイクを使用する。                                                                          |\n| thinklet5 | THINKLETの5つのマイクを使用する。`audioChannel`に応じて複数のマイクの音声を合成する。\u003cbr/\u003e`audioSampleRate`は`16000`, `32000`, `48000`のどれかである必要がある。            |\n| thinklet6 | THINKLETの5つのマイクに加えて参照音用マイクを使用する。`audioChannel`に応じて複数のマイクの音声を合成する。\u003cbr/\u003e`audioSampleRate`は`16000`, `32000`, `48000`のどれかである必要がある。 |\n\n### adbコマンドによる起動\n\n#### コマンド例\n\n```shell\nadb shell am start \\\n    -n ai.fd.thinklet.app.squid.run/.MainActivity \\\n    -a android.intent.action.MAIN \\\n    -e streamUrl \"rtmp://example.com/live\" \\\n    -e streamKey \"stream_key\" \\\n    --ei longSide 720 \\\n    --ei shortSide 480 \\\n    --ei videoBitrate 4096 \\\n    --ei audioSampleRate 44100 \\\n    --ei audioBitrate 128 \\\n    --ez preview true\n```\n\n## ビルド\n\n### セットアップ\n\n#### GitHub Packagesのセットアップ\n[THINKLET App SDK](https://github.com/FairyDevicesRD/thinklet.app.sdk)を使用しているため、配布先であるGitHub Packagesへアクセス可能にするための準備が必要です。\n\n[スタートガイド](https://fairydevicesrd.github.io/thinklet.app.developer/docs/startGuide/buildMultiMic) の `THINKLET App SDK の導入` の項目を行い、新規作成した `github.properties` ファイルに `username` および `token` を設定してください。\n\n#### 署名の設定\n\n`app/build.gradle.kts` ファイルを編集し、`signingConfigs` ブロックに署名情報を設定してください。\n\n### ビルド\n\n以下のコマンドでビルドを行います。\n\n```shell\n./gradlew :app:assembleRelease\n```\n\n## 付録\n\n### テスト用RTMPサーバの用意\n\nこのアプリを使用したストリーミング機能を動作させるためには、RTMPサーバーが必要です。\nYouTube Liveなどの外部サービスを使用することもできますが、ローカル環境でのテストを行いたい場合は、以下の手順でRTMPサーバーを用意することができます。\n\n#### MediaMTX の準備\n\nここでは、[MediaMTX](https://github.com/bluenviron/mediamtx) を使用してRTMPサーバーを構築します。\nリリースページより、サーバーを動かす環境に合った最新のリリースをダウンロードしてください。\nこのドキュメントでは、Apple Silicon版のmacOSをRTMPサーバとして使用する場合を紹介します。\n※MediaMTXを実行しているマシンとTHINKLETは同じネットワークに接続する必要があります。\n\n1. ダウンロードした.tar.gzファイルを解凍します。\n2. 解凍したフォルダをターミナルで開き、`mediamtx` を実行します。\n\nこのRTMPサーバにストリーミングを行う場合、起動時パラメーターは以下のように設定します。\n\n```\nstreamUrl: rtmp://[MediaMTXを実行しているマシンのIPアドレス]:1935\nstreamKey: [任意の文字列]\n```\n\n### ストリームされた映像を確認する\n\nストリーミングされた映像を確認するためには、ffmpegに付属する[ffplay](https://ffmpeg.org/ffplay.html)を使用すると便利です。\n\n#### ffplay の準備\n\n[ffmpegのダウンロードページ](https://ffmpeg.org/download.html)から、自分の環境に合ったバイナリをダウンロードしてください。\n※MediaMTXを実行しているマシンと同じマシンもしくは同じネットワークに接続する必要があります。\n\n1. ffmpegをダウンロード・およびインストール(pathに通し)します。\n2. ターミナルを開き、以下のコマンドを実行します。\n\n```\nffplay rtmp://[MediaMTXを実行しているマシンのIPアドレス]:1935/[streamKey]\n```\n\n`[streamKey]` は、MediaMTXの起動時に指定した `streamKey` と同じものを指定してください。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffairydevicesrd%2Fthinklet.squid.run","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffairydevicesrd%2Fthinklet.squid.run","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffairydevicesrd%2Fthinklet.squid.run/lists"}