public static int probe(MemoryStream b) { long marker = 0xffffffff; int score = 0; bool inVideoPes = false, hasHeader = false, slicesStarted = false; while (b.hasRemaining()) { int code = b.get() & 0xff; marker = (marker << 8) | code; if (marker < 0x100 || marker > 0x1ff) { continue; } if (MPSUtils.videoMarker(marker)) { if (inVideoPes) { break; } else { inVideoPes = true; } } else if (marker >= 0x1B0 && marker <= 0x1B8 && inVideoPes) { if ((hasHeader && marker != 0x1B5 && marker != 0x1B2) || slicesStarted) { break; } score += 5; } else if (marker == 0x100 && inVideoPes) { if (slicesStarted) { break; } hasHeader = true; } else if (marker > 0x100 && marker < 0x1B0) { if (!hasHeader) { break; } if (!slicesStarted) { score += 50; slicesStarted = true; } score += 1; } } return(score); }
public PESPacket nextPacket(MemoryStream outb) { MemoryStream dup = outb.duplicate(); while (!MPSUtils.psMarker(curMarker)) { if (!skipToMarker()) { return(null); } } MemoryStream fork = dup.duplicate(); readToNextMarker(dup); PESPacket pkt = MPSUtils.readPESHeader(fork, curPos()); if (pkt.length == 0) { while (!MPSUtils.psMarker(curMarker) && readToNextMarker(dup)) { ; } } else { read(dup, pkt.length - dup.position() + 6); } fork.limit(dup.position()); pkt.data = fork; return(pkt); }
public List <MPEGDemuxerTrack> getAudioTracks() { List <MPEGDemuxerTrack> result = new List <MPEGDemuxerTrack>(); foreach (BaseTrack p in streams.Values) { if (MPSUtils.audioStream(p.streamId)) { result.Add(p); } } return(result); }
public override DemuxerTrackMeta getMeta() { return(new DemuxerTrackMeta(MPSUtils.videoStream(streamId) ? DemuxerTrackMeta.Type.VIDEO : (MPSUtils.audioStream(streamId) ? DemuxerTrackMeta.Type.AUDIO : DemuxerTrackMeta.Type.OTHER), null, 0, 0, null)); }