2017-08-03 7 views
0

TableViewCellに動画を表示するのにAVPlayerを使用しています。それはTableViewCellでプレーしていますが、問題は私がそれを止めることができないということです。 私はcellforRowAVPlayerのテーブルビューセルでの再生を停止する

 avPlayer = AVPlayer(url: videoURL! as URL) 
     playerLayer = AVPlayerLayer(player: avPlayer) 
     playerLayer.frame = CGRect(x: cell.videoview.frame.origin.x, y: cell.videoview.frame.origin.x, width:cell.videoview.frame.size.width, height: cell.videoview.frame.size.height) 
     cell.videoview.layer.addSublayer(playerLayer) 
     avPlayer?.play() 

avPlayerplayerLayer私はビデオ

を停止するには、このコードを使用してい viewController

このような
var avPlayer : AVPlayer? 
var playerLayer = AVPlayerLayer() 

で定義されているビデオを再生するには、このコードを使用しました

self.avPlayer?.pause() 
    self.playerLayer.removeFromSuperlayer() 
    self.avPlayer?.rate = 0.0 
    self.avPlayer?.replaceCurrentItem(with: nil) 
    self.avPlayer = nil 

私の質問はAVPlayerのビデオを停止する方法です。AVPlayerLayer? 解決策を提案してください。これに代わるものがある場合は、それも提案してください。

+0

checkVideoPlayerがHomeViewControllerに存在しないことを確認します。ストーリーボードをチェックインして、接続不良を取り除いてください。 – KKRocks

+0

これは私がこの行でクラッシュすることをチェックするブレークポイントを作成していますself.avPlayer = nil –

+0

このメソッドは 'stopVideoPlayer'を実装しています –

答えて

1

セルの再利用可能な動作のために、didEndDisplayingCellデリゲートメソッドで停止する必要があるように、セルの子ビューインスタンスを解放します。

override func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    if let cell = cell as? MyCustomCell { 
     if let play = player { 
      print("stopped") 
      play.pause() 
      player = nil 
      print("player deallocated") 
     } else { 
      print("player was already deallocated") 
     } 
    } 
} 

OR

あなたは、セルのインスタンスを取得し、プレーヤーのインスタンスを検索し、それを止めることができます。

for view in cell.subviews { 
     //after comparison stop the player here 
} 
+0

メソッド文書へのリンクが良いと思います;) –

+0

@Salman_Ghumsani再生中のビデオを停止する方法を知っていますか?再生中にavplayerを停止する方法を知っていますか? –

+0

お礼ありがとうございます。 –

0

AVPlayerには停止方法がありません。シーク時間を0に設定してプレイヤーを一時停止することができます。

videoPlayer.seek(to: CMTimeMake(0, 1)) 
videoPlayer.pause() 

さらに、videoCellが表示可能かどうかを確認する場合は、表示されているセルのインデックスの配列を与える以下のコードを使用することができます。したがって、配列にビデオセルインデックスが含まれているかどうかを簡単に確認できます。

tableView.indexPathsForVisibleRows 
+0

このコードはまだプレイヤーを停止するために動作していません。また、画面上にあってもプレイヤーを止める必要があります。問題は、コードがプレーヤーを停止させるように機能していないことです。 –

+0

このplayerLayerのようなコードスニペットを使用する必要があります。 videoPlayer.pause().PlayerLayerの上にvideoPlayerを追加しました。おそらくうまくいくかもしれない –

関連する問題