「Repete Plus」をアップデートしました。(version 5.3)

「Repete Plus」をアップデートしました。(version 5.3)

Repete Plusは、語学学習を支援するオーディオプレイヤーです。
語学教材のフレーズごとに自動的に間隔をあけて再生できます。

App Storeはこちら

使い方を紹介しているサポートサイトはこちら
Repete Plus – nackpan Blog

変更点

* 再生がまれに意図せず止まってしまう不具合を修正しました。


Repete Plusのサポートページのコメントで不具合報告をいただきました。
再生が意図せず止まってしまったとのことでした。

Repete(語学学習支援プレイヤー)の開発当初に、この問題が発生して、referenceを見ながらあれこれ修正して、どうにかこうにか、再生不能状態の発生を抑えることができました。
iOS 12になってから、自分が使用している際にも、まれに発生していたものの、直すの大変じゃないかということで、対処を遅らせていました。

コメントでのリプライで、AVAssetの末尾到達通知がうまくいっていないかもと記しました。
あらためてソースコードを確かめるとそこには問題ありませんでした。

アイテムが切り替わり、再生可能状態になり、再生を開始する処理で問題がありました。

Responding to Playback State Changes | Apple Developer Documentation
こちらの記事にならって、対象のAVPlayerItemの状態の変化を監視する処理を行っています。

AVPlayerItemのstatusに変化があると、observeValue(forKeyPath:of:change:context:) メソッドが呼び出されます。statusがreadyToPlayになったなら再生処理を行っています。

readyToPlayになって再生処理を行ったのに再生されないという状態がまれに発生していました。
AVPlayerItemのstatusがreadyToPlayになっており、AVPlayerのstatusもreadyToPlayになっておりAVPlayerのrateも1.0になっており再生中であることを示している、ということで問題なく動くはずなのに実際には再生されないということで、なかなか原因が特定できませんでした。

再生処理部分のログをとり、再検証しました。
statusがreadytoplayになってから続けざまに(0.03秒後ぐらいに)2回呼び出されることがありました。
statusが変化するたびに一度呼び出されると考えていたので、この挙動は予想外でした。
再生処理が2回呼び出されることになり、これが問題発生に繋がることがあるようです。
readytoplayになったあとの再生処理が一度だけになるように調整しました。

長時間、再生を続ける試験を行いました。
再生が意図せず止まってしまう不具合は発生しなくなりました。

語学学習の助けとなる「Repete Plus」よろしくおねがいします。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください