taktod
electronで作ってみる配信ツールのtakcastで利用する rtmpとして配信するプラグイン
takcastのプロジェクトで
$ npm install taktod/takcast.output.rtmp --save
$ npm run setup
を実行するとプラグインがインストールされて 必要な情報がセットアップされます。
electronを使って作ってみた、映像と音声を合成して配信するツール 元ネタは、勤めている会社にopenGLで映像合成をしたらどのようになるか提示するのに作ってみたプログラムです。 せっかくなので公開してみようと思いました。
node側処理用のpluginエントリー このプログラムでは利用可能なencoderを通知したり、h264やaacに変換を実施したりします。
render側処理用のpluginエントリー media pluginが作成したデータをyuvイメージのbinaryにしたり、pcmデータに変換して node側に投げます。
このpluginの動作を設定するfooterに表示される設定項目のGUI設定
このpluginの詳細動作を設定するダイアログを処理します。
h264やaacのencoderを追加する場合のメモ src/node/index.tsにプログラムを追加します。
-
まずnode-gypあたりで適当にencodeできるプログラムを作ります。
-
次に46行目あたりcodecListに追加したいcodec名をいれます。 大文字からはじめて被らないようにしておけばいいと思います。 例えばHogeというコーデックをつくるとします。
-
2で設定した名前と同じprivateのメソッドを作成します。 private Hoge(target) { }
-
targetがnullの場合 コーデック情報を登録し、設定画面にでてくるようにします。 jsonの形で設定をいれます。 aacEncoderの場合はaudioCodecsに h264Encoderの場合はvideoCodecsに 対象のjsonをいれればOKです。
対象のjsonの構成 codec: コーデック名です。2で設定した名前と同じものをいれてください。 name: 設定ダイアログのselectに表示されるエンコーダーの名前となります。 channelNum: 1 動作チャンネル数です。aacEncoderの場合必須 sampleRate: 44100 動作サンプルレートです。aacEncoderの場合必須 semiPlanar: false h264Encoderで利用するyuvイメージがnv12の場合にはtrueにしておいてください。yuv420 planarの場合はfalseとなります。 width: 320 横幅、h264Encoderの場合必須 height: 240 縦幅、h264Encoderの場合必須 その他なにか必要があれば追記できます。 内容がobjectの場合は設定項目となります。 内容がobjectでない場合は、その値がそのまま設定データとして送られてきます。
設定項目の場合 {type: } 項目のタイプです。 text テキスト入力 type: "text", value: "デフォルト値" textarea テキストエリア type: "textarea" value: "デフォルト値" select プルダウンによるセレクト動作 type: "select" value: "デフォルト値" values:["配列で値をいれておく"] valuesの要素のうちデフォルト値と一致するのが初めから選択された状態になります。 checkbox チェックボックス type: "checkbox" value: trueだったら初めからチェックされてる
追加、変更したい場合は src/render/ui/setting.tsxを書き換える感じで
修正すべきところ x264やopenh264のparams設定等の部分まだちゃんと作ってないので、パラメーターの調整できない状態になってるので、直しておきたい。
あとはこのparamsやspatualLayerSettingの部分をちゃんと反映させる件だな。