2

開発中のビデオ オン デマンド iOS アプリで、遅延の大きいネットワーク上で HLS のパフォーマンスが非常に低いことに気付き、ダウンロードの発生方法を手動で調整したいと考えていました。

ファイル (完全にエンコードされた最初から最後までの TS/M3U8 ファイル) は既に CloudFront から提供されているため、これを最適化するためにサーバー側でできることは限られています (私はそう思います)。

もう 1 つの希望は、iOS アプリで localhost サーバーを実行することでした。この「サーバー」は、より頻繁で小さいセグメントのダウンロードよりも、少数で大きいセグメントのダウンロードを優先してダウンロードを管理します。したがって、利用可能な適切な帯域幅を引き続き使用しながら、ネットワークの高い遅延を回避できることを願っています.

ここでのアイデアは、ベース "index.m3u8" とそれが説明するすべてのビットレートの知識を自分たちだけで保持し、TS ファイルの単純な "プレイリスト" (ビットレート情報なし) のみを iOS に公開することでした。

しかし、私が立ち往生しているのは、iOS が実際に TS ファイルをどのように要求するかを理解しようとすることです。つまり、iOS が「ストレートな」M3U8 ファイル (複数のビットレートを持たないファイル) を再生しようとしても、TS ファイルの範囲要求を送信しようとするだろうと私は信じています。しかし、これらのファイルのビットレートがわからない場合、iOS はどのバイト範囲を localhost に要求するのでしょうか? 特定のバイト範囲を要求したとしても、どうしてそれが正しいのでしょうか? 以前にローカルホストから iOS に提​​供したファイルは、ビットレートが 1 Mbps の「5.ts」であり、次のファイルはビットレートが 500 Kbps の「6.ts」である可能性があります。iOS は、次のファイルの正しいバイト範囲を推定できない可能性があります??

私が概説したアプローチ (各 TS ファイルのビットレートを切り替え、iOS に対して透過的) は機能しますか? それとも、M3U8 で指定されたすべての TS ファイルは、私が読んでいない HLS 仕様の一部と同じビットレートを強制的に持つ必要がありますか?


いくつかのことを混乱させているか、iOS が基本的なストリーミングで一般的にどのように機能するかを正しく理解していない可能性があると思います。これに関するいくつかの実際の知識は非常に役立ちます。

ありがとう!

4

2 に答える 2

4

私の質問が意味のないものであり、深夜の脳のにじみ出しの結果であることに気付きました.

iOS は、 TS ファイルをダウンロードするための範囲要求を行うときに、M3U8 で指定されたビットレートに注意を払う必要はありません。最初に TS に要求を送信Range: bytes=0-1し、応答でファイルの長さを取得してから、バッファリングが必要な距離または MediaPlayer フレームワークが内部的に考慮するその他の変数に基づいて、将来の要求を行います。

今日、新鮮な目で標準 MP4 の Range Request パターン (このリンクのように) を見るだけで、これが解決しました。

お騒がせしてすみません。

PS: 言い換えれば、最初の質問で概説したスキームは実際に機能し、他の問題はありません。

于 2013-04-09T14:35:27.280 に答える
0

プレイリスト ファイルでバイト範囲が指定されていない場合、クライアントはバイト範囲リクエストを行いません。

于 2013-04-08T10:41:33.883 に答える