13

ユーザーの約 10% に影響を与えるクラッシュが発生しましたが、それを再現できず、いつ発生するのか正確にはわかりません。

Crashlytics は、クラッシュしているユーザーの約半数がアプリにフォーカスしていない、つまりバックグラウンド オーディオや AirPlay を使用していると報告しています。アプリは HLS ビデオ ストリームを再生し、バックグラウンドで音声のみのバージョンに切り替えます。

何が問題なのか、またはシングルトン Player クラスから複数の AVPlayer インスタンスが存在するのはなぜですか?

ありがとう!

Exception Type:
NSInvalidArgumentException
Reason:
An AVPlayerItem cannot be associated with more than one instance of AVPlayer
Fatal Exception
Latest Crash: 4/06/2013 at 8:48:46 UTC+0200
0   CoreFoundation  __exceptionPreprocess + 162
1   libobjc.A.dylib objc_exception_throw + 30
2   AVFoundation    -[AVPlayerItem _attachToPlayer:] + 188
3   AVFoundation    -[AVPlayer _attachItem:andPerformOperation:withObject:] + 336
4   AVFoundation    -[AVPlayer _insertItem:afterItem:] + 26
5   AVFoundation    -[AVQueuePlayer insertItem:afterItem:] + 136
6   MediaPlayer __block_global_4 + 520
7
...
libdispatch.dylib   _dispatch_call_block_and_release + 10
14
4

5 に答える 5

5

新しい URL を設定する前に再生を明示的に停止することで解決するようです。

[moviePlayer stop];
moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;
[moviePlayer setContentURL:[NSURL URLWithString:[videos objectForKey:quality]]];
于 2013-11-30T10:19:10.083 に答える
1

SourceType の後に ContentURL を設定してみてください

moviePlayerController_ = [[MPMoviePlayerViewController alloc] init];
moviePlayerController_.movieSourceType = MPMovieSourceTypeStreaming;
[moviePlayerController_.moviePlayer setContentURL:url];
于 2015-05-25T15:39:51.883 に答える
1

この問題の原因が見つかりました... MovieViewController が作成され、現在バッファリング中 (状態 != MPMovieLoadStatePlayable または MPMovieLoadStatePlaythroughOK) の場合、'play' メソッドを呼び出すと、この例外でアプリがクラッシュします。

于 2013-05-22T09:29:12.773 に答える
0

考慮すべき点がいくつかあります。

  1. プレーヤー アイテムとプレーヤーの間のプロキシは、AVPlayer のインスタンスによるプレーヤー アイテムへのアクセスを制御する手段を提供します。

  2. 関連付けられた参照により、カテゴリを介して特定のクラスに追加されたプロパティを格納できます。そのため、プレーヤー アイテムが AVPlayer に割り当てられるたびに設定される単一のプロパティで構成されるプレーヤー アイテム クラスのカテゴリを作成できます (たとえば、説明文字列です)。プレーヤー アイテムが別のプレーヤーに割り当てられていないことを確認するには、AVPlayer に保存されている説明と、問題のプレーヤーから返された説明を比較します。

于 2016-10-30T00:25:12.560 に答える
0

動画の URL のタイプがわからない場合は、取得するソース タイプを [不明] に設定します。これはすべてのケースで機能します。

moviePlayerController = [[MPMoviePlayerViewController alloc] init];
moviePlayerController.movieSourceType = MPMovieSourceTypeUnknown;
[moviePlayerController.moviePlayer setContentURL:url];
于 2016-02-18T05:04:11.960 に答える