概要
つい最近NatCorderというアセットが無料化!?というニュースが一部界隈を騒がせました
(ただし最新版はサブスクリプション契約でしか使えないよ!)
NatCorderは画面収録のアセットでネイティブな実装がゴリゴリでパフォーマンスがサクサクのスーパークールなアセットです
これは早速使ってみるしかない!!ということで使った結果、見事に罠にハマったので
これから増えるであろう利用者のために備忘録として残しておきます
実装方法などはドキュメントが充実しているので解説しません
検証環境
- iPhone6s
- iOS 14
結論
使ってる端末がエンコードできるRecorderを利用しよう!!!
経緯
🤔NatCorderで動画(音有り)を撮るためのRecorderがある
- MP4Recorder
- HEVCRecorder
MP4とHEVCってなんだ?と思って調べてみたところ
なんかよくわからんけどHEVCがオススメらしい Yahoo知恵袋に書いてたから間違いない
MP4はよく聞いた事あるけどHEVCってカッコいい響きだし玄人向けなんだろう
😄HEVCRecorderを使って画面収録をした
エディタでUnityRecorderを使ったことがある諸兄はわかると思うが画面収録をしながら実行すると結構重い
それが当たり前だと思ってたら、NatCorderの画面収録はエディタでの動作に何一つ影響を及ぼさない!!!
なんてすごいんだ!!録画もできてる!!!
💀iOSビルドをして実機での動作を見てみた
実行中も快適、流石に古い端末だから少しパフォーマンスに影響は出ているが問題のない範囲だった
脳内では勝利のBGMが流れていた
部屋には勝利の美酒も用意していた
保存ボタンを押そうとしたそのとき、端末は物言わぬホーム画面を映し出した
一体なにが起こったんだ…?
💀IMediaRecorder.FinishWritingで失敗している
エラーが起きた時に原因を調べるのはエンジニアの習性の一つなのでエンジニアの端くれとして
伝家の宝刀Debug.Log
を使用してエラーが起きている箇所の原因を探ってみた
すると、画面収録したデータをエンコードしている部分でクラッシュしていることがわかった
ふむふむ、なるほどなるほど、つまり画面収録したデータをエンコードしている部分でクラッシュしているんだな
……?
💀なぜ?
パーミッションの確認に必要なものは全て設定済みだしOSバージョンも新しめだ
ドキュメントを見ても動作に必要な環境は満たしているように見える
😇調べまくり人に聞きまくりの結果、原因がわかった
iPhone6sってHEVCのエンコードに対応してたっけ?
ふむ iPhone HEVC エンコード
検索……
それっぽい記事があるぞ
!!!!!!!
😄ということでiPhoneのデバイス世代で利用するRecorderを変えた
実機での動作検証をして無事に動画の保存に成功!!
終わりに
実機のログをよく見てみるとこんなエラーが出ていたけど何語かわからなかったのでスルーしていた
NatCorder Error: HEVCRecorder failed to finish writing with error Error Domain=AVFoundationErrorDomain Code=-11834
AVFoundationErrorDomain Code=-11834
で検索をかけるとこんなサイトが出てきた
EncoderNotFound
エラーコードをちゃんと読んで然るべき検索をすれば答えには辿りつけていたはずだった
エラーコードはしっかり読もう!!!!