アップロード前のJSにおけるオーディオビットとサンプリングレート情報の抽出
-
12-12-2019 - |
質問
私は認証されたユーザーがウェブブラウザを使用してネットワーク上のオーディオを配布するために、Webブラウザを使用することを可能にするアプリケーションを構築しています。オーディオファイルは、帯域幅を効率的に使用するために特定のビットレート(32kbps以下)を使用し、互換性を最大化するために承認されたサンプリングレート(22.050または44.100)を確実に使用する必要があります。サーバーサイドスクリプトを使用してアップロードに従ってこれらの要件を検証するのではなく、アップロードの前にこの情報を決定するためにHTML5 FileReaderを使用することを望んでいました。ブラウザが無効なビットレートおよび/またはサンプリングレートを検出した場合、ユーザはこれを推薦することができ、必要になるまでアップロード試行をブロックすることができます。
これはHTML5を使って可能ですか?問題は、私のアプリケーションのアプローチではなく、HTML5に関するものです。 HTML5はMP3オーディオファイルのサンプリングレートおよび/またはビットレートを検出できますか?
FYI注:アップロードを実行するためにFTP Javaアプレットを使用しています。アップロードが成功した後に、ユーザーを自動的にユーザーのURLに転送するようにアプレットが設定されています。これにより、サーバー上ではなく、クライアントに重いリフティングができます。アップロードされた各ファイルの最終宛先は異なるため必要です。それらは、さまざまなサーバーと異なるドメイン上にあり、おそらくサーバー上のさまざまなスクリプト言語をサポートしています。そうでない場合は、任意の1つのサーバーがそのストレージスペースをすばやく超えているため、サーバー側のスクリプトがFTP転送を行った場合、サーバーのパフォーマンスは単一の障害点としてすばやく劣化します。そのため、アップロードされたオーディオファイルを複数のサーバーと複数のドメインに保存するアプリケーションでは、ビットレートとサンプリングレートの検証はクライアント側で行われなければなりません。
解決
FileReader APIとJavaScriptの組み込みのオーディオコーデックを使用して、オーディオファイルからこの情報を抽出できます。
純粋なJSコーデックのベースコードを提供する1つのライブラリはaurora.jsです。その後、実際のコーデックコードはそれに基づいて構築されています
https://github.com/audiocogs/aurola.js/wiki./既知の用途
当然ブラウザはFileReader APIをサポートしている必要があります。
あなたのユースケースからわからなかったのは、JavaアプレットやFTPが必要な理由です。HTTPアップロードは、ASYNC BADCKEND(NODE.JS、Python Twisted)とスケーラブルストレージ(Amazon S3など)を適切にして実行した場合、複数のビッグファイルに対して機能します。同様のユースケースは、ファイルからオーディオメタデータを抽出するよりもはるかに厳しいアプリケーションである入ってくる画像のサイズを変更しています。クライアント側での唯一の利点は、実際に認識されていないユーザーによる不要なアップロードの数を減らすことです。
他のヒント
誰もがあなたのスクリプト/マークアップを変更してこれを迂回したり、それを再目的にすることさえすることもできます。
HTML / JavaScriptに関する少し知識を持つ検証スクリプトを変更できる場合は、HTML / JavaScriptを使用しないでください。検証されていることを確認しやすく、サーバー上で検証することで正しく検証されます。