5

iOS 5 および 6 で Apple の AVPlayer ライブラリを使用して、iOS デバイス ファミリで HTTP ライブ ストリーミングを再生しています。

コンテンツ クリップの間のミッドロールで広告を再生しているので、前の質問への回答を手伝ってくれた素晴らしい人が提案したように、#EXT-X-DISCONTINUITY タグを使用しています。

これは単一のビットレートで機能していますが、複数のビットレートの子プレイリストを持つバリアント プレイリストを使用する場合にのみ問題が発生します。最初の不連続タグの後でのみ音声付きの黒い画面が表示され、広告が終了した後も元に戻りません。(私は広告を聞くことができます)。

これは、iPhone 4、4S、5、および iPod Touch 第 4 世代でテストおよび再現されています。iPhone 4 は iOS 5 上にあり、残りは iOS 6 です。ほとんどの場合に発生しますが、毎回ではありません。ただし、これはバリアント プレイリストに複数のビットレートの子プレイリストが含まれている場合にのみ発生することを強調したいと思います。

以下は、私が使用するプレイリストの例です (これは 400kbps バージョンです。200 および 800kbps バージョンがあり、対応するプレイリストは次のようになりますが、すべての「400」を「200」および「800」に置き換えます)。実際のプレイリストはもっと長くなりますが、これは一例です)。

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
400-clipA-0.ts
#EXTINF:10,
400-clipA-1.ts
#EXTINF:5,
400-clipA-2.ts

#EXT-X-DISCONTINUITY
#EXTINF:10,
400-advert0.ts
#EXTINF:3,
400-advert1.ts

#EXT-X-DISCONTINUITY
#EXTINF:10,
400-clipB-0.ts
#EXTINF:10,
400-clipB-1.ts
#EXTINF:5,
400-clipB-2.ts

#EXT-X-ENDLIST

そして、子プレイリストを選択するバリアント プレイリストがあります。

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=240000
clips-200.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=440000
clips-400.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=840000
clips-800.m3u8

何が起こるか (約 75% の確率で)、これを再生すると、最初の不連続タグ (広告の直前) の後でビデオが黒くなり、二度と元に戻らないことに注意してください。広告。たとえば、1 つのビットレート バリアントのみでバリアント プレイリストを作成した場合:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=280000
clips-200.m3u8

その後、私はこの問題をまったく取得しません!非常に奇妙な。さらに、すべての不連続タグを削除し、バリアント プレイリスト内の他のビットレートを維持すると、正常に動作しますが (通常は)、何らかの理由で .ts ファイル全体をスキップすることがあります。おそらく、これらの不連続タグが必要なためです。

さらに、Amazon Cloudfront でファイルを直接再生すると、元の場所である Amazon S3 バケットからファイルを再生する場合よりも頻繁に発生します。

役立つその他の情報: 私の元のファイル (クリップと広告) はすべて、iPhone 4 から取得した .mov ファイルであり、それぞれの解像度は同じです。私の出力 (.ts ファイル) はすべてこれらから生成されました。ビットレート クラスごとに、クリップと広告全体で同じエンコード設定を使用しています。それ以外の場合、出力はすべて同じ解像度とフレームレートです。

最後に、Apple が提供する mediasegmentvalidator を使用して確認しても、警告は表示されません。

皆さんが提供できる助けに本当に感謝しています!これは私にとって不可解な問題です:-(

4

2 に答える 2

5

私がチェックすること(特定の順序ではなく、私が考えた順序です)。

  1. セグメントは実際に M3U8 が主張する長さですか
  2. それらのオーディオ ストリームとビデオ ストリームは同じ長さですか
  3. advert0.ts はビデオ キー フレームで始まりますか (それは大問題です!)
  4. ビデオとオーディオのコーデックとパラメータは同じですか (特にオーディオ - まったく変更してはなりません)
  5. ストリームは他の HLS 互換デバイスまたはアプリケーションで再生されますか? たとえば、VLC でストリームを再生できますか?
  6. サーバーログを見て、障害が発生する前後にどのレベルをプレイしているかを確認する方法はありますか? もしそうなら、これは答えを示している可能性があります (たとえば、デバイスが不連続でレベル切り替えを行っている場合、おそらくあなたはセグメントの最初のブロックのセグメント サイズを減らすことができるため、追加のセグメントを 1 つ取得できるため、より早く切り替えられる機会が得られます。

申し訳ありませんが、答えは 1 つではありませんが、つまずく可能性のある小さな小さなことがたくさんあります。

于 2012-10-29T00:20:06.483 に答える
2

#EXT-X-DISCONTINUITYバリアント ストリームで使用する場合は#EXT-X-DISCONTINUITY-SEQUENCE:<number>、各バリアントで使用する必要があります。

参照: https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-18#section-4.3.3.3

于 2016-01-27T00:14:15.877 に答える