/// <summary> /// Read/Write a file and check the contents are identical /// </summary> /// <returns></returns> public async Task ReadWrite() { const string fpath = @"C:\Users\Kieran\Downloads\test-001.ts"; using var fsin = new FileStream(fpath, FileMode.Open, FileAccess.Read); using var dump = new StreamWriter($"{fpath}.txt"); var pidPipes = new Dictionary <ushort, Pipe>(); await PipeStream(fsin, async (pr) => { var pes = new MPEGTS.PESReader(); pes.OnPacket += async(pid, data) => { //skip non-video if (data[0] == 0x00 && data[1] == 0x00 && data[2] == 0x01 && data[3] == 0xe0) { if (!pidPipes.ContainsKey(pid)) { var pnew = new Pipe(); _ = Task.Run(async() => { await foreach (var nal in MediaStreams.NALReader.ReadUnits(pnew.Reader)) { if (!nal.Equals(default))
public async Task TestStream() { var req = new HttpClient(); var rsp = await req.GetAsync("http://localhost/play-channel/93276"); if (rsp.IsSuccessStatusCode) { await PipeStream(await rsp.Content.ReadAsStreamAsync(), async (pr) => { var pes = new MPEGTS.PESReader(); pes.OnPacket += async(pid, data) => { using var fs = new FileStream($"{pid}.bin", FileMode.Append, FileAccess.ReadWrite); await fs.WriteAsync(data); await fs.FlushAsync(); fs.Close(); }; await foreach (var pkt in MPEGTSReader.TryReadPackets(pr)) { await pes.PushPacket(pkt); } }); } }