streaming

Media streaming and broadcast systems in Go
Log | Files | Refs | README | LICENSE

DateCommit messageAuthorFiles+-
2025-07-28 11:28m3u8: parse segment title from EXTINFOliver Lowe6+103-12
2025-07-14 01:52readme: note self-hosted livestream pauseOliver Lowe1+7-6
2025-07-10 12:41wav: declare header var onceOliver Lowe1+10-16
2025-07-10 11:58pcap: let caller decide to buffer writesOliver Lowe1+17-25
2025-07-10 11:46mpegts: shorter returnOliver Lowe1+3-4
2025-07-10 10:30rtp: tidy marshal, unmarshalOliver Lowe1+7-5
2025-07-04 12:05m3u8: keep Rendition writing validation separate from EncodeOliver Lowe1+18-20
2025-07-04 11:28sdp: use encoding.TextMarshaler for Session encodingOliver Lowe4+28-16
2025-06-24 23:44scte35: early returnOliver Lowe1+33-35
2025-05-20 08:19m3u8: de-indent variant parsing common pathOliver Lowe1+85-79
2025-06-14 04:52scte35: correctly pack AudioChannelOliver Lowe3+50-5
2025-05-20 07:29m3u8: de-indent happy key, playlist parse pathOliver Lowe2+113-92
2025-05-20 06:03m3u8: unexport, use consistent timestamp layoutOliver Lowe3+5-5
2025-05-20 05:51m3u8: define segment parsing onceOliver Lowe1+21-37
2025-05-20 02:59m3u8: document at a high level what DateRange structure isOliver Lowe1+3-0
2025-05-17 10:38m3u8: include source of playlistOliver Lowe1+1-0
2025-05-17 07:31m3u8: parse EXT-X-PROGRAM-DATE-TIME tagOliver Lowe5+63-25
2025-05-15 13:19m3u8: support parsing EXT-X-MAP tagOliver Lowe2+43-2
2025-05-15 12:27m3u8: support parsing segment keysOliver Lowe3+82-1
2025-05-15 11:15m3u8: add validation to segment parsing testsOliver Lowe3+65-30
2025-05-04 04:00m3u8: ignore trailing commas, support quoted string attributesOliver Lowe2+89-3
2025-05-04 03:05m3u8: enable toggling lexer debug outputOliver Lowe1+7-1
2025-05-03 03:25m3u8: add higher-level variant testOliver Lowe3+49-9
2025-05-03 03:22m3u8: test more bad resolutionsOliver Lowe2+25-5
2025-04-22 23:36avhelp: deleteOliver Lowe3+0-147
2025-04-22 23:07m3u8: parse media sequence in one hitOliver Lowe1+3-14
2025-04-20 20:56m3u8: add support for parsing media sequence from playlistLuiz Henrique Rapatao3+44-0
2025-04-21 06:55readme: green is goodOliver Lowe1+1-1
2025-04-06 00:48internal/sip: extract containsSpace functionOliver Lowe1+11-4
2025-03-22 09:22sip: handle To, From fields in the header with their own typeOliver Lowe2+127-10
2025-03-22 06:16sip: validate Via header field on writing requestsOliver Lowe2+50-7
2025-03-22 05:49sip: write body of request only when it's non-nilOliver Lowe1+5-2
2025-03-21 11:03internal/sip: correctly format and write requestsOliver Lowe2+112-20
2025-03-11 23:29internal/sip: initial little testingOliver Lowe2+150-0
2024-12-31 06:23Unpublish draft jxs packageOliver Lowe3+0-0
2025-01-19 10:54mpegts: test for expected PCR base, extension valuesOliver Lowe2+94-31
2025-01-15 16:29fix incorrect pcr base calculationKevin Wang1+1-1
2024-12-22 12:10wav: support format extension fieldOliver Lowe2+144-70
2024-12-21 06:07add package for WAVE filesOliver Lowe3+145-0
2024-09-12 20:41m3u8: put hlsserve with all the other commandsOliver Lowe1+0-0
2024-08-24 06:55delete dummy ptp packageOliver Lowe1+0-3
2024-11-21 16:29fix: play rate as decimalArthur D4+20-18
2024-09-07 04:53Advertise zero dependenciesOliver Lowe1+1-0
2024-08-19 02:16rtp: let test session only accept local connectionsOliver Lowe1+1-1
2024-08-17 01:28scte35: support decoding private commandsOliver Lowe2+16-0
2024-08-14 10:37rtp: finish header length documentationOliver Lowe1+2-0
2024-08-17 01:06pcap: export Encode, Decode functionsOliver Lowe2+30-19
2024-08-17 00:41mpegts: let callers handle packet length errors explicitlyOliver Lowe1+8-2
2024-08-12 00:54m3u8: clarify purpose of some sample playlistsOliver Lowe3+134-133
2024-08-11 03:46sdp: only apply TTL field to ipv4 connectionsJacob Hitchins1+2-2
2024-08-10 08:56sdp: resolve remaining validation, documentation TODOsOliver Lowe4+9-9
2024-08-10 07:28rtp: correct string values for PCM audio payload typesOliver Lowe3+12-9
2024-08-10 07:03sdp: use a working live audio stream description for the exampleOliver Lowe2+30-14
2024-08-10 06:46sdp: parse IP addresses as netip.AddrOliver Lowe4+44-36
2024-08-10 05:33sdp: make the empty Origin Username usefulOliver Lowe4+5-5
2024-08-09 10:33pcap: support only current savefile versionOliver Lowe2+19-11
2024-08-09 10:15pcap: ignore unused global header fieldsOliver Lowe1+2-2
2024-08-08 07:44pcap: name testing data directory the usual nameOliver Lowe2+3-3
2024-08-08 07:42pcap: test for expected valuesOliver Lowe2+33-53
2024-08-04 10:00pcap: rename parser.go to pcapOliver Lowe3+122-123
2024-08-04 09:40pcap: drop superfluous endianness payload encodeOliver Lowe1+4-4
2024-08-04 09:31pcap: decode magic number onceOliver Lowe1+2-3
2024-08-04 09:24pcap: use data slice length to set length in headerOliver Lowe1+8-6
2024-08-04 09:17pcap: store packet timestamp as a time.TimeOliver Lowe2+49-19
2024-08-03 11:42pcap: include which packet, context in decode errorsOliver Lowe1+5-6
2024-08-03 11:37pcap: unexport magic numberOliver Lowe1+17-8
2024-08-02 11:22cmd/autx: correctly copy bytes out to the networkOliver Lowe1+38-14
2024-08-02 11:21rtp: add both correct 16-bit linear PCM audio payload typesOliver Lowe1+2-1
2024-08-02 02:15cmd/autx: fiddle with sample rates, buffers etc.Oliver Lowe1+11-14
2024-07-22 10:02sdp: only test SDP duration parsingOliver Lowe3+118-163
2024-07-20 07:04misc: add code review sectionOliver Lowe1+33-6
2024-08-01 16:47pcap: Added Encoding function to encode to .pcapJoshua Callary3+68-4
2024-08-01 08:44cmd/autx: import audio transmit programOliver Lowe1+110-0
2024-07-28 10:37misc: README typoOliver Lowe1+1-1
2024-07-25 01:20sdp: store m-line type as an intOliver Lowe2+59-8
2024-07-25 01:05rtp: add L16 payload typeOliver Lowe1+1-0
2024-07-23 05:55cmcd: round request durations to nearest 100msOliver Lowe2+7-8
2024-07-23 05:35rtp: detail TODOs properlyOliver Lowe1+6-1
2024-07-23 05:25pcap: add package overview docsOliver Lowe1+5-0
2024-07-19 23:08pcap: implement decodingJoshua Callary3+110-0
2024-07-19 10:19keep mac os metadata files out of version controlOliver Lowe1+1-0
2024-07-18 12:56sdp: compatible timestamp typeOliver Lowe3+4-4
2024-07-18 10:39sdp: add simplest example usage of the packageOliver Lowe1+29-0
2024-07-18 10:14sdp: only parse, store valid values of ConnInfo.TTLOliver Lowe1+10-7
2024-07-18 10:09sdp: document mandatory fieldsOliver Lowe2+56-14
2024-07-18 08:04sdp: implement session, media encodingOliver Lowe6+311-23
2024-07-18 05:36sdp: move time fields to their own fileOliver Lowe2+0-120
2024-07-17 11:55add example "ideal" commit messageOliver Lowe1+9-3
2024-07-16 04:03sdp: test invalid durationsSteve Wills2+56-9
2024-07-17 07:36cmd/avhelp: initial sketch of a GUI to some packages we've writtenOliver Lowe4+147-2
2024-07-17 04:03cmd/demo: finally an application?Oliver Lowe1+2-0
2024-07-16 06:24sdp: document most important exported structuresOliver Lowe2+15-5
2024-07-16 05:51sdp: parse time zone adjustmentsOliver Lowe3+86-10
2024-07-16 03:11sdp: document Session.Time fieldOliver Lowe2+5-3
2024-07-16 02:59sdp: parse time description, repeat fieldsOliver Lowe3+193-5
2024-07-15 08:39add archive link to READMEOliver Lowe1+1-0
2024-07-10 01:13sdp: clearer TODOOliver Lowe1+1-1
2024-07-05 06:51sdp: manage parsing state in a parser structOliver Lowe2+190-182
2024-07-05 05:41sdp: Parse option media description fieldsOliver Lowe2+119-20
2024-07-05 04:12sdp: handle parsing connection infoOliver Lowe2+77-0
2024-07-05 03:28sdp: don't bother storing network classOliver Lowe2+5-4
2024-07-05 02:34sdp: add basic media description parsingOliver Lowe2+55-4
2024-07-05 02:02sdp: test parsing bandwidth fieldOliver Lowe2+19-6
2024-07-05 01:39m3u8: correct func, oopsOliver Lowe1+1-1
2024-07-05 01:45sdp: handle more optional fieldsOliver Lowe2+129-56
2024-07-02 02:55correct youtube linkOliver Lowe1+1-1
2024-07-01 10:57scte35: reference issues for future command decodingOliver Lowe1+4-1
2024-07-01 10:47cmcd: return meaningful errors when parsingOliver Lowe1+12-9
2024-07-01 09:45sdp: just validate version, don't store itOliver Lowe1+3-5
2024-07-01 09:27rtp: define, document minimum header lengthOliver Lowe1+12-12
2024-07-01 08:22sdp: disallow empty linesOliver Lowe2+15-7
2024-07-01 08:11sdp: strip phone number of redundant charsOliver Lowe2+11-4
2024-06-30 03:41sdp: add test cases for different, bad, session descriptionsOliver Lowe5+89-38
2024-06-30 02:58sdp: implement parsing some (not all) optional fieldsOliver Lowe2+63-11
2024-06-29 14:14ptp: add ptp package stubOliver Lowe1+3-0
2024-06-29 12:56sdp: add package for Session Description Protocol (SDP)Oliver Lowe2+163-0
2024-06-29 12:49detail where jobs todo are maintainedOliver Lowe1+30-1
2024-06-27 06:34mpegts: document important constantsOliver Lowe1+2-0
2024-06-27 04:19cair: add new package for Cinegy Air HTTP APIOliver Lowe6+389-0
2024-06-25 23:42m3u8: more real-world decode exampleOliver Lowe1+13-9
2024-06-24 06:56jxs: new package to transport JPEG XS streams via RTPOliver Lowe3+213-0
2024-06-23 09:35rtp: always set packet header in sessionOliver Lowe1+3-7
2024-06-22 07:39mpegts: test unmarshalling bad dataOliver Lowe1+16-2
2024-06-22 07:19point to git patch workflow tutorialOliver Lowe1+3-0
2024-06-22 05:14rtp: implement RTP sessions and packet transmissionOliver Lowe3+219-0
2024-06-22 04:59rtp: correctly detect extension field in headerOliver Lowe1+2-2
2024-06-22 04:57rtp: add dynamic payload type generatorOliver Lowe1+22-8
2024-06-22 01:47m3u8: fix Characteristic name typoOliver Lowe1+16-16
2024-06-17 03:21rtp: document Packet, Header and their fieldsOliver Lowe1+44-0
2024-06-16 08:36rtp: implement marshalling packetsOliver Lowe1+62-3
2024-06-16 06:09rtp: add header decodingOliver Lowe1+112-0
2024-06-14 06:11mpegts: shorten boolean field setting from bitfieldOliver Lowe2+8-19
2024-06-14 05:11mpegts: provide example package usageOliver Lowe1+37-0
2024-06-14 04:07hlsserve: use mpegts.ScannerOliver Lowe1+11-6
2024-06-14 04:04mpegts: correctly unpack, pack clock references; PES packetsOliver Lowe2+49-26
2024-06-14 04:00mpegts: implement a streaming MPEG-TS scannerOliver Lowe2+83-16
2024-06-13 06:22mpegts: implement decoding/encoding of PES packetsOliver Lowe5+477-10
2024-06-11 09:03scte35: remove useless testOliver Lowe1+0-17
2024-06-11 08:48scte35: use maxTier where appropriateOliver Lowe3+5-8
2024-06-11 08:27scte35: simplify setting booleans from bitfieldsOliver Lowe3+12-30
2024-06-10 03:51mpegts: correctly pack PCR with reserved bitsOliver Lowe2+29-4
2024-06-10 03:11mpegts: add first high-level decode/encode testOliver Lowe2+27-0
2024-06-10 03:06mpegts: pack PID in the header correctlyOliver Lowe2+8-3
2024-06-09 22:44m3u8: add Encode & Decode example funtionsblackfalcon1+47-0
2024-06-08 09:53mpegts: implement packet encoding, adaptation field parsingOliver Lowe2+225-12
2024-06-08 09:47m3u8: finish documenting RenditionOliver Lowe1+26-15
2024-06-07 07:46m3u8: Document Renditionblackfalcon1+16-1
2024-06-06 05:44m3u8: use our new mpegts package, yay!Oliver Lowe1+11-3
2024-06-06 05:44mpegts: initial, basic decoding of packetsOliver Lowe2+123-8
2024-06-06 02:44mpegts: start mpegts packageOliver Lowe1+31-0
2024-06-05 04:51m3u8: more validation when writing DateRange tagsOliver Lowe2+20-13
2024-06-05 04:23m3u8: split out Segment text marshallingOliver Lowe4+65-45
2024-06-04 05:33cmd/hlsserve: import our poor man's livestream serverOliver Lowe2+261-0
2024-06-03 02:31m3u8: Document VariantOliver Lowe1+53-13
2024-06-01 09:25m3u8: separate printing and validation when writing playlist renditionsOliver Lowe2+40-37
2024-06-01 08:44m3u8: Return valid HLS tags with String()Oliver Lowe5+49-38
2024-06-01 07:35m3u8: clearly separate master, media playlists with a separtate source fileOliver Lowe2+142-138
2024-06-01 07:27scte35: Finally remove last of Comcast's codeOliver Lowe6+38-297
2024-06-01 06:59scte35: use updateCRCblackfalcon2+6-7
2024-06-01 05:37scte35: again! use copy instead of manually assigning bytesOliver Lowe3+9-20
2024-05-31 07:09scte35: add more constants for segmentation descriptorblackfalcon3+12-6
2024-05-31 08:43cmcd: Test encoding CMCD structures, tooOliver Lowe1+11-0
2024-05-31 08:42cmcd: correct key for string representation of StatusOliver Lowe1+1-1
2024-05-31 07:41m3u8: extract, add more validation for writing VariantsOliver Lowe2+106-33
2024-05-31 06:27scte35: use named segment descriptor type constantsOliver Lowe3+3-5
2024-05-30 17:03m3u8: support writing SessionDatablackfalcon4+99-3
2024-05-31 03:51scte35: Add most important docsOliver Lowe2+62-3
2024-05-31 02:43scte35, m3u8: rename SpliceInfo -> SpliceOliver Lowe9+450-450
2024-05-28 11:30m3u8: validate closed captions when parsingblackfalcon1+8-6
2024-05-30 06:06scte35: unexport EventIDCompliance fieldOliver Lowe5+58-48
2024-05-28 06:39m3u8: factor, test segment encoding separatelyOliver Lowe5+137-59
2024-05-28 04:30m3u8: write all tags, attributes of playlist segmentsOliver Lowe2+41-0
2024-05-28 02:17scte35: document some of the magic values for crc32Oliver Lowe2+15-40
2024-05-26 10:55scte35: add makeCRC32Tableblackfalcon1+19-257
2024-05-28 00:46m3u8: write EXT-X-MEDIA-SEQUENCE on playlist writeOliver Lowe2+2-0
2024-05-28 00:46m3u8: add MimeTypeOliver Lowe1+2-0
2024-05-23 23:52Correct mailing listOliver Lowe1+4-4
2024-05-23 10:28m3u8: Handle writing more attributes of VariantsOliver Lowe5+32-33
2024-05-23 09:48m3u8: implement Stringer for HDCPLevelOliver Lowe1+12-0
2024-05-23 09:39m3u8: handle writing master playlist renditionsOliver Lowe2+70-10
2024-05-23 08:26m3u8: handle writing basic master playlistsOliver Lowe1+18-0
2024-05-23 08:25m3u8: Don't store quotes in more attribute valuesOliver Lowe1+1-1
2024-05-23 08:01m3u8: only write some tags if they're setOliver Lowe2+12-4
2024-05-23 07:32m3u8: handle unsupported, non-standard variant tagsOliver Lowe1+3-2
2024-05-23 04:07doc: readme formatOliver Lowe1+1-2
2024-05-22 04:47m3u8: add specific test for floating point, integer combo parsingOliver Lowe3+33-1
2024-05-22 04:18m3u8: test parsing quoted string listsOliver Lowe8+173-30
2024-05-22 03:52m3u8: correctly parse resolution and byte rangeOliver Lowe2+19-11
2024-05-18 11:26m3u8: use scte35.SpliceInfo in the DateRange instead of raw bytesOliver Lowe3+22-27
2024-05-17 07:28m3u8: implement EXT-X-DATETIME tag encodingOliver Lowe3+65-0
2024-05-17 07:10scte35: check for accidental Command fields settingOliver Lowe2+39-0
2024-05-17 03:01m3u8: implement basic playlist encoding/writingOliver Lowe2+58-0
2024-05-17 02:59m3u8: implement parsing, byte ranges, endlistOliver Lowe6+88-13
2024-05-16 17:42scte35: create names constants against magic values compared to segmentation type idsagnikc3951+12-1
2024-05-16 06:12m3u8: add new m3u8 package for HLSOliver Lowe9+1183-0
2024-05-14 08:07scte35: More documentationOliver Lowe4+40-3
2024-05-14 04:45scte35: publish to root of repoOliver Lowe21+823-837
2024-05-14 03:54internal/scte35: add tests from outside the SCTE 35 spec.Oliver Lowe3+93-14
2024-05-14 03:54internal/scte35: implement DTMFDescriptor decodingOliver Lowe1+18-3
2024-05-13 06:04internal/scte35: use copy() builtin rather than assigning bytesOliver Lowe2+3-11
2024-05-13 05:45internal/scte35: Set Splice.CWIndex for non-encrypted messagesOliver Lowe1+7-7
2024-05-13 05:38internal/scte35: import more tests from scte 35 specOliver Lowe1+63-0
2024-05-13 04:32internal/scte35: implement encoding of splice insert commandsOliver Lowe4+5-25
2024-05-13 03:57internal/scte35: implement time_signal command encodingOliver Lowe7+102-68
2024-05-12 22:55internal/scte35: more consistent test diff outputOliver Lowe1+4-3
2024-05-12 05:29internal/scte35: clarify splice info encryption, ptsadjust packingOliver Lowe1+10-9
2024-05-12 05:08internal/scte35: define SAPType values as the bitfieldOliver Lowe1+7-19
2024-05-11 23:24internal/scte35: start testing encoding SpliceInfoOliver Lowe1+21-44
2024-05-11 23:19internal/scte35: name cipher.go for what it containsOliver Lowe2+0-0
2024-05-11 10:21internal/scte35: set correct EventIDCompliance in testOliver Lowe2+9-5
2024-05-11 10:01internal/scte35: replace manual bitshifting with binary.Append*Oliver Lowe1+8-22
2024-05-11 09:45internal/scte35: rename EncryptionAlgorithm to CipherOliver Lowe4+13-13
2024-05-11 09:40internal/scte35: shorten UPIDType const namesOliver Lowe3+19-34
2024-05-11 09:35internal/scte35: replace binary.PutUint* with AppendUint* where appropriateOliver Lowe2+3-10
2024-05-11 09:25internal/scte35: remove unused constants, decode functionsOliver Lowe3+0-859
2024-05-11 09:21internal/scte35: implement SpliceInsert decodeOliver Lowe2+68-16
2024-05-11 09:21internal/scte35: remove debug print, dead codeOliver Lowe1+0-3
2024-05-11 09:20internal/scte35: add sample 14.2 from spec to test casesOliver Lowe1+25-1
2024-05-10 09:43internal/scte35: implement BreakDuration decodingOliver Lowe2+29-0
2024-05-10 07:07internal/scte35: finish first working splice info decodeOliver Lowe1+4-2
2024-05-10 07:06internal/scte35: set correct expected values for sample 14.1 from specOliver Lowe1+4-3
2024-05-10 07:05internal/scte35: compare splice info structs by valueOliver Lowe1+1-1
2024-05-10 06:14internal/scte35: correct slice indicesOliver Lowe2+28-22
2024-05-10 06:12internal/scte35: print clear splice descriptor diffsOliver Lowe1+62-0
2024-05-10 06:11internal/scte35: set test case exactly as described in specOliver Lowe1+3-2
2024-05-10 03:09internal/scte35: factor command decoding to its own functionOliver Lowe1+33-25
2024-05-10 02:21internal/scte35: use an interface to represent SpliceDescriptorOliver Lowe2+204-68
2024-05-10 02:18internal/scte35: create a test table for more scte35 samplesOliver Lowe2+71-38
2024-05-08 07:29internal/scte35: use plain byte slices instead of iobitOliver Lowe4+5-31
2024-05-08 07:03internal/scte35: decode crc32 into SpliceInfoOliver Lowe1+8-0
2024-05-08 06:43internal/scte35: implement decoding of splice info descriptorsOliver Lowe2+39-8
2024-05-08 05:59internal/scte35: implement more decoding of SpliceInfoOliver Lowe2+113-4
2024-05-08 05:56internal/scte35: specify correct command typesOliver Lowe1+6-6
2024-05-07 07:43internal/scte35: allocate enough bytes on encoding splice infoOliver Lowe1+1-20
2024-05-07 07:42internal/scte35: add first end-to-end splice info encode testOliver Lowe1+44-0
2024-05-07 07:40internal/scte35: initial encoding of splice descriptorsOliver Lowe2+191-118
2024-05-07 03:24internal/scte35: encode last remaining component of splice_info: crc32Oliver Lowe1+3-0
2024-05-07 03:21internal/scte35: remove more unused typesOliver Lowe4+0-417
2024-05-07 03:15internal/scte35: remove unused type UTCSpliceTimeOliver Lowe1+0-18
2024-05-07 02:38internal/scte35: don't refactor, reimplement scte35 packageOliver Lowe30+624-2165
2024-05-02 07:18internal/scte35: remove unused string methodsOliver Lowe2+0-31
2024-05-02 06:52internal/scte35: remove unused constOliver Lowe1+3-7
2024-05-02 06:43internal/scte35: Only test binary encoding/decodingOliver Lowe7+3-209
2024-05-02 06:28internal/scte35: remove custom table serialisationOliver Lowe17+3-362
2024-05-02 06:19internal/scte35: remove all xml, json encoding logicOliver Lowe18+110-335
2024-05-02 05:50internal/scte35: remove superfluous error varOliver Lowe10+10-24
2024-05-02 05:31internal/scte35: use iotaOliver Lowe1+7-6
2024-05-01 06:35internal/scte35: idiomatic const, var block declarationsOliver Lowe12+293-328
2024-05-01 05:35internal/scte35: use empty struct for xml namespaceOliver Lowe12+14-30
2024-05-01 04:39Include pics, contributing, licensing in READMEOliver Lowe2+26-1
2024-05-01 03:20interrnal/scte35: import changes from our scte35-goOliver Lowe7+80-74
2024-04-30 13:07internal/scte35: remove testify moduleOliver Lowe3+47-41
2024-04-30 12:40internal/scte35: remove more uses of testifyOliver Lowe2+16-28
2024-04-30 12:18internal/scte35: shorten TestSpliceInfo*Oliver Lowe5+152-231
2024-04-30 08:51internal/scte35: factor out invalid base64 to own testOliver Lowe2+27-29
2024-04-30 07:51internal/scte35: import github.com/comcast/scte35-go@v1.4.5Oliver Lowe30+5133-0
2024-04-30 06:59initial commitOliver Lowe13+686-0