skyscraper8/Documentation/code_sample_sat_receive.txt
feyris-tan ef86554f9a Import
2025-05-12 22:09:16 +02:00

58 lines
1.9 KiB
Plaintext

int dvbSatSearchLnb = LibDvbV5.DvbSatSearchLnb("EXTENDED");
LibDvbV5SatLnb lnb = new LibDvbV5SatLnb(dvbSatSearchLnb);
LibDvbV5Device device = new LibDvbV5Device();
device.SetLog(8, null);
device.Find();
LibDvbV5DeviceList demuxerName = device.SeekBySystemName(0, 0, DvbDeviceType.Demux);
LibDvbV5DeviceList dvrName = device.SeekBySystemName(0, 0, DvbDeviceType.Dvr);
LibDvbV5DeviceList frontendName = device.SeekBySystemName(0, 0, DvbDeviceType.Frontend);
LibDvb5FrontendParameters frontend = new LibDvb5FrontendParameters(0, 0);
frontend.SetLnb(lnb);
frontend.StoreParameter(3, 11362000); //freq
frontend.StoreParameter(8, 22000000); //symbol rate
frontend.StoreParameter(17, (uint)LibDvbV5FrontendDeliverySystem.SYS_DVBS2);
frontend.StoreParameter(256, (uint)LibDvbV5SatPolarization.Horizontal);
frontend.SetParameters();
Thread.Sleep(400);
frontend.GetStatistics();
Thread.Sleep(400);
uint retrieveStats = frontend.RetrieveStats(512);
if ((retrieveStats & 0x10) != 0)
{
Console.WriteLine("got lock!");
LibDvbV5OpenDescriptor dvrFd = device.DeviceOpen(dvrName);
if (dvrFd == null)
throw new IOException("open failed");
dvrFd.SetBufferSize(1024 * 1024);
LibDvbV5OpenDescriptor demuxFd = device.DeviceOpen(demuxerName);
if (demuxFd == null)
throw new IOException("open failed");
demuxFd.DemuxSetPesFilter(0x2000, DemuxerPesType.DMX_PES_OTHER);
FileStream fileStream = File.OpenWrite(String.Format("{0}.ts", DateTime.Now.Ticks));
byte[] packBuffer = new byte[188];
int readLen = 0;
for (int i = 0; i < 9001; i++)
{
readLen = dvrFd.Read(packBuffer, 188);
if (readLen > 0)
{
fileStream.Write(packBuffer, 0, 188);
}
}
fileStream.Flush(true);
fileStream.Close();
demuxFd.Dispose();
dvrFd.Dispose();
}
else
{
Console.WriteLine("no lock :(");
}
frontend.Dispose();
device.Dispose();