ストリーミングサーバーを使用せずにAdobe HTTPストリーミング仕様を実装する方法

StackOverflow https://stackoverflow.com/questions/4443146

質問

Flash 10.1の時点で、彼らはAppendBytesメソッドを介してNetStreamオブジェクトにバイトを追加する機能を追加しました(ここで説明します http://www.bytearray.org/?p=1689)。この追加の主な理由は、Adobeが最終的にビデオのHTTPストリーミングをサポートしていることです。これは素晴らしいことですが、Adobe Media Streaming Serverを使用する必要があるようです(http://www.adobe.com/products/httpdynamicstreaming/)既存のビデオから正しいビデオチャンクを作成して、スムーズなストリーミングを可能にします。

NetStreamオブジェクトを交換する過去にHTTPストリーミングのハッキングバージョンを作成しようとしました(ここに似ています http://video.leizhu.com/video.html)、しかし、チャンクの間には常に一時的な一時停止があります。新しいappendbytesを使用して、私は前のサイトからのビデオの2つのセクションで簡単にモックアップしようとしましたが、それでもスキップはまだ残っています。

NetStreamオブジェクトのAppendbytesメソッドがセグメント間の顕著なスキップなしで素敵なスムーズなビデオを作成するために、2つの連続した.FLVファイルをどのように形成する必要があるかを知っていますか?

役に立ちましたか?

解決

サミュエルが説明したAdobeのファイルパッケージツールを使用して、これを機能させることができました。 NetStreamオブジェクトは使用しませんでしたが、OSMFサンプルプレーヤーを使用しました。これは、これを内部で使用すると思います。 FMを使用せずに行う方法は次のとおりです。

  1. httpダイナミックストリーミングのためのAdobeのファイルパッケージを取得します http://www.adobe.com/products/httpdynamicstreaming/
  2. このようなH.264/AACを含む既存のMP4ファイルでファイルパッケージを実行します。 -Segment-Duration = 30

これにより、30秒の長いF4Fファイル、F4XおよびF4Mファイルが発生します。 F4Fファイルは、再生されるべき正確にセグメント化された(および断片化された)MP4ファイルです。 OSMFプレーヤーを使用してこれをテストする場合は、次のことを行います。

  1. Apacheサーバーを取得します
  2. ApacheのAdobeのHTTP Origin Moduleから入手してください http://www.adobe.com/products/httpdynamicstreaming/
  3. に応じてモジュールをインストールします http://help.adobe.com/en_us/httpstreaming/1.0/using/ws8d6ed60bd880807c48597a9e1265edd6c0-8000.html
  4. f4f、f4x、およびf4mファイルをhttpdocsの下のVODディレクトリに入れます
  5. から「HTTPダイナミックストリーミングのOSMFサンプルプレーヤー」をから取得します http://www.osmf.org/downloads/osfmplayer_zeri2.zip
  6. サンプルプレーヤーをhttpdocsディレクトリに配置します
  7. ブラウザのサンプルプレーヤーからHTMLファイルをロードする http://localhost/osmfplayer.html
  8. ejjectボタンを押して、F4MファイルのURLに入れて、再生する必要があります

したがって、AdobeのファイルPackagerが使用するファイルスプリッターである元の質問に答えるために、FMSを使用する必要はありません。FLVおよびMP4/F4Vファイルで機能します。

他のヒント

サーバーを使用する必要はありません。 WowzaはAdobeのHTTPストリーミングのバージョンをサポートしており、ビデオを適切にセグメント化し、標準のHTTPサーバーにすべてのセグメントをロードすることで自分で実装できます。

AdobeのHTTPストリーミングのすべての仕様へのリンクはこちらです。

http://help.adobe.com/en_us/httpstreaming/1.0/using/ws9463dbe8dbe45c4c-1ae425bf126054c4d3f-7fff.html

クライアントをハッキングしてカスタムスタイルのHTTPストリーミングを実行しようとすると、はるかに面倒です。

HTTPストリーミングは、いくつかの異なるビデオのストリーミングをサポートするのではなく、別々のセグメントに分割された単一のファイルをストリーミングすることに注意してください。

ファイルパッケージ

オンデマンドメディアファイルをフラグメントに変換し、フラグメントをF4Fファイルに書き込むコマンドラインツール。ファイルパッケージはオフラインツールです。ファイルPackagerを使用して、Flash Accessで使用するファイルを暗号化できます。詳細については、オンデマンドメディアのパッケージを参照してください。

ファイルパッケージはAdobe.comから入手でき、Adobe®Flash®MediaServerを使用してrootInstall/Tools/F4FPackagerフォルダーにインストールされています。

Packagerダウンロードリンクはこちらにあります: HTTPダイナミックストリーミング用のファイルパッケージをダウンロードします

http://www.adobe.com/products/httpdynamicstreaming/

使用できます f4pack, 、Adobeのコマンドラインツール周辺のGUIであり、FLV/F4Vファイルを処理して、HTTPダイナミックストリーミングに使用できるようにします。

これが起こるOSMFコードの場所は、httpnetstreamクラスの実装内のタイマー射撃状態マシンです...有益な読み取りかもしれません。私がそれを書いたとき、私はそこにいくつかの役立つコメントを入れたと思います。

一般的な質問に関しては:

FLVファイル全体をByTearrayに読み取り、それをappendbytesに渡すと、再生されます。そのflvファイルを半分に壊し、前半をバイト配列として渡し、後半をバイト配列として渡すと、それも再生されます。

ギャップなしでビットレートを切り替えることができる場合は、一致するキーフレームポイントでFLVファイルを分割する必要があります。 'l'、 'v'、flags、offset)...残りはFLVバイトシーケンスの継続を期待しています。

私は最近、node.jsがM3U8トランスコード(https://github.com/andrewschaaf/media-server)を達成するための同様のプロジェクトを見つけましたが、wowza以外にApacheのOrigin Moduleの外でそれを行っていることはまだ聞いていません。ペイロードはほぼ同一であるため、F4Mセグメントを探すよりも、優れたMP4セグメント化ソリューション(たくさん)を探した方が良いでしょう。問題は、特に大規模なMP4ビデオでMOOV原子を管理し、適切な初期(ファイルの開始近く)の場所に配置するのが難しいことです。最適なFFMPEG設定と「QTFastStart」を使用しても、顕著に遅くなり、非効率的な帯域幅使用(通常は貪欲)、およびFLV/F4Vプレイバックで得られないスクラビング/時間に関連するいくつかのマイナーな頭痛になります。

私のプレーヤーでは、httpダイナミックストリーミング(HDS)とMP4を、ストリーム保護のためにAdobeのアクセス製品をライセンスする代わりに、AWK/CRONを使用してAWACHを使用したリアルタイムログの解析に基づいてHTTPダイナミックストリーミング(HDS)とMP4を切り替える予定です。しかし、最終的には、シーケンスされた時間/バイトハッシュを実質的に同等に受け取ります。 MP4だけが遅いです。したがって、mod_originは、フラッシュクライアントの単なるシンクロナイザー /リクエストルーター(HTTPを超える)です。私はまだMP4コンテナーベースの再生をスピードアップする方法を探しています。私が最近読んだ信じられないほどの解決策の1つ http://zehfernando.com/2011/flash-video-frame-woes/ ビデオエディター(Guy)とFlash開発者が、フレームバーコードのような視覚的な「バイナリ」スタンプを使用して、すべてのビデオフレームの下部に文字通り(Adobe Premiere Scriptを介して)追加した独自のMP4タイムコードソリューションを思いつきました。そして、これらのバイナリ値は、高度にacccurateのタイムコード値に変換されます。そのため、Flashはビデオフレームがペイントされたときに(リアルタイム)に分析し、プレイヤーがどこにいたか、どのバイトがあらゆる種類のMP4バイトセグメント化に優しいWebサーバーから必要なのかを正確に判断できます。事は(そしておそらくここで私が間違っているかもしれません)、フラッシュは、特に大きなビデオファイル(.5-1.5GIG)でMOOVデータに到達するときに任意に選択するようです。 mp4boxを介してmp4を実行するようにしたとしても(すなわちmp4box -frag 10000 -inter 0 movie.mp4)、これはOSMFとHDSが非常にうまく機能していると思いますが、Apacheが必要であり、 IMOを使用する独自のクローズドソースモジュール。 HDSはわずか1〜2歳であるため、オープンソースの実装が到着するのはおそらく時間の問題であり、node.js + mpegtsストリーミング(ライブかどうか)を備えたAndrew Chaafの男のような少しリバースエンジニアリングが必要です。最終的には、UIの下でOSMFのみを使用することになるかもしれません。これは、病気の拡張可能なHDSまたはMP4オープンプレーヤープラットフォームが必要な場合は、HDSと同様の美徳があると思われるため、独自のカスタムプレーヤーを実現するためにハッキングする必要があるためです。

AdobeのF4F形式はMP4ファイルに基づいています。FLVファイルの代わりにF4VまたはMP4を使用できますか?周囲にはMP4ファイルスプリッターがたくさんありますが、ファイル内のタイムスタンプが継続的であることを確認する必要があります。おそらく、ファイル内のオーディオまたはビデオストリーム内のゼロタイムスタンプが表示されると、一時停止が発生する可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top