私はビデオを再生できるUITableViewをセットアップしようとしています。以前のSO質問の多くは、MPMoviePlayer(Playing Video into UITableView、Playing video in UItableView in SWIFT、Playing Video From UITableView)ですが、現在はiOS 9で廃止されています。AVFoundation(私が使っているもの)を使った数少ない人の1人はPlay video on UITableViewCell when it is completely visibleです。私のコードのほとんどを入手しています。ここに私のコードはcellForRowAtIndexPathの内側に、次のとおりです。ビデオをuitableviewセルで再生する
VideoCell *videoCell = (VideoCell *)[self.tableView dequeueReusableCellWithIdentifier:@"VideoCell"];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
NSURL *url = [[NSURL alloc] initWithString:urlString];
dispatch_async(queue, ^{
videoCell.item = [AVPlayerItem playerItemWithURL:url];
dispatch_sync(dispatch_get_main_queue(), ^{
videoCell.player = [[AVPlayer alloc] initWithPlayerItem:videoCell.item];
videoCell.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:videoCell.player];
playerLayer.frame = CGRectMake(0, 0, videoCell.contentView.frame.size.width, videoCell.contentView.frame.size.height);
[videoCell.contentView.layer addSublayer:playerLayer];
playerLayer.videoGravity = AVLayerVideoGravityResize;
[videoCell.player play];
});
});
return videoCell;
私が理解から、私はそれらを再生する前に、非同期の動画をダウンロードする必要があります。私は前に非同期に画像をダウンロードしており、その "ダウンロード"部分には常にNSURL - > NSData - > UIImageの変換が含まれます。そして、あなたがUIImageを持っているとき、あなたはセルにそれを表示する準備ができているので、メインのキューをupにしてdispatch_asyncを呼び出し、cell.imageView.image = yourImageを実行します。メインキューにあります。
ここではNSURLを持っていますが、ここでどのステップをメインキューに置いて、メインスレッドから外すべきかはわかりません。私は上記の質問に示唆されたことを試しましたが、これまでのところうまくいきません。テーブルセルがロードされ、ビデオは決して再生されません。私はちょうど最初のフレームを見る。ときには、最初の1秒間は再生されますが、それ以降はバッファーされ、再生されません。私はテーブルビューで作業していますが、現在はオブジェクトが1つしかないので、再生するビデオは1つだけです。まだ再生されていません。
私は間違って何をしていますか、誰かが私がどのスレッドをメインスレッドに置く必要があるのかを正確に説明するのを助けることができますか?私がトップで言及したスレッドのレスポンダには、「そこにチュートリアルがたくさんあります」と言われましたが、Googleをスキャンすると表示されませんでした。 「非同期」と「iOS」の用語は、ほとんどの場合、ビデオではなく画像ダウンロードに関する検索結果を取得します。しかし、チュートリアルがあればそれを見るのが良いでしょう。
おかげ
ますので、cellForRowAtIndexPathでこれを呼び出しますか? – joey
いいえ私はカスタムセルクラスを作成しました。私は上記の関数をデータセッターメソッドの中で呼び出しました –
サンプルプロジェクトをゲスできますか?ありがとう –