問題タブ [fmp4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mp4 - AAC オーディオ ファイルは、通常の速度よりも速く再生されます
デバイスから生の PCM データをサンプリングし、libfaac を介して ".aac" 形式 (ADTS 形式) のオーディオ ファイルにエンコードし、16KHZ または 41KHZ でサンプリングすると、エンコードされた ".aac" ファイルは通常よりも速く再生されました。どういう理由ですか?
パラメータの構成は次のとおりです。
ffmpeg - ffmpeg は、Firefox でエラーになる mp4 ストリームを作成します
HTML5 ビデオ要素で fmp4 を再生しようとしています。
ffmpeg の出力を MSE に渡す Websocket の作成に成功しました。
ただし、Firefox (72.0.1、64 ビット、Ubuntu 18.04LTS の下) でページを開こうとすると、常にエラーが発生します。
これは私のFFMPEGの行です:
これは、サーバー側 Java (Tomcat エンジンを使用) がこのコマンドの出力を解析する方法です (これは非効率的かもしれませんが、今のところ問題ありません)。
次に、クライアント側は、このリポジトリのような websocket-MSEです。
結果:
サーバー側をデバッグし、sendBinary呼び出しの前にブレークポイントがあり、サーバー側を実行する前に数秒待機すると、ブラウザに最初の画像が表示されますが、すぐに上記のエラーが発生します。
サーバー側を (ブレークポイントなしで) 実行すると、ブラウザーに画像が表示されず、すぐにエラーが発生します。
Invalid Top-Level boxエラー メッセージの後には、常にランダムなガベージ キャラクタが続きます。
これが機能することの証明は、ポイント 1 にあります。データをクライアントに転送する前にしばらく待つと、そのエラーに到達する前に 1 (またはそれ以上のフレーム) をデコードできます。
これは、ffmpeg コマンドラインのエラーである可能性があります。
しかし、このトピックに関する適切なリソースを実際に見つけることができませんでした (古いリリースの Firefox に関連するものしか見つかりませんでした)。
アップデート1
これは、同じコマンドがパイプの代わりに mp4 ファイルを作成するときの FFMPEG ログです: https://pastebin.com/Gjq2vxeT
これは、間違ったボックスを含む詳細な Firefox ログです。
ポイント2でマークされたシナリオ(ブレークポイントなしで実行)を実行しているとき、トップレベルボックスは常に「f」であることに注意してください。
アップデート2:
ffmpeg の現在の出力は次のとおりです (最初の 128 項目を数値と英数字で表現): https://pastebin.com/DeJMfNYs
興味深いのは、最初の 4 バイトが無効に見えることです。しかし、byte4 (5 バイト目) からは問題ないようです ("ftyp")。
これを確認していただけますか?