MPEG、MPEG-TSおよびMPEG-PSファイルおよびライブストリーム(ネットワーク/ UDP/RTPストリーム)からフレーム(ビデオおよびメタデータ)を取り出そうとしています。 。私はJCODECを使ってこれを行うことを検討していましたが、FrameGrab/FrameGrab8Bitクラスを使い始めることから始め、それらのフォーマットが「一時的にサポートされていません」というエラーが発生しました。私は古いコードを使うことができるかどうかを確かめるためにいくつかのコミットを調べましたが、2103年から2015年にかけて、これらのファイルが両方とも "一時的にサポートされていません"というように見えます。JCODECはMPEG-TSまたはMPEG-PSをサポートしています
私はその後
public static FrameGrab8Bit createFrameGrab8Bit(SeekableByteChannel in) throws IOException, JCodecException {
...
SeekableDemuxerTrack videoTrack = null;
...
case MPEG_PS:
MPSDemuxer psd = new MPSDemuxer(in);
List tracks = psd.getVideoTracks();
videoTrack = (SeekableDemuxerTrack)tracks.get(0);
break;
case MPEG_TS:
in.setPosition(0);
MTSDemuxer tsd = new MTSDemuxer(in);
ReadableByteChannel program = tsd.getProgram(481);
MPSDemuxer ptsd = new MPSDemuxer(program);
List<MPEGDemuxerTrack> tstracks = ptsd.getVideoTracks();
MPEGDemuxerTrack muxtrack = tstracks.get(0);
videoTrack = (SeekableDemuxerTrack)tstracks.get(0);
break;
...
...以下のコードに入れてバックFrameGrab8Bitクラスに物事を接続しようとしたが、私はparsePacket機能でMTSDemuxer.javaクラスのパケットヘッダアサーションが失敗に走りました:コードはアサートを通過できたが、その後(tstracks.get(0)
がSeekablに変換することはできませんvideoTrack = (SeekableDemuxerTrack)tstracks.get(0)
で失敗:
public static MTSPacket parsePacket(ByteBuffer buffer) {
int marker = buffer.get() & 0xff;
int marker = by & 0xff;
Assert.assertEquals(0x47, marker);
...
私はシーク可能なバイトチャネル(in.setPosition(0)
IE)の位置をリセットしたときにことがわかりましたeDemuxerTrack)
私は自分の時間をウエストしていますか?これらのフォーマットはライブラリのどこかでサポートされていますが、私はそれらを見つけることができませんか?
また、コード内を移動してクイックテストアプリケーションを作成した後、デマルチプレクサから出るビデオフレームはすべて、ビデオフレームです。ビデオフレームに関連付けられたメタデータフレームを取得する方法はありませんか?参考のため
、私はからテストファイルを使用しています。将来的には誰もこの質問を有する場合http://samples.ffmpeg.org/MPEG2/mpegts-klv/