問題タブ [mpeg2-ts]
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.
android - FFmpeg を使用して Android で MPEG4 を MPEGTS に変換する
わかりましたので、元の投稿を作成したとき、ffmpeg API についてほとんどまたはまったく知らないことは明らかです... デジタルメディアと変換の詳細について学び始めると、非常に圧倒されます。かなり読んでffmpegソースを調べた後、mp4からmpegtsへの作業出力を得ることができました。概念は、次の実行に似ています。
しかし、前に述べたように、C の ffmpeg API で実装する必要があります。
そのため、再生可能な .ts ファイルを生成することはできますが、そのビデオ ストリームとオーディオ ストリームは同期されません。つまり、Android タブレットでそれらを再生すると、オーディオが通常の速度で再生されている間にビデオが非常にゆっくりと再生され、その後 (オーディオ ストリームが終了すると) ビデオが通常の速度で最後まで再生されます。生成された同じ .ts ファイルを VLC で再生すると、非常に凝縮されたオーディオ (早送りされたように) が生成され、ビデオが正常に再生されます。
私が慣れていないメディア変換の側面はまだたくさんあります。それらのいくつかは、変換の成功を妨げていると確信しています。
ファイルに関する (ffprobe による) 情報は次のとおりです。 - in.mp4 - Android の記録によって生成されたファイル - MPEG4 (H.264 + AAC) - ffmpeg.ts - ffmpeg 変換によって生成されたファイル - MPEG2TS (H.264 + AAC) - out.ts - 私のコードで生成されたファイル - MPEGTS (H.264 + AAC)
in.mp4
ffmpeg.ts
out.ts
まず、出力ファイルの start_time に影響を与えることができませんでした。次に、プローブの -show_packets 出力を調べると、次のことがわかりました。
ffmpeg.ts
out.ts
ご覧のとおり、ffmpeg.ts は、pts/dts を持たないビデオ パケットから始まります。後続のオーディオ パケットには、pts/dts が含まれます。これが最後まで繰り返されます。ffprobe の出力によると、すべてのビデオ パケットに pts/dts が含まれているわけではありません。
ただし、out.ts はオーディオ パケットで始まり、ビデオ パケットと交互になります。ここで、ビデオ パケットにも pts/dts はありません。違いは、ここでは一連のオーディオ パケットの間に 1 つのビデオ パケットがあることです。残りのビデオ パケットに何が起こったのか (ffmpeg.ts には ~5 オーディオと ~5 ビデオが続きます)。
明らかに、私はまだ学んでいて、まだあまり多くのことを知りません.誰かにとって明白な問題として飛び出すものはありますか? どんな情報や提案でも大歓迎ですが、これからも頑張っていきます!!
ffmpeg - ffmpeg で AV_CODEC_ID_MPEG2TS を使用できません
ffmpeg を使用して yuv raw ビデオ ファイルを ts ストリーム ビデオ ファイルに変換したいので、コードでこれを行います。
しかし、実行すると、次のことが発生します。
"AV_CODEC_ID_MPEG2TS" を "AV_CODEC_ID_MPEG2VIDEO" に変更すると、うまく動作し、mpg ファイルも正常に生成されます。
c - オーディオ パケットで mp4 を mpeg2-ts に変換するとクラッシュする
h264 でエンコードされたビデオと AAC でエンコードされたオーディオを含む mp4 ファイルを受け取り、それをセグメント化された .ts ファイルに書き込む C コードをいくつか作成しました。
コードはここで見ることができます: http://pastebin.com/JVdgjM9G
問題は、コードがオーディオ パケットでチョークすることです。h264 から変換しているため、最終的にビデオ フレームで動作するようになった "h264_mp4toannexb" を使用する必要があります。ただし、プログラムが最初のオーディオ パケット (以下のストリーム 1) に到達するとすぐにクラッシュします。
出力例:
オーディオ ストリームでもフィルタを実行するようにコードを変更しようとしましたが (audio_stream->codec
代わりに を使用video_stream->codec
)、フィルタからエラーが発生するだけです。
通話しようとすると問題が発生しav_interleaved_write_frame(output_context, &packet);
ます。フィルタリングされたビデオ パケットの場合、問題はありませんが、オーディオ パケットは完全にチョークします。しかし、私はその理由にちょっと困惑しているので、どんな助けも大歓迎です。
c - mp4 を mpeg ts に変換すると、ビデオとオーディオの再生が速すぎる
MP4 ファイルを MPEG TS 形式に変換しています。コードはビデオ ファイルの生成を開始しましたが、ビデオとオーディオは超高速で実行されています。avconv -i
出力ファイルで(と同じ) を実行ffmpeg -i
すると、次の結果が得られます (180 fps!):
現在、私のコードでは、パケットの PTS 値または DTS 値を変更していません。それが私のビデオを台無しにしていると確信しています。私が変更する唯一のものは、このコードによる time_base です (変数はそれ自体で説明する必要があります)。
おそらく を呼び出す必要があることは承知していますがpacket.pts = av_rescale_q(...)
、どの time_bases / 値の間で再スケーリングする必要があるかわかりません。
完全なコードはhttp://pastebin.com/CHvrvc3Gで見ることができます。
私の入力/出力 (コード行 189+190) では、次の出力が得られます。
ffmpeg - ffmpeg を使用して mpeg-4 の mdat を mpeg-ts に書き込みます
ftyp と moov が不完全で mdat が有効な mp4 ファイルがある場合、mdat フレームを mpeg-ts に書き込むことはできますか? デコード/エンコードする予定がない場合、本当に sps と pps を取得する必要がありますか? 入力ストリームから出力ストリームにフレームを読み書きするだけではいけませんか?
gstreamer - gstreamer を使用して RTP 経由で mpeg2-ts ビデオをストリーミングする
gstreamer を使用して RTP 経由で mpeg2-ts ビデオをストリーミングしようとしています。サーバーに次のパイプラインを使用しています。
私が直面している問題は、以下に説明するような EOS イベントを直接取得することです。
非常に高速に実行されていることは理解できますが、どうすれば修正できますか?
android - Android MediaRecorder が再生できない MPEG2TS 出力を生成する
MediaRecorder を使用して、Samsung Galaxy Note 2 の MPEG2TS コンテナーでビデオを録画しています。エラーなしで初期化され、実際にファイルにデータが書き込まれます (ファイルは数 MB に成長します)。ただし、ファイルはどのメディア プレーヤーでも再生できません。
MediaRecorder を初期化するためのコードは次のとおりです。
上記のコードは、出力形式を MPEG2-TS ("8") ではなく MP4 ("2") に設定すると問題なく動作しますが、8 に設定すると、再生できない (ただし空ではない) ビデオが生成されます!
何が起こっているのでしょうか?
編集:誰かが興味を持っている場合は、デバイスに記録されたサンプル ビデオを次に示します。
gstreamer - Gstreamerのテキスト形式でplaybinによって作成されたパイプラインを取得するには?
次のパイプラインを使用して、トランスポート ストリーム ファイル (*.ts) を再生しています。
しかし、それを自分でパイプラインに変換する必要があります。これを達成する方法がわかりません。
これまで試してみました:(正常に動作します)
しかし、fakesink を autoaudiosink に置き換えると、リンクされていないエラーで失敗します。
そして、フェイクシンクでさえビデオでは機能しません:
だから私は2つの質問があります:
- playbin 要素によって作成されたパイプラインを見つける方法。
- gstreamer パイプラインを使用して mpeg2-ts ファイルを再生する方法。