2016-12-09 25 views
1

This question同じ問題がありますが、解決策が機能しませんでした。AVPlayerブランクビデオ:音は再生されますがビデオは再生されません

AVPlayerは、空白のビデオを再生することがあります。音声はありますが、ビデオは再生されません。

空のビデオが再生されている間、私たちはプレーヤーのフレームとステータスを表示しました。フレームはゼロではなく、正しく設定されています。ステータスはreadyToPlayであった。 play関数もメインスレッドで呼び出されます。

つまり、プレーヤレイヤのフレームが有効であり、プレーヤもプレーする準備ができています。しかし、サウンドはありますが、ビデオは表示されません。

問題はタイミングのようです。ビデオを再生する前に5〜10秒待つと、ビデオは毎回うまく動作します。

この問題は、AppleのフォーラムでiOSの10、ではないのiOS 8または9

This threadに表示されますが、それは我々も使用 AVVideoCompositionCoreAnimationToolに関連するバグ、あるかもしれない示唆しています。

すべてのソリューションはありますか?

これは、iPhone 5デバイスよりもiPhone 7デバイスで頻繁に発生します。

コード:

fileprivate func playVideo(_ videoURL: String, prompt: String) { 
    // Show <playerView> 
    playerView.isHidden = false 

    // Use new video in player 
    playerItem = AVPlayerItem(url: URL(fileURLWithPath: videoURL)) 


    print("STATUS: \(player.status == AVPlayerStatus.readyToPlay). FRAME: \(playerLayer.frame). MAIN THREAD: \(Thread.isMainThread)") 


    player.replaceCurrentItem(with: playerItem) 

    // Start playing video 
    player.seek(to: kCMTimeZero) 
    player.actionAtItemEnd = .none 
    player.play() 
} 
+0

ここにコードを表示できますか?画面上に表示されるプレーヤーのサイズも – Horst

+0

@Horst必ず更新された質問。ありがとう! – Crashalot

+0

問題を再現するプロジェクトをgithubに置くことはできますか? –

答えて

0

この問題が発生した場合は、問題はiOSのバグに関連しているようです。問題はiOS 8/9デバイスでは発生せず、新しいiOS 10デバイスでのみ発生します。iOS 10.2以降、問題はなくなりました。

残念ながら、10.0.xまたは10.1.xのプログラムによるソリューションはありません。

0

私はあなたがAVPlayerViewControllerまたはAVPlayerLayerでプレーする必要があると思います。 Apple docから

AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; 

//set player layer frame and attach it to our view 
playerLayer.frame = self.containerView.bounds; 
[self.containerView.layer addSublayer:playerLayer]; 

//play the video 
[player play]; 

AVPlayerとAVPlayerItemは自分 自身で画面上の資産のビデオを提示することができないことを意味非ビジュアルオブジェクトです。

AVKit:あなたのビデオコンテンツを提示するための最良の方法は、 AVKitフレームワークのiOSとtvOSでAVPlayerViewControllerクラスまたは AVPlayerViewクラスを使用しているあなたは、あなたが 画面上の映像コンテンツを提示するために使用できる2つの 主要なアプローチを持っていますmacOSで。これらのクラスは、ビデオコンテンツ、 、再生コントロール、およびその他のメディア機能を備えており、フル再生の再生体験が になります。

AVPlayerLayer:プレーヤーのカスタムインターフェイスを構築する場合は、 AVFoundation で提供されるCore Animation CALayerサブクラスをAVPlayerLayerという名前で使用します。プレーヤーレイヤーは、ビューのバッキング レイヤーとして設定することも、レイヤー階層に直接追加することもできます。 AVPlayerViewおよびAVPlayerViewControllerとは異なり、プレイヤーレイヤーは は再生コントロールを表示しませんが、単に画面上にビジュアルコンテンツ を表示します。 メディアを再生、一時停止、検索することは、再生トランスポートコントロールを構築することです。

+0

右、申し訳ありませんが、playerlayerのフレームを設定するコードは省略されています。フレームはコードの他の場所で正しく設定され、ビデオが再生された時点でフレームによって確認されます。問題はタイミングのように思えます。ビデオを再生する前に5〜10秒待つと、ビデオは毎回うまく動作します。 – Crashalot

関連する問題