2

シーク位置 (スクリプトにパラメーターとして送信) に基づいて、特定の .ogx ファイルを配信する PHP スクリプトを作成しようとしています。目的は、サーバー側シーク機能を備えた HTML5 ビデオ プレーヤーを作成することです。

コンテナー形式を少し調べて、シーク位置 (バイト単位) の前に発生する "OggS" 文字列の最初のインスタンスからデータの配信を開始するように .php スクリプトを作成しました。

問題は、私の新しい .ogx ファイルが「OggS」文字列で始まる場合でも、シーク位置が 0 以外である限り、HTML5、VLC、またはその他のプレーヤーで完全に再生できないことです。

シーク位置を 0 に設定すると、スクリプトはファイル全体を提供し、再生可能になります。

では、有効なビットストリームを生成しながら .ogx ファイルの先頭をトリミングするにはどうすればよいでしょうか?

4

2 に答える 2

0

ビデオとオーディオファイルをさまざまな方法で操作できるライブラリであるFFMpegをご覧ください。http://www.ffmpeg.org/

彼らのサイトから

FFmpegは、オーディオとビデオを記録、変換、ストリーミングするための完全なクロスプラットフォームソリューションです。これには、主要なオーディオ/ビデオコーデックライブラリであるlibavcodecが含まれています。

于 2010-05-10T18:52:09.660 に答える
0

まず、Ogg コンテナ内のビデオの一般的な拡張子は.ogv. 使用しているもの.ogxは Ogg コンテナー内の実行可能コード用に予約されていますが、現在、そのようなコードを運ぶことができるストリームはありません (Flash の代替を作成する試みがありましたが、成功しませんでした)。

次に、セオラの最初のフレームには、ストリームに関するすべてのメタデータが保持されます。プレイヤーがプレイできない理由は、この事実によるものです。このようなシーク オプションを許可する場合は、その最初のフレームを再送信する必要があります (おそらくデコードする必要さえなく、再送信するだけです)。

だからあなたが探しているのは:

  1. 最初の theora OggS パケットを見つけて記録します。
  2. 必要なところまでシークします。
  3. 記録したパケットを送信します。
  4. 次の「OggS」までデータをスキップします。
  5. 通常どおり、データのストリーミングを開始します。

ファイルには Theora だけでなく Vorbis ストリームも含まれている可能性が高いため、その最初のパケットも同様に送信することができます。

于 2014-11-11T13:04:56.260 に答える