clone

a desktop tv and program guide for over-the-air broadcasts: what's on air, what your tuner gets, live tv, recordings

main
airwaves / internal / lineup / lineuptest / hdhomerun.go
hdhomerun.go 6.6K
1package lineuptest23import (4 "airwaves/internal/hdhr"5 "airwaves/internal/ts/tstest"6)78// Lineup is what an HDHomeRun's scan found around downtown Denver: 389// channels on 8 RF channels, among them KWGN's 2.1 on KDVR's, and KUSA's10// 9.4 on KTVD's.11func Lineup() []hdhr.Channel {12 return []hdhr.Channel{13 {Number: "53.1", Name: "KETD-HD", FrequencyHz: 479_000_000, Program: 1, TSID: 447, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},14 {Number: "53.2", Name: "E-NEWS", FrequencyHz: 479_000_000, Program: 2, TSID: 447, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},15 {Number: "53.3", Name: "Confess", FrequencyHz: 479_000_000, Program: 3, TSID: 447, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},16 {Number: "53.4", Name: "JTV", FrequencyHz: 479_000_000, Program: 4, TSID: 447, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},17 {Number: "53.5", Name: "BUZZR", FrequencyHz: 479_000_000, Program: 5, TSID: 447, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},18 {Number: "50.1", Name: "UniMas", FrequencyHz: 557_000_000, Program: 1, TSID: 471, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},19 {Number: "50.2", Name: "LATV", FrequencyHz: 557_000_000, Program: 2, TSID: 471, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},20 {Number: "25.1", Name: "KDEN-DT", FrequencyHz: 563_000_000, Program: 3, TSID: 491, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},21 {Number: "25.2", Name: "Exitos", FrequencyHz: 563_000_000, Program: 4, TSID: 491, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},22 {Number: "25.3", Name: "COZI", FrequencyHz: 563_000_000, Program: 5, TSID: 491, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},23 {Number: "25.4", Name: "CRIMES", FrequencyHz: 563_000_000, Program: 6, TSID: 491, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},24 {Number: "25.5", Name: "Oxygen", FrequencyHz: 563_000_000, Program: 7, TSID: 491, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},25 {Number: "25.6", Name: "COZI 2", FrequencyHz: 563_000_000, Program: 8, TSID: 491, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},26 {Number: "20.1", Name: "KTVD-HD", FrequencyHz: 575_000_000, Program: 3, TSID: 465, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},27 {Number: "20.2", Name: "H & I", FrequencyHz: 575_000_000, Program: 4, TSID: 465, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},28 {Number: "9.4", Name: "KUSA-HD", FrequencyHz: 575_000_000, Program: 5, TSID: 465, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},29 {Number: "9.7", Name: "TBD", FrequencyHz: 575_000_000, Program: 6, TSID: 465, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},30 {Number: "20.3", Name: "ShopLC", FrequencyHz: 575_000_000, Program: 7, TSID: 465, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},31 {Number: "20.4", Name: "OUTLAW", FrequencyHz: 575_000_000, Program: 8, TSID: 465, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},32 {Number: "14.1", Name: "Univision Denver", FrequencyHz: 581_000_000, Program: 1, TSID: 443, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},33 {Number: "14.2", Name: "MovieSphere Gold by Lionsgate", FrequencyHz: 581_000_000, Program: 2, TSID: 443, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},34 {Number: "14.3", Name: "GREAT", FrequencyHz: 581_000_000, Program: 3, TSID: 443, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},35 {Number: "14.4", Name: "Better Tomorrows, Today", FrequencyHz: 581_000_000, Program: 4, TSID: 443, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},36 {Number: "14.5", Name: "ShopLC", FrequencyHz: 581_000_000, Program: 5, TSID: 443, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},37 {Number: "6.1", Name: "KRMADT1", FrequencyHz: 587_000_000, Program: 1, TSID: 459, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},38 {Number: "6.2", Name: "PBSKIDS", FrequencyHz: 587_000_000, Program: 2, TSID: 459, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},39 {Number: "6.3", Name: "Create", FrequencyHz: 587_000_000, Program: 3, TSID: 459, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},40 {Number: "6.4", Name: "World", FrequencyHz: 587_000_000, Program: 4, TSID: 459, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},41 {Number: "4.1", Name: "KCNC-TV", FrequencyHz: 599_000_000, Program: 1, TSID: 457, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},42 {Number: "4.2", Name: "StartTV", FrequencyHz: 599_000_000, Program: 2, TSID: 457, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},43 {Number: "4.3", Name: "Dabl", FrequencyHz: 599_000_000, Program: 3, TSID: 457, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},44 {Number: "4.4", Name: "MeTV", FrequencyHz: 599_000_000, Program: 4, TSID: 457, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},45 {Number: "4.5", Name: "Catchy", FrequencyHz: 599_000_000, Program: 5, TSID: 457, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},46 {Number: "4.6", Name: "Story", FrequencyHz: 599_000_000, Program: 6, TSID: 457, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},47 {Number: "31.1", Name: "KDVR-DT", FrequencyHz: 605_000_000, Program: 3, TSID: 467, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},48 {Number: "31.2", Name: "Antenna", FrequencyHz: 605_000_000, Program: 4, TSID: 467, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},49 {Number: "31.3", Name: "ROAR-TV", FrequencyHz: 605_000_000, Program: 5, TSID: 467, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},50 {Number: "2.1", Name: "KWGN-DT", FrequencyHz: 605_000_000, Program: 6, TSID: 467, Modulation: "8vsb", VideoCodec: "MPEG2", AudioCodec: "AC3"},51 }52}5354// Muxes is what each RF channel of the lineup carries, for a fake55// HDHomeRun: its programs, each with an English audio track (and a56// Spanish one on 50.1, and a described video track on 4.1).57func Muxes() map[int64][]byte {58 byRF := map[int64]*tstest.Mux{}59 for _, c := range Lineup() {60 m := byRF[c.FrequencyHz]61 if m == nil {62 m = &tstest.Mux{TSID: c.TSID}63 byRF[c.FrequencyHz] = m64 }65 pid := 0x30 + 0x10*len(m.Programs)66 p := tstest.Program{Number: c.Program, PMTPID: pid, VideoPID: pid + 1, Audio: []tstest.Audio{{PID: pid + 4, Lang: "eng"}}, Name: c.Name}67 switch c.Number {68 case "50.1":69 p.Audio = append(p.Audio, tstest.Audio{PID: pid + 5, Lang: "spa"})70 case "4.1":71 p.Audio = append(p.Audio, tstest.Audio{PID: pid + 5, Lang: "eng", Described: true})72 }73 m.Programs = append(m.Programs, p)74 }75 out := map[int64][]byte{}76 for f, m := range byRF {77 out[f] = m.Packets(60 * len(m.Programs))78 }79 return out80}