3

ダウンロードとストリーミングのディストリビューションを使用してクラウドフロント インスタンスをセットアップしました。署名付き URL で両方を非公開に設定しました。署名付き URL 付きの画像のダウンロード配布で動作するサンプル コードを取得できました。現在、署名付き URL を使用して JW Player のストリーミング配信を動作させようとしていますが、問題が発生しています。

Here is my signed URL format: rtmp://s1iq2cbtodqqky.cloudfront.net/2012-08-31_13-24-01_534.mp4?Expires=1359648770&Signature=Oi8RwL4Nf338NldW2uIsqFIv3zHnJkxXYbXIiVQh~J0Iq4kb00Ly5MLTgJw~87KmlUOmilmdRHy7p~UxeGYQxgkewPI11r27se0b~hTvpxq9y9Z5C-B-A58ZnngaCi9G2SHAujMzvss7ynLLEqUV3M6MVZl1qCxyfJbLdxCIEMY_&Key-Pair-Id =

これが私のJW Playerコードです:

<script type="text/javascript" src="jwplayer/jwplayer.js"></script>
<div id="container">Loading the player ...</div>
<script type="text/javascript">
jwplayer("container").setup({
'flashplayer': 'jwplayer/jwplayer.flash.swf',
'file': '<?= $canned_policy_stream_name ?>',
'width': '480','height': '270',
'provider': 'rtmp',
'streamer': 'rtmp://s1iq2cbtodqqky.cloudfront.net/cfx/st/'

});
</script>

ここで何が悪いのか誰にも分かりますか?URL だけをテストするにはどうすればよいですか? 現時点では、問題が URL にあるのか、JW Player 統合のコードにあるのかを判断するのは困難です。

-J

4

1 に答える 1

9

ここにはたくさんの落とし穴があります。私がそれに入るとき、それらを通り抜けるのにしばらく時間がかかりました。これが私が多くの人々を助けるかもしれないと思ういくつかのステップです。

最初に私が行ったテクノロジースタックは次のとおりです。

  • Rails 3.x
  • エンコーディング用のZencoder
  • ファイルアップロード用のペーパークリップ
  • アップロード用のJqueryUload
  • JWPlayer

それがあなたのプラットフォームでない場合は、いくつかの空白を埋めることができますが、多くの学習はそれでもあなたに役立ちます。

ユーザーからS3にコンテンツをアップロードする方法に関する記事がたくさんあるので、その部分はスキップします。興味深い部分は、エンコードプロセスを開始するときです。ここから、署名、ストリーミングの観点から問題が始まります。 jwplayerまたはflowplayerで再生するコンテンツ。

まず、ファイル形式-MP4とM4Aが最も成功したファイル形式であることがわかりました。zencoderを使用すると、すぐに使用できるmp4およびm4aエクスポート形式を使用して、これらの出力を正常に再生することができました。

  1. クラウドフロントディストリビューションをセットアップする前に、zencoderポリシーをバケットに追加します。
  2. すでにクラウドフロントを設定している場合は、zencoderバケットポリシーをバケットに追加する方法に注意し、そこにあるものと必ずマージする必要があります。Cloudfrontはバケットポリシーにもデータを入れます。正しく機能するには、これとzencoderバケットポリシープロファイルの両方が必要です。

  3. バケットポリシーはバケット所有者が所有するファイルにのみ適用されるため、エンコードプロバイダーに相談して、アクセスキーを使用してファイルをクラウドフロントに配置するようにしてください。S3でファイルを所有しているユーザーと同じように署名を行うユーザーがいない場合、それは機能せず、なぜだろうと何時間も費やすことになります。

  4. バケットが正しく設定されていることを確認したら、このツールを使用して、ファイルが実際にストリーミングされることを検証します(署名されたURLなしで開始し、Cloudfrontがストリーミングされていないファイルをストリーミングできるようにします。それでも問題が解決しない場合遠くにはなりません)。

    http://d1k5ny0m6d4zlj.cloudfront.net/diag/CFStreamingDiag.html

    rtmp URLが次の場合、amazonsツールを使用するには:

    "rtmp://s3b78u0kbtx79q.cloudfront.net/cfx/st/content/myfile.png"

    入力するストリーミングURLの場合:

    s3b78u0kbtx79q.cloudfront.net

    入力するビデオファイル名は次のとおりです。

    content / myfile.png(先頭の「/」なし)

  5. 診断ツールを介してAmazonからファイルを実際にストリーミングできるようになったら、次に、flowplayerのjwplayerからの手順に従います。

  6. ストリーミング中のJWPlayerのセットアップに関する注意(問題はほとんどありませんでした)-デバッグバージョンのフラッシュもインストールします。これで、デバッグ中にフラッシュコントロールを右クリックして、ログを「コンソール」に変更できます。これで、Firebugに表示されるフラッシュコントロールからロードエラーが発生します。最初にFirefoxでテストしてください。通常、これらのログを確認するときは、HTML制御文字をエスケープしたくないので、エスケープすると1日が台無しになります。

  7. これを行う多くの人がコンテンツを安全にし、署名されたURLを使用することを望んでいると思います(疑わしい他の人があなたのrtmpパスをリッピングしてサイトに直接埋め込んで、帯域幅を支払っている間に利益を得ないようにするため)。これを十分に強調しないでください。そのパスを開始する前に、まず、クラウドフロントバケットからパブリックストリーミングされたファイルでRTMPストリームを再生して、メカニズムが機能していることを確認してください。

  8. ここまで進んだ場合、あなたは良い場所にいますが、今はすべてのバグがあなたを襲う可能性があるときです。上記の私のアドバイスに従った場合、ステップの1つを逃した場合よりも短い日となります(バケットポリシーに含まれていることを確認するなど)クラウドフロントオリジンIDとエンコーディングプロバイダーは、正規IDを所有者ではなく所有者としてファイルを書き込みます)。

  9. RTMPを介してプレーヤーにコンテンツをストリーミングできるようになったので、次に、署名付きURLでコンテンツを機能させます(他のサイトでは、RTMPパスをコピーして、jwplayerを接続した独自のサイトで再生することはできません)。 。少なくともレールでは、署名されたURLを生成する最良の方法は、次のgemを使用することです。

    https://github.com/58bits/cloudfront-signer

    URLの埋め込み方法に応じて、さまざまなタイプのエスケープを使用する必要があります。URLが再生されない場合は、次のことを試してください(正確ではありませんが、ここにいて髪を失った場合は、何でも試してみてください。すでにこれを機能させようとしている場合は、おそらく私が何を意味するのかをすでに知っているでしょう。しばらくの間ヘアカットが必要です):

<%=  AWS::CF::Signer.sign_path 'path/to/my/content', :expires => Time.now + 600 %>
<%=raw AWS::CF::Signer.sign_path 'path/to/my/content', :expires => Time.now + 600 %>

<%=  AWS::CF::Signer.sign_path_safe 'path/to/my/content', :expires => Time.now + 600 %>
<%=raw AWS::CF::Signer.sign_path_safe 'path/to/my/content', :expires => Time.now + 600 %>

rawを使用するとすべての問題が解決することがわかる前に、おそらく1時間はめちゃくちゃになりました。

于 2013-02-11T22:11:00.743 に答える