はじめに
とあるきっかけから動画撮影・個別配信アプリを作りたいなということでいろいろなサイトで調べていました。
が・・・配信アプリ作成がうまく行かない。
例)
サーバー構築はubuntu上にlibnginx-mod-rtmpを使えば簡単にできますし、サーバーがあれば配信自体はOBS Studioでできます。
配信アプリだけエラーが出て、なぜかうまく行かない(理由がわからない)を解決していきましょう!
準備
上記の例にある記事を参考に、サーバー側はローカルネットワークでライブ配信する(2020年11月11日)、アプリ側を【完全無料】Flutterを使って簡易ライブ配信アプリを構築する(2021.03.14に公開)で実装してみてください。
すべての作業を完了させ、アプリを実行させるとエラーが出てしまうと思います。そこからスタートです。
以下のパッケージをpub getします。それぞれのpackage page(例)で必要な設定を行うことを忘れないでください。
dependencies: flutter: sdk: flutter # camera camera: ^0.9.4+19 # カメラ camera_with_rtmp: ^0.3.2 # 配信(RTMP)用 path_provider: ^2.0.9 # パスを通す # video video_player: ^2.3.0 # 動画確認用 wakelock: ^0.6.1+2 # 動画撮影中に画面をOFFにしない
camera_with_rtmpにエラーが出る場合はhttps://githubhot.com/repo/pinkfish/flutter_rtmppublisher/issues/36をご覧ください。
コードの作成
ベースとなるコードの取得
flutter_rtmppublisher/example/main.dartのコードをコピペし、lib/main.dartの中身をすべて書き換えます。
Null Safety対応を行う
ベースコードは下記の通り記載されていて、内部の変数がNull Safetyに対応していません。
CameraController controller; String imagePath; String videoPath; String url;
そのため、下記のように変更を行います。
CameraController? controller; String? imagePath; String? videoPath; String? url;
その他のコードにも対応していない部分が複数存在するので、対応します。
Null Safety対応のパッケージを取得する
まずは、lib/rtmp_publisherディレクトリを作成します。
続いて、そのディレクトリにflutter_rtmppublisher内のファイルをコピーします。
※こんな感じでディレクトリとファイルが存在しているようにします。
lib/main.dartの下記importを、
import 'package:camera_with_rtmp/camera.dart';
下記のように変更します。自分のパッケージ名については、適宜変更ください。
import 'package:自分のパッケージ名/rtmp_publisher/camera.dart';
上手くできたと思います。
配信の確認方法
アプリ上での再生はfijkplayer、PC上での再生はVLCなどをお使いください
再生はvideo_player(や派生したパッケージ)で可能とされていますが、試してみてうまくいったのはfijkplayerパッケージのみでした。
まとめ
今回は動画配信アプリを作ってみました。それを通じて、パッケージの利用やパッケージの改善方法を知ることができたと思います。
うまく行かなかった原因は、Flutterのコーディングルールに2021年後半に大きな内容変更があったようで、後方互換性がなくなっていました。(ツライ…)
疑問点などがあればコメントをお願いいたします。それでは!