web-dev-qa-db-ja.com

iOSアプリでTransport StreamをMPEG-4コンテナに変換(再ラップ)する方法は?

AACオーディオとH.264ビデオを含む.ts形式のライブストリームがあります。 iOSデバイスでプレイしたいです。 FFmpegに基づくムービープレーヤー を使用してビデオをデコードおよび再生しようとしましたが、オーディオが遅れていました。

このトランスポートストリームをMPEG-4コンテナーに再ラップして、サーバー側で変換せずにiOSデバイスで再生できますか?

サーバーから.tsライブストリームのURLが返されます。サーバーから取得できないため、.m3u8プレイリストなしでiOSデバイスでこのストリームを再生することが目標です。

15

トランスコーディングせずに単に再多重化するには、次を使用できます:ffmpeg -i input.ts -acodec copy -vcodec copy out.mp4

28
d33pika

ffmpeg -i input.ts -acodec copy -vcodec copy out.mp4を使用しましたが、変換に失敗しました。

次に、-bsf:a aac_adtstoascフラグと変換を使用し、「非単調なDTS」エラーとともに、出力ファイルに不正なタイムスタンプを付けました。
out.mp4ファイルはうまく再生されますが、このファイルからオーディオを抽出すると、オーディオの長さがビデオの長さと異なります。

抽出したオーディオを使用して元のファイルのオーディオを置き換えると、結果のビデオファイルのオーディオが同期しなくなります(オーディオの遅れ)。

次に、out.mp4クリップをDaVinci Resolveビデオエディターにインポートしました。オーディオとビデオの両方のファイルの長さが同じであるため、オーディオのみをエクスポートし、ファイルサイズを元のビデオと同じにしました。

しかし、Audacityでファイルを再生してオーディオグラフを表示すると、多くの空白の領域(音なし)に気付きました。 Audacity、ffmpeg、VLC、VSDC Video Editorで作成されたオーディオファイルはすべて、元のビデオファイルとは異なるサイズのオーディオファイルを提供しましたが、すべてサウンドがありました。

可能な解決策として、projectXでdemux a/vを聞いたことがあります。 Demuxは正常に完了しましたが、1KBのmp1ファイルを作成しましたが、「PTS with a frame」という多くのエラーが発生しました。

eac3toは、TSビデオファイルからAACオーディオを抽出することに成功しました。両方のファイルは同じサイズでした。 ffmpegを使用してビデオファイル内のオーディオを置き換えると、完全なシンが発生し、遅れや空白の音がなくなります。
「非単調なDTS」に関するエラーやタイムスタンプの誤りはありません。

できた.

2
Zimba