2

現在、AVPlayer を使用してカスタム ビデオ プレーヤーを作成しています。ビデオは正常に再生され、99% のケースで機能します。しかし、シークすると、時々エラーが発生します。AVPlayerItem のステータスが AVPlayerItemStatusFailed に変わり、その「エラー」プロパティが次のように設定されます。

エラー Domain=AVFoundationErrorDomain Code=-11819 "アクションを完了できません" UserInfo=0x541da00 {NSLocalizedRecoverySuggestion=後でもう一度やり直してください。, NSLocalizedDescription=アクションを完了できません}

このエラーは、iOS 4.0.1 で HTTP ライブ ストリームを前方にシークするときに発生します。電話が 3G に接続されている場合、またはストリームのビットレートが高い場合に、より頻繁に発生します。再現するには、iOS 4.0.1 で AVPlayer を使用して HTTP ライブ ストリームを再生し、ロードされたバッファを越えて前方にシークします。エラーは約 50% の確率で発生します。

AVError.h で、AVFoundation エラー コード -11819 がAVErrorMediaServicesWereReset ("メディア サービスが利用できなくなったため、操作を完了できませんでした")に対応することがわかりました。

このエラーの原因と修正方法を知っている人はいますか? MPMoviePlayerViewController (AVPlayer を使用) にはバグが見られないため、修正が可能であることはわかっています。残念ながら、外部の制約により、私のコードでは MPMoviePlayer を使用できません。

ありがとう!

4

1 に答える 1

0

iOS 4.0.1 の HTTP ライブ ストリームでフォワード シークする場合、AVPlayer は非スレッドセーフであることがわかります。一部のコードで setNeedsDisplay を呼び出すか、システム UI コードを呼び出して、描画中にプレーヤーを「中断」しました。解決策は、ユーザーが位置を探してからプレーヤーがその位置から再生を開始するまでの間、ビューを更新しないことでした。幸いなことに、これは 4.3+ で修正されたようです。

于 2011-07-19T22:11:10.553 に答える