public ParsePacketizedStream ( Stream PacketStream ) : PacketizedStream | ||
PacketStream | Stream | |
리턴 | PacketizedStream |
public PacketizedStream ParsePacketizedStream(Stream PacketStream)
{
var c = (byte)PacketStream.ReadByte();
//Console.WriteLine("c: 0x{0:X}", c);
var PacketizedStream = default(PacketizedStream);
// mpeg 2 PES
if ((c & 0xC0) == 0x80)
{
var flags = (byte)PacketStream.ReadByte();
var header_len = (byte)PacketStream.ReadByte();
var HeaderStream = PacketStream.ReadStreamCopy(header_len);
if (HeaderStream.Length != header_len) throw (new Exception("Didn't read the entire packet"));
//PacketStream.Skip(header_len);
//Console.WriteLine("flags: 0x{0:X}", flags);
// Has PTS/DTS
if ((flags & 0x80) != 0)
{
PacketizedStream.dts = PacketizedStream.pts = HeaderStream.ReadStruct<TimeStamp>();
// Has DTS
// On PSP, video DTS is always 1 frame behind PTS
if ((flags & 0x40) != 0)
{
PacketizedStream.dts = HeaderStream.ReadStruct<TimeStamp>();
}
//Console.WriteLine("pts: {0}, dts: {1}", PacketizedStream.pts, PacketizedStream.dts);
}
}
PacketizedStream.Stream = PacketStream.ReadStreamCopy();
return PacketizedStream;
}
public void ReadPacketizedElementaryStreamHeaderTest() { MpegPsDemuxer.Packet Packet; var MpegPsDemuxer = new MpegPsDemuxer(File.OpenRead("../../../TestInput/test.pmf").SliceWithLength(0x800)); for (int n = 0; n < 32; n++) { Packet = MpegPsDemuxer.ReadPacketizedElementaryStreamHeader(); //if ((Packet.Type & 0xFF0) == 0x1E0) //if (Packet.Type == 0x1E0) { Console.WriteLine("0x{0:X}", Packet.Type); MpegPsDemuxer.ParsePacketizedStream(Packet.Stream); } } }