1

HTTP経由でビデオをストリーミングするアプリに取り組んでいます。AVPlayer は、ビデオの再生に使用されます。AVPlayerItem と selectMediaOption メソッドを使用して、特定のビデオ ストリームを切り替えています (ソースには 3 つのストリームがあります)。

私の問題はseekToTime: toleranceBefore: toleranceAfter:、新しいビデオをスキップして、切り替え元のビデオと同じ時点にスキップするために呼び出すメディアオプションを切り替えるときです。問題は、これが確実に機能しないことです。AVPlayerItem の currentTime プロパティが要求した時間を報告しているにもかかわらず、ビデオは通常、要求された時間の数秒前にスキップします。私は、toleranceBefore と toleranceAfter の両方に kCMTimeZero を渡しています。

言及する価値のあるもう 1 つのことは、これは 1 つの特定のメディア ストリームでのみ発生するということです。問題が発生しない別のメディア ストリームがあります。

ここで何が問題なのか誰でも提案できますか?

4

1 に答える 1

1

この問題は、API やその使用方法とは何の関係もないことが判明しました。ビデオ セグメントの作成に使用されたエンコーダが、結果のファイルにエラーを作成していたようです。

ffprobe によって報告されるエラーは次のようなものです。

[h264 @ 00000249a4348980] decode_slice_header error
[h264 @ 00000249a4348980] no frame!
[h264 @ 00000249a4348980] non-existing PPS 0 referenced

私が使用していたビデオ セグメントを作成するために使用された元のツールが何であったかはわかりませんが、Apple の mediafilesegmenter もエラーを引き起こすことを確認しました。

ffmpeg を使用してセグメントをエンコードすることでエラーを解決しました。

于 2016-04-21T08:48:04.153 に答える