<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>streaming, branch HEAD</title>
<subtitle>Media streaming and broadcast systems in Go
</subtitle>
<entry>
<id>02e68a4c764537f911f5f17a1b82cdb9c101903e</id>
<published>2025-07-28T11:28:55Z</published>
<updated>2025-07-28T11:28:55Z</updated>
<title type="text">m3u8: parse segment title from EXTINF</title>
<link rel="alternate" type="text/html" href="commit/02e68a4c764537f911f5f17a1b82cdb9c101903e.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 02e68a4c764537f911f5f17a1b82cdb9c101903e
parent a42aeb2b574ec7a0b514a5f5bc08485de1c54bde
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Mon, 28 Jul 2025 18:28:55 +0700

m3u8: parse segment title from EXTINF

Resolves: https://github.com/untangledco/streaming/issues/41

</content>
</entry>
<entry>
<id>a42aeb2b574ec7a0b514a5f5bc08485de1c54bde</id>
<published>2025-07-14T01:52:08Z</published>
<updated>2025-07-14T01:52:08Z</updated>
<title type="text">readme: note self-hosted livestream pause</title>
<link rel="alternate" type="text/html" href="commit/a42aeb2b574ec7a0b514a5f5bc08485de1c54bde.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit a42aeb2b574ec7a0b514a5f5bc08485de1c54bde
parent c30923a3bde846499b74a9d44110611f16760230
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Mon, 14 Jul 2025 08:52:08 +0700

readme: note self-hosted livestream pause

</content>
</entry>
<entry>
<id>c30923a3bde846499b74a9d44110611f16760230</id>
<published>2025-07-10T12:41:09Z</published>
<updated>2025-07-10T12:41:09Z</updated>
<title type="text">wav: declare header var once</title>
<link rel="alternate" type="text/html" href="commit/c30923a3bde846499b74a9d44110611f16760230.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit c30923a3bde846499b74a9d44110611f16760230
parent 837319ae0f0e1c5ee99ae680598cf0484093dc45
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 10 Jul 2025 22:41:09 +1000

wav: declare header var once

The rest are initialised to zero values so we don&#39;t have to do it ourselves.

</content>
</entry>
<entry>
<id>837319ae0f0e1c5ee99ae680598cf0484093dc45</id>
<published>2025-07-10T11:58:25Z</published>
<updated>2025-07-10T12:21:03Z</updated>
<title type="text">pcap: let caller decide to buffer writes</title>
<link rel="alternate" type="text/html" href="commit/837319ae0f0e1c5ee99ae680598cf0484093dc45.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 837319ae0f0e1c5ee99ae680598cf0484093dc45
parent 54727822bfb89441860d93010ef0e15ca9a319a7
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 10 Jul 2025 21:58:25 +1000

pcap: let caller decide to buffer writes

There was probably a bug here. Anyway it&#39;s less code!

</content>
</entry>
<entry>
<id>54727822bfb89441860d93010ef0e15ca9a319a7</id>
<published>2025-07-10T11:46:23Z</published>
<updated>2025-07-10T11:46:23Z</updated>
<title type="text">mpegts: shorter return</title>
<link rel="alternate" type="text/html" href="commit/54727822bfb89441860d93010ef0e15ca9a319a7.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 54727822bfb89441860d93010ef0e15ca9a319a7
parent abc6381f91d6b8e36cfafad15375034229a640b8
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 10 Jul 2025 21:46:23 +1000

mpegts: shorter return

No need to annotate the error; caller knows we&#39;re unmarshalling.

</content>
</entry>
<entry>
<id>abc6381f91d6b8e36cfafad15375034229a640b8</id>
<published>2025-07-10T10:30:59Z</published>
<updated>2025-07-10T10:30:59Z</updated>
<title type="text">rtp: tidy marshal, unmarshal</title>
<link rel="alternate" type="text/html" href="commit/abc6381f91d6b8e36cfafad15375034229a640b8.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit abc6381f91d6b8e36cfafad15375034229a640b8
parent 3faffc6a916cf7e63b45d795ef3c1d1be5441407
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 10 Jul 2025 20:30:59 +1000

rtp: tidy marshal, unmarshal

</content>
</entry>
<entry>
<id>3faffc6a916cf7e63b45d795ef3c1d1be5441407</id>
<published>2025-07-04T12:05:53Z</published>
<updated>2025-07-04T12:05:53Z</updated>
<title type="text">m3u8: keep Rendition writing validation separate from Encode</title>
<link rel="alternate" type="text/html" href="commit/3faffc6a916cf7e63b45d795ef3c1d1be5441407.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 3faffc6a916cf7e63b45d795ef3c1d1be5441407
parent 896f60249033051fe531557d83031f3d0e2fa1c1
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri,  4 Jul 2025 22:05:53 +1000

m3u8: keep Rendition writing validation separate from Encode

Consistent with the rest of playlist fields.

While here delete duplicate Map writing function

</content>
</entry>
<entry>
<id>896f60249033051fe531557d83031f3d0e2fa1c1</id>
<published>2025-07-04T11:28:03Z</published>
<updated>2025-07-04T11:28:03Z</updated>
<title type="text">sdp: use encoding.TextMarshaler for Session encoding</title>
<link rel="alternate" type="text/html" href="commit/896f60249033051fe531557d83031f3d0e2fa1c1.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 896f60249033051fe531557d83031f3d0e2fa1c1
parent 035ab79449be5db836ae24e00d8bfe3317f14ea5
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri,  4 Jul 2025 21:28:03 +1000

sdp: use encoding.TextMarshaler for Session encoding

fmt.Stringer is not really meant for larger multi-line text.
It sucks a bit that we may return an error, but this lets us
put some validation logic in; we don&#39;t have any validation yet.

</content>
</entry>
<entry>
<id>035ab79449be5db836ae24e00d8bfe3317f14ea5</id>
<published>2025-06-24T23:44:58Z</published>
<updated>2025-06-24T23:44:58Z</updated>
<title type="text">scte35: early return</title>
<link rel="alternate" type="text/html" href="commit/035ab79449be5db836ae24e00d8bfe3317f14ea5.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 035ab79449be5db836ae24e00d8bfe3317f14ea5
parent fdd78130c167098cab14bc621e8d8960de6c6b7c
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Wed, 25 Jun 2025 09:44:58 +1000

scte35: early return

Clearer than keeping most of the code indented

</content>
</entry>
<entry>
<id>fdd78130c167098cab14bc621e8d8960de6c6b7c</id>
<published>2025-05-20T08:19:21Z</published>
<updated>2025-06-24T08:49:10Z</updated>
<title type="text">m3u8: de-indent variant parsing common path</title>
<link rel="alternate" type="text/html" href="commit/fdd78130c167098cab14bc621e8d8960de6c6b7c.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit fdd78130c167098cab14bc621e8d8960de6c6b7c
parent 440f52398d25a5cddd80cefad5ba8631b5e7eaf7
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 20 May 2025 18:19:21 +1000

m3u8: de-indent variant parsing common path

Return early with guard statements

</content>
</entry>
<entry>
<id>440f52398d25a5cddd80cefad5ba8631b5e7eaf7</id>
<published>2025-06-14T04:52:48Z</published>
<updated>2025-06-14T04:52:48Z</updated>
<title type="text">scte35: correctly pack AudioChannel</title>
<link rel="alternate" type="text/html" href="commit/440f52398d25a5cddd80cefad5ba8631b5e7eaf7.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 440f52398d25a5cddd80cefad5ba8631b5e7eaf7
parent 62d865db8655e6d23b4fccc3280d73c3cdda8ce9
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 14 Jun 2025 14:52:48 +1000

scte35: correctly pack AudioChannel

Couple of problems. First we were unnecessarily masking bits. Secondly
we were toggling the wrong bits in the final byte of an encoded audio
channel in an AudioDescriptor.

Resolves: https://github.com/untangledco/streaming/issues/39

</content>
</entry>
<entry>
<id>62d865db8655e6d23b4fccc3280d73c3cdda8ce9</id>
<published>2025-05-20T07:29:36Z</published>
<updated>2025-05-20T08:03:56Z</updated>
<title type="text">m3u8: de-indent happy key, playlist parse path</title>
<link rel="alternate" type="text/html" href="commit/62d865db8655e6d23b4fccc3280d73c3cdda8ce9.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 62d865db8655e6d23b4fccc3280d73c3cdda8ce9
parent 3df4029f13d7c363d034d1c5aed186ba947ab8a6
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 20 May 2025 17:29:36 +1000

m3u8: de-indent happy key, playlist parse path

Everything else are essentially guard statements

</content>
</entry>
<entry>
<id>3df4029f13d7c363d034d1c5aed186ba947ab8a6</id>
<published>2025-05-20T06:03:16Z</published>
<updated>2025-05-20T06:03:16Z</updated>
<title type="text">m3u8: unexport, use consistent timestamp layout</title>
<link rel="alternate" type="text/html" href="commit/3df4029f13d7c363d034d1c5aed186ba947ab8a6.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 3df4029f13d7c363d034d1c5aed186ba947ab8a6
parent a5e36fbfb60aadd58d7a06c29272251c0a8f8c0e
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 20 May 2025 16:03:16 +1000

m3u8: unexport, use consistent timestamp layout

The layout is meant to be used internally; the external interface is
regular time.Time values.

</content>
</entry>
<entry>
<id>a5e36fbfb60aadd58d7a06c29272251c0a8f8c0e</id>
<published>2025-05-20T05:51:19Z</published>
<updated>2025-05-20T05:51:19Z</updated>
<title type="text">m3u8: define segment parsing once</title>
<link rel="alternate" type="text/html" href="commit/a5e36fbfb60aadd58d7a06c29272251c0a8f8c0e.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit a5e36fbfb60aadd58d7a06c29272251c0a8f8c0e
parent 093b7480bc7275b0047361f2f87d3992bc71e5ee
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 20 May 2025 15:51:19 +1000

m3u8: define segment parsing once

It&#39;s a bit of a hack that we read one item too many from the lexer.
This change modifies segment parsing by sending the already consumed
lexer items and subsequent lexer items back through another channel.
Maintaining the original order through a channel means we can parse a
segment in a single loop. Much shorter than dealing with the first
item and all other items separately.

This puts off looking into any redesigns of the lexer. For now...?

</content>
</entry>
<entry>
<id>093b7480bc7275b0047361f2f87d3992bc71e5ee</id>
<published>2025-05-20T02:59:53Z</published>
<updated>2025-05-20T02:59:53Z</updated>
<title type="text">m3u8: document at a high level what DateRange structure is</title>
<link rel="alternate" type="text/html" href="commit/093b7480bc7275b0047361f2f87d3992bc71e5ee.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 093b7480bc7275b0047361f2f87d3992bc71e5ee
parent 4c423c95b51ec023fcbd1e8c0dfe8bbcf672c525
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 20 May 2025 12:59:53 +1000

m3u8: document at a high level what DateRange structure is

</content>
</entry>
<entry>
<id>4c423c95b51ec023fcbd1e8c0dfe8bbcf672c525</id>
<published>2025-05-17T10:38:07Z</published>
<updated>2025-05-17T10:39:40Z</updated>
<title type="text">m3u8: include source of playlist</title>
<link rel="alternate" type="text/html" href="commit/4c423c95b51ec023fcbd1e8c0dfe8bbcf672c525.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 4c423c95b51ec023fcbd1e8c0dfe8bbcf672c525
parent 3e2200b9e76d35b13e385535acdd87583441afbe
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 17 May 2025 20:38:07 +1000

m3u8: include source of playlist

So we all know where it comes from if we want to get more.

</content>
</entry>
<entry>
<id>3e2200b9e76d35b13e385535acdd87583441afbe</id>
<published>2025-05-17T07:31:05Z</published>
<updated>2025-05-17T07:32:49Z</updated>
<title type="text">m3u8: parse EXT-X-PROGRAM-DATE-TIME tag</title>
<link rel="alternate" type="text/html" href="commit/3e2200b9e76d35b13e385535acdd87583441afbe.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 3e2200b9e76d35b13e385535acdd87583441afbe
parent 9d0a9c380ce962f56c141d6db6fdacd7a41bf831
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 17 May 2025 17:31:05 +1000

m3u8: parse EXT-X-PROGRAM-DATE-TIME tag

</content>
</entry>
<entry>
<id>9d0a9c380ce962f56c141d6db6fdacd7a41bf831</id>
<published>2025-05-15T13:19:36Z</published>
<updated>2025-05-15T13:24:18Z</updated>
<title type="text">m3u8: support parsing EXT-X-MAP tag</title>
<link rel="alternate" type="text/html" href="commit/9d0a9c380ce962f56c141d6db6fdacd7a41bf831.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 9d0a9c380ce962f56c141d6db6fdacd7a41bf831
parent a30e111bb1d9e62aac3810e51749241f488e046a
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 15 May 2025 23:19:36 +1000

m3u8: support parsing EXT-X-MAP tag

</content>
</entry>
<entry>
<id>a30e111bb1d9e62aac3810e51749241f488e046a</id>
<published>2025-05-15T12:27:39Z</published>
<updated>2025-05-15T12:27:39Z</updated>
<title type="text">m3u8: support parsing segment keys</title>
<link rel="alternate" type="text/html" href="commit/a30e111bb1d9e62aac3810e51749241f488e046a.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit a30e111bb1d9e62aac3810e51749241f488e046a
parent 1146e3cfa554e40c95835cd5fd7c65eb7afb40aa
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 15 May 2025 22:27:39 +1000

m3u8: support parsing segment keys

</content>
</entry>
<entry>
<id>1146e3cfa554e40c95835cd5fd7c65eb7afb40aa</id>
<published>2025-05-15T11:15:21Z</published>
<updated>2025-05-15T11:15:21Z</updated>
<title type="text">m3u8: add validation to segment parsing tests</title>
<link rel="alternate" type="text/html" href="commit/1146e3cfa554e40c95835cd5fd7c65eb7afb40aa.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 1146e3cfa554e40c95835cd5fd7c65eb7afb40aa
parent e5a2561859aaf24e6368af6a4e82fc8112bc3d08
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 15 May 2025 21:15:21 +1000

m3u8: add validation to segment parsing tests

Tests fail, but at least we have exposed the bugs

</content>
</entry>
<entry>
<id>e5a2561859aaf24e6368af6a4e82fc8112bc3d08</id>
<published>2025-05-04T04:00:30Z</published>
<updated>2025-05-04T04:02:40Z</updated>
<title type="text">m3u8: ignore trailing commas, support quoted string attributes</title>
<link rel="alternate" type="text/html" href="commit/e5a2561859aaf24e6368af6a4e82fc8112bc3d08.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit e5a2561859aaf24e6368af6a4e82fc8112bc3d08
parent 3083e3dd1cb493efa7557138726614b1d3758e81
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sun,  4 May 2025 14:00:30 +1000

m3u8: ignore trailing commas, support quoted string attributes

Playlist from
https://test-streams.mux.dev/dai-discontinuity-deltatre/manifest.m3u8
containing discontinuities exposed the bugs.

</content>
</entry>
<entry>
<id>3083e3dd1cb493efa7557138726614b1d3758e81</id>
<published>2025-05-04T03:05:13Z</published>
<updated>2025-05-04T03:05:13Z</updated>
<title type="text">m3u8: enable toggling lexer debug output</title>
<link rel="alternate" type="text/html" href="commit/3083e3dd1cb493efa7557138726614b1d3758e81.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 3083e3dd1cb493efa7557138726614b1d3758e81
parent 5b0199e0674b051428672a1460ed5109b3cedadf
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sun,  4 May 2025 13:05:13 +1000

m3u8: enable toggling lexer debug output

</content>
</entry>
<entry>
<id>5b0199e0674b051428672a1460ed5109b3cedadf</id>
<published>2025-05-03T03:25:35Z</published>
<updated>2025-05-03T03:25:35Z</updated>
<title type="text">m3u8: add higher-level variant test</title>
<link rel="alternate" type="text/html" href="commit/5b0199e0674b051428672a1460ed5109b3cedadf.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 5b0199e0674b051428672a1460ed5109b3cedadf
parent a2109c70b8c1180b4a6b9400e503e37ff4abdda8
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat,  3 May 2025 13:25:35 +1000

m3u8: add higher-level variant test

We weren&#39;t really testing whether variants we parse from a playlist
were what we expect.

References: https://github.com/untangledco/streaming/issues/34

</content>
</entry>
<entry>
<id>a2109c70b8c1180b4a6b9400e503e37ff4abdda8</id>
<published>2025-05-03T03:22:56Z</published>
<updated>2025-05-03T03:22:56Z</updated>
<title type="text">m3u8: test more bad resolutions</title>
<link rel="alternate" type="text/html" href="commit/a2109c70b8c1180b4a6b9400e503e37ff4abdda8.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit a2109c70b8c1180b4a6b9400e503e37ff4abdda8
parent 18185121cc63011d9f097754c13cdc4cc11fd72b
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat,  3 May 2025 13:22:56 +1000

m3u8: test more bad resolutions

We don&#39;t necessarily need to make it easier to specify Variant test cases,
we can pick the already easy-to-test bits of Variant to make better.

References: https://github.com/untangledco/streaming/issues/34

</content>
</entry>
<entry>
<id>18185121cc63011d9f097754c13cdc4cc11fd72b</id>
<published>2025-04-22T23:36:02Z</published>
<updated>2025-04-22T23:36:02Z</updated>
<title type="text">avhelp: delete</title>
<link rel="alternate" type="text/html" href="commit/18185121cc63011d9f097754c13cdc4cc11fd72b.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 18185121cc63011d9f097754c13cdc4cc11fd72b
parent c782d7505d2481993f034dc8c80060f1ae176698
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Wed, 23 Apr 2025 09:36:02 +1000

avhelp: delete

The idea was to have a little playground using the packages we
developed. But it didn&#39;t really turn out to be useful.

</content>
</entry>
<entry>
<id>c782d7505d2481993f034dc8c80060f1ae176698</id>
<published>2025-04-22T23:07:04Z</published>
<updated>2025-04-22T23:07:04Z</updated>
<title type="text">m3u8: parse media sequence in one hit</title>
<link rel="alternate" type="text/html" href="commit/c782d7505d2481993f034dc8c80060f1ae176698.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit c782d7505d2481993f034dc8c80060f1ae176698
parent 2be3531b0dcadd5c29adc1fff94844876de00afe
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Wed, 23 Apr 2025 09:07:04 +1000

m3u8: parse media sequence in one hit

Since we&#39;re just parsing an integer we can just try to parse the next
token from the lexer, like how we parse the playlist version.

</content>
</entry>
<entry>
<id>2be3531b0dcadd5c29adc1fff94844876de00afe</id>
<published>2025-04-20T20:56:47Z</published>
<updated>2025-04-22T22:57:07Z</updated>
<title type="text">m3u8: add support for parsing media sequence from playlist</title>
<link rel="alternate" type="text/html" href="commit/2be3531b0dcadd5c29adc1fff94844876de00afe.html" />
<author>
<name>Luiz Henrique Rapatao</name>
<email>rapatao@rapatao.com</email>
</author>
<content type="text">commit 2be3531b0dcadd5c29adc1fff94844876de00afe
parent b3f3a7ccc95f08e87b4df8d758c035e4ef5e0fc5
Author: Luiz Henrique Rapatao &lt;rapatao@rapatao.com&gt;
Date:   Sun, 20 Apr 2025 21:56:47 +0100

m3u8: add support for parsing media sequence from playlist

</content>
</entry>
<entry>
<id>b3f3a7ccc95f08e87b4df8d758c035e4ef5e0fc5</id>
<published>2025-04-21T06:55:00Z</published>
<updated>2025-04-21T06:55:00Z</updated>
<title type="text">readme: green is good</title>
<link rel="alternate" type="text/html" href="commit/b3f3a7ccc95f08e87b4df8d758c035e4ef5e0fc5.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit b3f3a7ccc95f08e87b4df8d758c035e4ef5e0fc5
parent 64b08e1e5fe43e66f9ec1e54408492907975b724
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Mon, 21 Apr 2025 16:55:00 +1000

readme: green is good

</content>
</entry>
<entry>
<id>64b08e1e5fe43e66f9ec1e54408492907975b724</id>
<published>2025-04-06T00:48:58Z</published>
<updated>2025-04-06T00:48:58Z</updated>
<title type="text">internal/sip: extract containsSpace function</title>
<link rel="alternate" type="text/html" href="commit/64b08e1e5fe43e66f9ec1e54408492907975b724.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 64b08e1e5fe43e66f9ec1e54408492907975b724
parent 5740e5eef190ea7e2a372f6c5da31c40910fe507
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sun,  6 Apr 2025 10:48:58 +1000

internal/sip: extract containsSpace function

We&#39;ll need it later and we&#39;re a few nested for loops and if stmts
down so a little cleaner once we do this a few more times.

</content>
</entry>
<entry>
<id>5740e5eef190ea7e2a372f6c5da31c40910fe507</id>
<published>2025-03-22T09:22:07Z</published>
<updated>2025-03-22T09:22:07Z</updated>
<title type="text">sip: handle To, From fields in the header with their own type</title>
<link rel="alternate" type="text/html" href="commit/5740e5eef190ea7e2a372f6c5da31c40910fe507.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 5740e5eef190ea7e2a372f6c5da31c40910fe507
parent ef08e53ee37488a036de6aacf1895d843ab065a0
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 22 Mar 2025 20:22:07 +1100

sip: handle To, From fields in the header with their own type

Now we handle the tag header parameter, and all the different forms
the values of To and From can have.

</content>
</entry>
<entry>
<id>ef08e53ee37488a036de6aacf1895d843ab065a0</id>
<published>2025-03-22T06:16:56Z</published>
<updated>2025-03-22T06:16:56Z</updated>
<title type="text">sip: validate Via header field on writing requests</title>
<link rel="alternate" type="text/html" href="commit/ef08e53ee37488a036de6aacf1895d843ab065a0.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit ef08e53ee37488a036de6aacf1895d843ab065a0
parent 707b0c4f5fd7c7acd55fa9e93b8f7344e3e83276
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 22 Mar 2025 17:16:56 +1100

sip: validate Via header field on writing requests

</content>
</entry>
<entry>
<id>707b0c4f5fd7c7acd55fa9e93b8f7344e3e83276</id>
<published>2025-03-22T05:49:28Z</published>
<updated>2025-03-22T05:49:28Z</updated>
<title type="text">sip: write body of request only when it&#39;s non-nil</title>
<link rel="alternate" type="text/html" href="commit/707b0c4f5fd7c7acd55fa9e93b8f7344e3e83276.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 707b0c4f5fd7c7acd55fa9e93b8f7344e3e83276
parent f62ba4580683b9231f5608a097aa281961f16c1b
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 22 Mar 2025 16:49:28 +1100

sip: write body of request only when it&#39;s non-nil

duh

</content>
</entry>
<entry>
<id>f62ba4580683b9231f5608a097aa281961f16c1b</id>
<published>2025-03-21T11:03:26Z</published>
<updated>2025-03-21T11:03:26Z</updated>
<title type="text">internal/sip: correctly format and write requests</title>
<link rel="alternate" type="text/html" href="commit/f62ba4580683b9231f5608a097aa281961f16c1b.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit f62ba4580683b9231f5608a097aa281961f16c1b
parent 52f2be3f00f9c63b286a9b49366dca4622ddc923
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri, 21 Mar 2025 22:03:26 +1100

internal/sip: correctly format and write requests

</content>
</entry>
<entry>
<id>52f2be3f00f9c63b286a9b49366dca4622ddc923</id>
<published>2025-03-11T23:29:01Z</published>
<updated>2025-03-11T23:29:01Z</updated>
<title type="text">internal/sip: initial little testing</title>
<link rel="alternate" type="text/html" href="commit/52f2be3f00f9c63b286a9b49366dca4622ddc923.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 52f2be3f00f9c63b286a9b49366dca4622ddc923
parent c29a1e336e2176394997df419f8e06635db3eefe
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Wed, 12 Mar 2025 10:29:01 +1100

internal/sip: initial little testing

</content>
</entry>
<entry>
<id>c29a1e336e2176394997df419f8e06635db3eefe</id>
<published>2024-12-31T06:23:49Z</published>
<updated>2025-01-27T07:18:27Z</updated>
<title type="text">Unpublish draft jxs package</title>
<link rel="alternate" type="text/html" href="commit/c29a1e336e2176394997df419f8e06635db3eefe.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit c29a1e336e2176394997df419f8e06635db3eefe
parent c5209d277a60973090abb0eaa9363428b111400f
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 31 Dec 2024 17:23:49 +1100

Unpublish draft jxs package

Not ready... if ever?

</content>
</entry>
<entry>
<id>c5209d277a60973090abb0eaa9363428b111400f</id>
<published>2025-01-19T10:54:29Z</published>
<updated>2025-01-19T10:58:13Z</updated>
<title type="text">mpegts: test for expected PCR base, extension values</title>
<link rel="alternate" type="text/html" href="commit/c5209d277a60973090abb0eaa9363428b111400f.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit c5209d277a60973090abb0eaa9363428b111400f
parent 889b534a511e17176284dc1662d4a4128445c1bd
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sun, 19 Jan 2025 21:54:29 +1100

mpegts: test for expected PCR base, extension values

Parsing the base and extension ticks of the PCR was actually
incorrect. Whilst we were consistently storing and decoding values,
they were incorrect values. This patch adds tests which concretely
exposed the bug spotted by @kevmo314. Thanks again!

</content>
</entry>
<entry>
<id>889b534a511e17176284dc1662d4a4128445c1bd</id>
<published>2025-01-15T16:29:53Z</published>
<updated>2025-01-19T10:51:33Z</updated>
<title type="text">fix incorrect pcr base calculation</title>
<link rel="alternate" type="text/html" href="commit/889b534a511e17176284dc1662d4a4128445c1bd.html" />
<author>
<name>Kevin Wang</name>
<email>kevmo314@gmail.com</email>
</author>
<content type="text">commit 889b534a511e17176284dc1662d4a4128445c1bd
parent a0d3d6fb41f760d18ebc49d3ff47c5a97954f90c
Author: Kevin Wang &lt;kevmo314@gmail.com&gt;
Date:   Wed, 15 Jan 2025 08:29:53 -0800

fix incorrect pcr base calculation

Fixes the base calculation by removing the 7 rightmost reserved and extension bits.
</content>
</entry>
<entry>
<id>a0d3d6fb41f760d18ebc49d3ff47c5a97954f90c</id>
<published>2024-12-22T12:10:29Z</published>
<updated>2024-12-22T12:13:27Z</updated>
<title type="text">wav: support format extension field</title>
<link rel="alternate" type="text/html" href="commit/a0d3d6fb41f760d18ebc49d3ff47c5a97954f90c.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit a0d3d6fb41f760d18ebc49d3ff47c5a97954f90c
parent d0a2114cd0f9dda0212b0195364e81fb5e69a68d
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sun, 22 Dec 2024 23:10:29 +1100

wav: support format extension field

It&#39;s an optional field, but aucat(1) from OpenBSD creates files with
this field populated so I feel like it may not be that obscure in the
wild.

</content>
</entry>
<entry>
<id>d0a2114cd0f9dda0212b0195364e81fb5e69a68d</id>
<published>2024-12-21T06:07:49Z</published>
<updated>2024-12-21T06:07:49Z</updated>
<title type="text">add package for WAVE files</title>
<link rel="alternate" type="text/html" href="commit/d0a2114cd0f9dda0212b0195364e81fb5e69a68d.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit d0a2114cd0f9dda0212b0195364e81fb5e69a68d
parent 74364bb7c33ecf3fdef8c8a361310c2f1992c1bd
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 21 Dec 2024 17:07:49 +1100

add package for WAVE files

</content>
</entry>
<entry>
<id>74364bb7c33ecf3fdef8c8a361310c2f1992c1bd</id>
<published>2024-09-12T20:41:42Z</published>
<updated>2024-11-29T09:33:13Z</updated>
<title type="text">m3u8: put hlsserve with all the other commands</title>
<link rel="alternate" type="text/html" href="commit/74364bb7c33ecf3fdef8c8a361310c2f1992c1bd.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 74364bb7c33ecf3fdef8c8a361310c2f1992c1bd
parent 15e217461acc59522f43002bbd5233d88d0ba10f
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri, 13 Sep 2024 06:41:42 +1000

m3u8: put hlsserve with all the other commands

</content>
</entry>
<entry>
<id>15e217461acc59522f43002bbd5233d88d0ba10f</id>
<published>2024-08-24T06:55:08Z</published>
<updated>2024-11-29T09:33:13Z</updated>
<title type="text">delete dummy ptp package</title>
<link rel="alternate" type="text/html" href="commit/15e217461acc59522f43002bbd5233d88d0ba10f.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 15e217461acc59522f43002bbd5233d88d0ba10f
parent 34d647b964d037705c244de67dc552c4ce4615ca
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 24 Aug 2024 16:55:08 +1000

delete dummy ptp package

We can create it when we want to create it. Think this was
accidentally added by me, sorry!

</content>
</entry>
<entry>
<id>34d647b964d037705c244de67dc552c4ce4615ca</id>
<published>2024-11-21T16:29:58Z</published>
<updated>2024-11-22T12:32:10Z</updated>
<title type="text">fix: play rate as decimal</title>
<link rel="alternate" type="text/html" href="commit/34d647b964d037705c244de67dc552c4ce4615ca.html" />
<author>
<name>Arthur D</name>
<email>a.dranchuk@setplex.com</email>
</author>
<content type="text">commit 34d647b964d037705c244de67dc552c4ce4615ca
parent b80fe72bf0cda6e47989801e6e86bb43a03bb2d7
Author: Arthur D &lt;a.dranchuk@setplex.com&gt;
Date:   Thu, 21 Nov 2024 19:29:58 +0300

fix: play rate as decimal

</content>
</entry>
<entry>
<id>b80fe72bf0cda6e47989801e6e86bb43a03bb2d7</id>
<published>2024-09-07T04:53:42Z</published>
<updated>2024-09-07T04:53:42Z</updated>
<title type="text">Advertise zero dependencies</title>
<link rel="alternate" type="text/html" href="commit/b80fe72bf0cda6e47989801e6e86bb43a03bb2d7.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit b80fe72bf0cda6e47989801e6e86bb43a03bb2d7
parent c09ddbced03b4d97e812871bcfe48b196390f3b3
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat,  7 Sep 2024 14:53:42 +1000

Advertise zero dependencies

Because it’s a distinguishing feature of the project!
</content>
</entry>
<entry>
<id>c09ddbced03b4d97e812871bcfe48b196390f3b3</id>
<published>2024-08-19T02:16:01Z</published>
<updated>2024-08-19T02:16:01Z</updated>
<title type="text">rtp: let test session only accept local connections</title>
<link rel="alternate" type="text/html" href="commit/c09ddbced03b4d97e812871bcfe48b196390f3b3.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit c09ddbced03b4d97e812871bcfe48b196390f3b3
parent 52483617f8dc2116b504a6a85274b3c44a119ecd
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Mon, 19 Aug 2024 12:16:01 +1000

rtp: let test session only accept local connections

</content>
</entry>
<entry>
<id>52483617f8dc2116b504a6a85274b3c44a119ecd</id>
<published>2024-08-17T01:28:33Z</published>
<updated>2024-08-17T01:29:41Z</updated>
<title type="text">scte35: support decoding private commands</title>
<link rel="alternate" type="text/html" href="commit/52483617f8dc2116b504a6a85274b3c44a119ecd.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 52483617f8dc2116b504a6a85274b3c44a119ecd
parent 3b1acc9102e2f96d3b40224dee1007a820c89675
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 17 Aug 2024 11:28:33 +1000

scte35: support decoding private commands

Resolves: https://github.com/untangledco/streaming/issues/29

</content>
</entry>
<entry>
<id>3b1acc9102e2f96d3b40224dee1007a820c89675</id>
<published>2024-08-14T10:37:06Z</published>
<updated>2024-08-17T01:29:41Z</updated>
<title type="text">rtp: finish header length documentation</title>
<link rel="alternate" type="text/html" href="commit/3b1acc9102e2f96d3b40224dee1007a820c89675.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 3b1acc9102e2f96d3b40224dee1007a820c89675
parent f7c6ae15d84416d1c6a4d34c1c5a35a35ecbb612
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Wed, 14 Aug 2024 20:37:06 +1000

rtp: finish header length documentation

</content>
</entry>
<entry>
<id>f7c6ae15d84416d1c6a4d34c1c5a35a35ecbb612</id>
<published>2024-08-17T01:06:12Z</published>
<updated>2024-08-17T01:06:12Z</updated>
<title type="text">pcap: export Encode, Decode functions</title>
<link rel="alternate" type="text/html" href="commit/f7c6ae15d84416d1c6a4d34c1c5a35a35ecbb612.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit f7c6ae15d84416d1c6a4d34c1c5a35a35ecbb612
parent cb9f53840ce84710f2da783c0f4efc3a96479ba2
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 17 Aug 2024 11:06:12 +1000

pcap: export Encode, Decode functions

Use Go&#39;s io.Reader and io.Writer so that we don&#39;t have to keep
everything in memory, and it works in a way that Go programmers are
familiar with.

</content>
</entry>
<entry>
<id>cb9f53840ce84710f2da783c0f4efc3a96479ba2</id>
<published>2024-08-17T00:41:03Z</published>
<updated>2024-08-17T00:41:03Z</updated>
<title type="text">mpegts: let callers handle packet length errors explicitly</title>
<link rel="alternate" type="text/html" href="commit/cb9f53840ce84710f2da783c0f4efc3a96479ba2.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit cb9f53840ce84710f2da783c0f4efc3a96479ba2
parent 7c79b0547941d5c8539ca8c8206cefdf0f4f74aa
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 17 Aug 2024 10:41:03 +1000

mpegts: let callers handle packet length errors explicitly

</content>
</entry>
<entry>
<id>7c79b0547941d5c8539ca8c8206cefdf0f4f74aa</id>
<published>2024-08-12T00:54:34Z</published>
<updated>2024-08-12T00:58:46Z</updated>
<title type="text">m3u8: clarify purpose of some sample playlists</title>
<link rel="alternate" type="text/html" href="commit/7c79b0547941d5c8539ca8c8206cefdf0f4f74aa.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 7c79b0547941d5c8539ca8c8206cefdf0f4f74aa
parent fa32a75741dba59c89d92757937ef9039129dea1
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Mon, 12 Aug 2024 10:54:34 +1000

m3u8: clarify purpose of some sample playlists

Big Buck Bunny is the classic test sample for a lot of video dev work.
tos.m3u8 is here because it is a valid playlist containing lots of
comments and empty lines. Unusual, but still a valid playlist; hoping
it will help catch bugs in our parser&#39;s handling of comments and
whitespace.

</content>
</entry>
<entry>
<id>fa32a75741dba59c89d92757937ef9039129dea1</id>
<published>2024-08-11T03:46:08Z</published>
<updated>2024-08-11T06:34:45Z</updated>
<title type="text">sdp: only apply TTL field to ipv4 connections</title>
<link rel="alternate" type="text/html" href="commit/fa32a75741dba59c89d92757937ef9039129dea1.html" />
<author>
<name>Jacob Hitchins</name>
<email>44385069+jacobhitchins@users.noreply.github.com</email>
</author>
<content type="text">commit fa32a75741dba59c89d92757937ef9039129dea1
parent 96a874b067dad9a5704171d9c63a5594b6d42e3d
Author: Jacob Hitchins &lt;44385069+jacobhitchins@users.noreply.github.com&gt;
Date:   Sun, 11 Aug 2024 13:46:08 +1000

sdp: only apply TTL field to ipv4 connections

As per section 5.7 of RFC 8866: &quot;IP6&quot; multicast does not use TTL
scoping, and hence the TTL value MUST NOT be present for &quot;IP6&quot;
multicast. Amends comment to clarify it only applies to IPv4 packets.

</content>
</entry>
<entry>
<id>96a874b067dad9a5704171d9c63a5594b6d42e3d</id>
<published>2024-08-10T08:56:32Z</published>
<updated>2024-08-10T08:56:32Z</updated>
<title type="text">sdp: resolve remaining validation, documentation TODOs</title>
<link rel="alternate" type="text/html" href="commit/96a874b067dad9a5704171d9c63a5594b6d42e3d.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 96a874b067dad9a5704171d9c63a5594b6d42e3d
parent 8d2c4bc42dfbbe01d8d7cfd968ca60c8048ae6f9
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 10 Aug 2024 18:56:32 +1000

sdp: resolve remaining validation, documentation TODOs

No real changes, just notes. Always encode a valid timestamp when
session start time is unset but an end time is set. Document the TTL
in ConnInfo is a specific property of multicast traffic. No need to
impose more structure on session Attributes when the data is pretty
free-form anyway (similar to http.Header). Safely round times in
session repeat schedules to ensure we never write invalid decimal
places.

</content>
</entry>
<entry>
<id>8d2c4bc42dfbbe01d8d7cfd968ca60c8048ae6f9</id>
<published>2024-08-10T07:28:12Z</published>
<updated>2024-08-10T07:28:12Z</updated>
<title type="text">rtp: correct string values for PCM audio payload types</title>
<link rel="alternate" type="text/html" href="commit/8d2c4bc42dfbbe01d8d7cfd968ca60c8048ae6f9.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 8d2c4bc42dfbbe01d8d7cfd968ca60c8048ae6f9
parent 2e4d2483483becc6c7c2bb0350b3693ad7382931
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 10 Aug 2024 17:28:12 +1000

rtp: correct string values for PCM audio payload types

</content>
</entry>
<entry>
<id>2e4d2483483becc6c7c2bb0350b3693ad7382931</id>
<published>2024-08-10T07:03:20Z</published>
<updated>2024-08-10T07:05:57Z</updated>
<title type="text">sdp: use a working live audio stream description for the example</title>
<link rel="alternate" type="text/html" href="commit/2e4d2483483becc6c7c2bb0350b3693ad7382931.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 2e4d2483483becc6c7c2bb0350b3693ad7382931
parent 2019fa0504b90a8b3609d4bb69731c916de2c272
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 10 Aug 2024 17:03:20 +1000

sdp: use a working live audio stream description for the example

</content>
</entry>
<entry>
<id>2019fa0504b90a8b3609d4bb69731c916de2c272</id>
<published>2024-08-10T06:46:36Z</published>
<updated>2024-08-10T06:46:36Z</updated>
<title type="text">sdp: parse IP addresses as netip.Addr</title>
<link rel="alternate" type="text/html" href="commit/2019fa0504b90a8b3609d4bb69731c916de2c272.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 2019fa0504b90a8b3609d4bb69731c916de2c272
parent 6c87f537549ca5125fbe7faa7cd4e9353e031e8f
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 10 Aug 2024 16:46:36 +1000

sdp: parse IP addresses as netip.Addr

Using Addr, we don&#39;t have to keep track of the address type ourselves.
We also get a guarantee that the values are actually valid IP
addresses.

</content>
</entry>
<entry>
<id>6c87f537549ca5125fbe7faa7cd4e9353e031e8f</id>
<published>2024-08-10T05:33:44Z</published>
<updated>2024-08-10T05:33:44Z</updated>
<title type="text">sdp: make the empty Origin Username useful</title>
<link rel="alternate" type="text/html" href="commit/6c87f537549ca5125fbe7faa7cd4e9353e031e8f.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 6c87f537549ca5125fbe7faa7cd4e9353e031e8f
parent e6908ad17804237bb7f0669edc99e86339a18d84
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 10 Aug 2024 15:33:44 +1000

sdp: make the empty Origin Username useful

One less thing for users to worry about, and we&#39;ll always encode a
valid value.

</content>
</entry>
<entry>
<id>e6908ad17804237bb7f0669edc99e86339a18d84</id>
<published>2024-08-09T10:33:55Z</published>
<updated>2024-08-09T10:33:55Z</updated>
<title type="text">pcap: support only current savefile version</title>
<link rel="alternate" type="text/html" href="commit/e6908ad17804237bb7f0669edc99e86339a18d84.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit e6908ad17804237bb7f0669edc99e86339a18d84
parent 48bf5f705fadc940d6218ec5051f86d002541015
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri,  9 Aug 2024 20:33:55 +1000

pcap: support only current savefile version

Reduces the stuff our package exposes. As a bonus we actually return
an error if somehow we try to decode a file we may not be able to
safely such as older, newer or invalid versions.

</content>
</entry>
<entry>
<id>48bf5f705fadc940d6218ec5051f86d002541015</id>
<published>2024-08-09T10:15:11Z</published>
<updated>2024-08-09T10:15:11Z</updated>
<title type="text">pcap: ignore unused global header fields</title>
<link rel="alternate" type="text/html" href="commit/48bf5f705fadc940d6218ec5051f86d002541015.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 48bf5f705fadc940d6218ec5051f86d002541015
parent b4fa198b81781fa6ca022e1777da1278858f0487
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri,  9 Aug 2024 20:15:11 +1000

pcap: ignore unused global header fields

From pcap-savefile(5) for both the fields:

&gt; SHOULD be filled with 0 by pcap file writers, and MUST be ignored by
&gt; pcap file readers.

</content>
</entry>
<entry>
<id>b4fa198b81781fa6ca022e1777da1278858f0487</id>
<published>2024-08-08T07:44:53Z</published>
<updated>2024-08-08T11:11:32Z</updated>
<title type="text">pcap: name testing data directory the usual name</title>
<link rel="alternate" type="text/html" href="commit/b4fa198b81781fa6ca022e1777da1278858f0487.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit b4fa198b81781fa6ca022e1777da1278858f0487
parent 98958a8b50e9398fe443c5fc1af6564227b4bfb8
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu,  8 Aug 2024 17:44:53 +1000

pcap: name testing data directory the usual name

While here name pcap file based on its actual contents.

</content>
</entry>
<entry>
<id>98958a8b50e9398fe443c5fc1af6564227b4bfb8</id>
<published>2024-08-08T07:42:23Z</published>
<updated>2024-08-08T07:42:23Z</updated>
<title type="text">pcap: test for expected values</title>
<link rel="alternate" type="text/html" href="commit/98958a8b50e9398fe443c5fc1af6564227b4bfb8.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 98958a8b50e9398fe443c5fc1af6564227b4bfb8
parent de0ee9781f1a9dc39f34bf012c85bb8ef6438179
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu,  8 Aug 2024 17:42:23 +1000

pcap: test for expected values

Checking just the number of elements in a slice, then eyeballing
printed output is prone to human error.

</content>
</entry>
<entry>
<id>de0ee9781f1a9dc39f34bf012c85bb8ef6438179</id>
<published>2024-08-04T10:00:54Z</published>
<updated>2024-08-04T10:00:54Z</updated>
<title type="text">pcap: rename parser.go to pcap</title>
<link rel="alternate" type="text/html" href="commit/de0ee9781f1a9dc39f34bf012c85bb8ef6438179.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit de0ee9781f1a9dc39f34bf012c85bb8ef6438179
parent ac0bbf61fe81b5d097be816471b5b166591691b4
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sun,  4 Aug 2024 20:00:54 +1000

pcap: rename parser.go to pcap

There&#39;s no mention of any parsers, and we only have one file
containing both encoding and decoding pcap data.

</content>
</entry>
<entry>
<id>ac0bbf61fe81b5d097be816471b5b166591691b4</id>
<published>2024-08-04T09:40:32Z</published>
<updated>2024-08-04T09:40:32Z</updated>
<title type="text">pcap: drop superfluous endianness payload encode</title>
<link rel="alternate" type="text/html" href="commit/ac0bbf61fe81b5d097be816471b5b166591691b4.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit ac0bbf61fe81b5d097be816471b5b166591691b4
parent 46154743acb8d0a4df8c59c9ddf2ebcab2258eec
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sun,  4 Aug 2024 19:40:32 +1000

pcap: drop superfluous endianness payload encode

Because it&#39;s just a slice of bytes, endianness does not apply.

</content>
</entry>
<entry>
<id>46154743acb8d0a4df8c59c9ddf2ebcab2258eec</id>
<published>2024-08-04T09:31:24Z</published>
<updated>2024-08-04T09:31:24Z</updated>
<title type="text">pcap: decode magic number once</title>
<link rel="alternate" type="text/html" href="commit/46154743acb8d0a4df8c59c9ddf2ebcab2258eec.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 46154743acb8d0a4df8c59c9ddf2ebcab2258eec
parent 3d44323d83ce2404e0b6a1369158950e7c7f777a
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sun,  4 Aug 2024 19:31:24 +1000

pcap: decode magic number once

Otherwise we&#39;re dealing with it twice when binary.Read does what we
need already.

</content>
</entry>
<entry>
<id>3d44323d83ce2404e0b6a1369158950e7c7f777a</id>
<published>2024-08-04T09:24:13Z</published>
<updated>2024-08-04T09:24:13Z</updated>
<title type="text">pcap: use data slice length to set length in header</title>
<link rel="alternate" type="text/html" href="commit/3d44323d83ce2404e0b6a1369158950e7c7f777a.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 3d44323d83ce2404e0b6a1369158950e7c7f777a
parent 2891cccd2f9ecaaa53bd3897d5962e96980324a1
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sun,  4 Aug 2024 19:24:13 +1000

pcap: use data slice length to set length in header

One less thing to keep in sync.

</content>
</entry>
<entry>
<id>2891cccd2f9ecaaa53bd3897d5962e96980324a1</id>
<published>2024-08-04T09:17:10Z</published>
<updated>2024-08-04T09:17:10Z</updated>
<title type="text">pcap: store packet timestamp as a time.Time</title>
<link rel="alternate" type="text/html" href="commit/2891cccd2f9ecaaa53bd3897d5962e96980324a1.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 2891cccd2f9ecaaa53bd3897d5962e96980324a1
parent 707e234349846c8aa9f5ace53518e88033627e31
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sun,  4 Aug 2024 19:17:10 +1000

pcap: store packet timestamp as a time.Time

Easier to work with.

</content>
</entry>
<entry>
<id>707e234349846c8aa9f5ace53518e88033627e31</id>
<published>2024-08-03T11:42:59Z</published>
<updated>2024-08-03T11:42:59Z</updated>
<title type="text">pcap: include which packet, context in decode errors</title>
<link rel="alternate" type="text/html" href="commit/707e234349846c8aa9f5ace53518e88033627e31.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 707e234349846c8aa9f5ace53518e88033627e31
parent 93fcb65d7636c870a60f92ae20415ae33bbc6ab0
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat,  3 Aug 2024 21:42:59 +1000

pcap: include which packet, context in decode errors

</content>
</entry>
<entry>
<id>93fcb65d7636c870a60f92ae20415ae33bbc6ab0</id>
<published>2024-08-03T11:37:15Z</published>
<updated>2024-08-03T11:37:15Z</updated>
<title type="text">pcap: unexport magic number</title>
<link rel="alternate" type="text/html" href="commit/93fcb65d7636c870a60f92ae20415ae33bbc6ab0.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 93fcb65d7636c870a60f92ae20415ae33bbc6ab0
parent 61bd1078782b91e755baeb63e85097ceab5aa2c4
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat,  3 Aug 2024 21:37:15 +1000

pcap: unexport magic number

This is an implementation detail that users don&#39;t need to know about.

</content>
</entry>
<entry>
<id>61bd1078782b91e755baeb63e85097ceab5aa2c4</id>
<published>2024-08-02T11:22:28Z</published>
<updated>2024-08-02T11:30:05Z</updated>
<title type="text">cmd/autx: correctly copy bytes out to the network</title>
<link rel="alternate" type="text/html" href="commit/61bd1078782b91e755baeb63e85097ceab5aa2c4.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 61bd1078782b91e755baeb63e85097ceab5aa2c4
parent 10c716ceab2f4541c398aa228af294a6eeff9edc
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri,  2 Aug 2024 21:22:28 +1000

cmd/autx: correctly copy bytes out to the network

We weren&#39;t really copying them before, we were just grabbing whatever
we had in our buffer which was constantly being overwritten!

This patch also correctly specifies and sets the payload size to
always fits a UDP packet to fit in the typical network MTU of 1400-ish
bytes. The sample rate and transmission interval are modified
accordingly with guidance from RFC 3551.

</content>
</entry>
<entry>
<id>10c716ceab2f4541c398aa228af294a6eeff9edc</id>
<published>2024-08-02T11:21:27Z</published>
<updated>2024-08-02T11:26:10Z</updated>
<title type="text">rtp: add both correct 16-bit linear PCM audio payload types</title>
<link rel="alternate" type="text/html" href="commit/10c716ceab2f4541c398aa228af294a6eeff9edc.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 10c716ceab2f4541c398aa228af294a6eeff9edc
parent b08e03a4cf127fa9a157c23a139c271cfcb1042a
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri,  2 Aug 2024 21:21:27 +1000

rtp: add both correct 16-bit linear PCM audio payload types

</content>
</entry>
<entry>
<id>b08e03a4cf127fa9a157c23a139c271cfcb1042a</id>
<published>2024-08-02T02:15:48Z</published>
<updated>2024-08-02T11:26:10Z</updated>
<title type="text">cmd/autx: fiddle with sample rates, buffers etc.</title>
<link rel="alternate" type="text/html" href="commit/b08e03a4cf127fa9a157c23a139c271cfcb1042a.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit b08e03a4cf127fa9a157c23a139c271cfcb1042a
parent b5f85f89121f617dfded624f2c2d3ee1ddd9a703
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri,  2 Aug 2024 12:15:48 +1000

cmd/autx: fiddle with sample rates, buffers etc.

</content>
</entry>
<entry>
<id>b5f85f89121f617dfded624f2c2d3ee1ddd9a703</id>
<published>2024-07-22T10:02:43Z</published>
<updated>2024-08-02T11:26:10Z</updated>
<title type="text">sdp: only test SDP duration parsing</title>
<link rel="alternate" type="text/html" href="commit/b5f85f89121f617dfded624f2c2d3ee1ddd9a703.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit b5f85f89121f617dfded624f2c2d3ee1ddd9a703
parent a510c142ef4a06df8f8af87a87b13a26d2e78b01
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Mon, 22 Jul 2024 20:02:43 +1000

sdp: only test SDP duration parsing

All other durations are handed over to time.ParseDuration, so we
can let the standard library take care of it. Since this part of
SDP is rarely - if ever - used in the wild, I&#39;d rather have less
code.

While here don&#39;t bother with subtests; letting it all run one after
the other is just as clear and less code. We&#39;re not doing parallel
testing either.

</content>
</entry>
<entry>
<id>a510c142ef4a06df8f8af87a87b13a26d2e78b01</id>
<published>2024-07-20T07:04:42Z</published>
<updated>2024-08-02T11:26:10Z</updated>
<title type="text">misc: add code review section</title>
<link rel="alternate" type="text/html" href="commit/a510c142ef4a06df8f8af87a87b13a26d2e78b01.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit a510c142ef4a06df8f8af87a87b13a26d2e78b01
parent e3efd43f94e6f502942e52c0a77474c1ab474962
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sat, 20 Jul 2024 17:04:42 +1000

misc: add code review section

Having some specific guides to point to I think makes it easier for
others to contribute.  It saves time if someone reads it before,
and it helps to stave off that &quot;taking it personally&quot; thing (which
I certainly get sometimes!) if they read it after submitting a
change too.

</content>
</entry>
<entry>
<id>e3efd43f94e6f502942e52c0a77474c1ab474962</id>
<published>2024-08-01T16:47:13Z</published>
<updated>2024-08-02T03:05:37Z</updated>
<title type="text">pcap: Added Encoding function to encode to .pcap</title>
<link rel="alternate" type="text/html" href="commit/e3efd43f94e6f502942e52c0a77474c1ab474962.html" />
<author>
<name>Joshua Callary</name>
<email>joshuacallary@miraitechnologies.com.au</email>
</author>
<content type="text">commit e3efd43f94e6f502942e52c0a77474c1ab474962
parent 97693535acd9ae096cffa7e635491aa97264c4a1
Author: Joshua Callary &lt;joshuacallary@miraitechnologies.com.au&gt;
Date:   Fri,  2 Aug 2024 02:47:13 +1000

pcap: Added Encoding function to encode to .pcap

</content>
</entry>
<entry>
<id>97693535acd9ae096cffa7e635491aa97264c4a1</id>
<published>2024-08-01T08:44:56Z</published>
<updated>2024-08-01T08:44:56Z</updated>
<title type="text">cmd/autx: import audio transmit program</title>
<link rel="alternate" type="text/html" href="commit/97693535acd9ae096cffa7e635491aa97264c4a1.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 97693535acd9ae096cffa7e635491aa97264c4a1
parent 5e057162d97599b2803923f2450d38d26c9833f0
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu,  1 Aug 2024 18:44:56 +1000

cmd/autx: import audio transmit program

This is a fun test of our RTP and SDP packages. From the docs:
&quot;Command autx transmits audio over the network via RTP.&quot;

</content>
</entry>
<entry>
<id>5e057162d97599b2803923f2450d38d26c9833f0</id>
<published>2024-07-28T10:37:58Z</published>
<updated>2024-07-28T10:37:58Z</updated>
<title type="text">misc: README typo</title>
<link rel="alternate" type="text/html" href="commit/5e057162d97599b2803923f2450d38d26c9833f0.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 5e057162d97599b2803923f2450d38d26c9833f0
parent 353e0a6999febb7e25924ca1e5f6893ea05ab3a9
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Sun, 28 Jul 2024 20:37:58 +1000

misc: README typo

</content>
</entry>
<entry>
<id>353e0a6999febb7e25924ca1e5f6893ea05ab3a9</id>
<published>2024-07-25T01:20:57Z</published>
<updated>2024-07-25T01:20:57Z</updated>
<title type="text">sdp: store m-line type as an int</title>
<link rel="alternate" type="text/html" href="commit/353e0a6999febb7e25924ca1e5f6893ea05ab3a9.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 353e0a6999febb7e25924ca1e5f6893ea05ab3a9
parent cb4ee3fe5170849010abd352c327f6a7eaa5441f
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 25 Jul 2024 11:20:57 +1000

sdp: store m-line type as an int

Media types have 6 valid values defined in the RFC, so using our own
int is a bit clearer for users of the package (including me!) and can
catch out normal typos like &quot;vvideo&quot; - or really any other invalid
string.

</content>
</entry>
<entry>
<id>cb4ee3fe5170849010abd352c327f6a7eaa5441f</id>
<published>2024-07-25T01:05:58Z</published>
<updated>2024-07-25T01:05:58Z</updated>
<title type="text">rtp: add L16 payload type</title>
<link rel="alternate" type="text/html" href="commit/cb4ee3fe5170849010abd352c327f6a7eaa5441f.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit cb4ee3fe5170849010abd352c327f6a7eaa5441f
parent 7d382dc385db1ecdfe2c37b21a782cba8f31cc23
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 25 Jul 2024 11:05:58 +1000

rtp: add L16 payload type

because uhhhmmm.... we&#39;ll do a demo with it

</content>
</entry>
<entry>
<id>7d382dc385db1ecdfe2c37b21a782cba8f31cc23</id>
<published>2024-07-23T05:55:47Z</published>
<updated>2024-07-23T05:55:47Z</updated>
<title type="text">cmcd: round request durations to nearest 100ms</title>
<link rel="alternate" type="text/html" href="commit/7d382dc385db1ecdfe2c37b21a782cba8f31cc23.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 7d382dc385db1ecdfe2c37b21a782cba8f31cc23
parent 9b7bc68411aa435947ce2b33c49c4e2cf2b8de88
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 23 Jul 2024 15:55:47 +1000

cmcd: round request durations to nearest 100ms

This is spec compliant.

</content>
</entry>
<entry>
<id>9b7bc68411aa435947ce2b33c49c4e2cf2b8de88</id>
<published>2024-07-23T05:35:40Z</published>
<updated>2024-07-23T05:35:40Z</updated>
<title type="text">rtp: detail TODOs properly</title>
<link rel="alternate" type="text/html" href="commit/9b7bc68411aa435947ce2b33c49c4e2cf2b8de88.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 9b7bc68411aa435947ce2b33c49c4e2cf2b8de88
parent 9d3606015d4f3d5a4972e92d41f5b92dd6469f20
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 23 Jul 2024 15:35:40 +1000

rtp: detail TODOs properly

This makes it easier to pick up the work some time in the future

</content>
</entry>
<entry>
<id>9d3606015d4f3d5a4972e92d41f5b92dd6469f20</id>
<published>2024-07-23T05:25:02Z</published>
<updated>2024-07-23T05:26:27Z</updated>
<title type="text">pcap: add package overview docs</title>
<link rel="alternate" type="text/html" href="commit/9d3606015d4f3d5a4972e92d41f5b92dd6469f20.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 9d3606015d4f3d5a4972e92d41f5b92dd6469f20
parent 5446ee9238512d767735753f9f435b42ae4df0cc
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 23 Jul 2024 15:25:02 +1000

pcap: add package overview docs

</content>
</entry>
<entry>
<id>5446ee9238512d767735753f9f435b42ae4df0cc</id>
<published>2024-07-19T23:08:31Z</published>
<updated>2024-07-19T23:09:21Z</updated>
<title type="text">pcap: implement decoding</title>
<link rel="alternate" type="text/html" href="commit/5446ee9238512d767735753f9f435b42ae4df0cc.html" />
<author>
<name>Joshua Callary</name>
<email>joshuacallary@miraitechnologies.com.au</email>
</author>
<content type="text">commit 5446ee9238512d767735753f9f435b42ae4df0cc
parent eaad0eae5c24e2cdf206d68dc8ee75d395ce944c
Author: Joshua Callary &lt;joshuacallary@miraitechnologies.com.au&gt;
Date:   Sat, 20 Jul 2024 09:08:31 +1000

pcap: implement decoding

</content>
</entry>
<entry>
<id>eaad0eae5c24e2cdf206d68dc8ee75d395ce944c</id>
<published>2024-07-19T10:19:23Z</published>
<updated>2024-07-19T10:19:23Z</updated>
<title type="text">keep mac os metadata files out of version control</title>
<link rel="alternate" type="text/html" href="commit/eaad0eae5c24e2cdf206d68dc8ee75d395ce944c.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit eaad0eae5c24e2cdf206d68dc8ee75d395ce944c
parent 375ab26456385a2a2b18b4ee34707997af2bfa0f
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri, 19 Jul 2024 20:19:23 +1000

keep mac os metadata files out of version control

</content>
</entry>
<entry>
<id>375ab26456385a2a2b18b4ee34707997af2bfa0f</id>
<published>2024-07-18T12:56:15Z</published>
<updated>2024-07-18T12:56:15Z</updated>
<title type="text">sdp: compatible timestamp type</title>
<link rel="alternate" type="text/html" href="commit/375ab26456385a2a2b18b4ee34707997af2bfa0f.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 375ab26456385a2a2b18b4ee34707997af2bfa0f
parent a5dbf39878dda31b7eb1688c39bd9c81b074e1b1
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 18 Jul 2024 22:56:15 +1000

sdp: compatible timestamp type

Sorry - typo

</content>
</entry>
<entry>
<id>a5dbf39878dda31b7eb1688c39bd9c81b074e1b1</id>
<published>2024-07-18T10:39:51Z</published>
<updated>2024-07-18T10:39:51Z</updated>
<title type="text">sdp: add simplest example usage of the package</title>
<link rel="alternate" type="text/html" href="commit/a5dbf39878dda31b7eb1688c39bd9c81b074e1b1.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit a5dbf39878dda31b7eb1688c39bd9c81b074e1b1
parent 8e53152fcfe39faafa76242ad58909c35ff29015
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 18 Jul 2024 20:39:51 +1000

sdp: add simplest example usage of the package

The only yucky thing here is we do not follow our own recommendation
to use sdp.Now(); it&#39;s non-deterministic so can&#39;t be set in the
examples &quot;Output:&quot; comment. But good enough for a first go!

</content>
</entry>
<entry>
<id>8e53152fcfe39faafa76242ad58909c35ff29015</id>
<published>2024-07-18T10:14:14Z</published>
<updated>2024-07-18T10:14:14Z</updated>
<title type="text">sdp: only parse, store valid values of ConnInfo.TTL</title>
<link rel="alternate" type="text/html" href="commit/8e53152fcfe39faafa76242ad58909c35ff29015.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 8e53152fcfe39faafa76242ad58909c35ff29015
parent 377bc8dd6920175544f1f1ef81610b27d3584385
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 18 Jul 2024 20:14:14 +1000

sdp: only parse, store valid values of ConnInfo.TTL

The spec says values must be between 0 and 255, so using a uint8
instead of an int better enforces the rule.

</content>
</entry>
<entry>
<id>377bc8dd6920175544f1f1ef81610b27d3584385</id>
<published>2024-07-18T10:09:03Z</published>
<updated>2024-07-18T10:09:03Z</updated>
<title type="text">sdp: document mandatory fields</title>
<link rel="alternate" type="text/html" href="commit/377bc8dd6920175544f1f1ef81610b27d3584385.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 377bc8dd6920175544f1f1ef81610b27d3584385
parent 100851ab2d0042150f9239111f470af0052011a0
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 18 Jul 2024 20:09:03 +1000

sdp: document mandatory fields

These fields must be set for every description and will be read by
every user of the package, so it&#39;s important to be clear about what
values they hold.

</content>
</entry>
<entry>
<id>100851ab2d0042150f9239111f470af0052011a0</id>
<published>2024-07-18T08:04:06Z</published>
<updated>2024-07-18T08:04:06Z</updated>
<title type="text">sdp: implement session, media encoding</title>
<link rel="alternate" type="text/html" href="commit/100851ab2d0042150f9239111f470af0052011a0.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 100851ab2d0042150f9239111f470af0052011a0
parent d8d776d33b9f56bdec169ba655a16551c6e33655
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 18 Jul 2024 18:04:06 +1000

sdp: implement session, media encoding

</content>
</entry>
<entry>
<id>d8d776d33b9f56bdec169ba655a16551c6e33655</id>
<published>2024-07-18T05:36:34Z</published>
<updated>2024-07-18T05:36:34Z</updated>
<title type="text">sdp: move time fields to their own file</title>
<link rel="alternate" type="text/html" href="commit/d8d776d33b9f56bdec169ba655a16551c6e33655.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit d8d776d33b9f56bdec169ba655a16551c6e33655
parent bf6b0ca8870d05e1193797e86fa34dd9ef779fb4
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Thu, 18 Jul 2024 15:36:34 +1000

sdp: move time fields to their own file

There&#39;s a relatively large amount of code just to manage SDP fields
which are not used often in real-world systems. Keeping that stuff in
its own file makes room for the important stuff.

</content>
</entry>
<entry>
<id>bf6b0ca8870d05e1193797e86fa34dd9ef779fb4</id>
<published>2024-07-17T11:55:45Z</published>
<updated>2024-07-17T11:55:45Z</updated>
<title type="text">add example &quot;ideal&quot; commit message</title>
<link rel="alternate" type="text/html" href="commit/bf6b0ca8870d05e1193797e86fa34dd9ef779fb4.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit bf6b0ca8870d05e1193797e86fa34dd9ef779fb4
parent 57fae4fd068fd5a29498f1c3e81c94772b6d48fa
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Wed, 17 Jul 2024 21:55:45 +1000

add example &quot;ideal&quot; commit message

not ideal, I dunno. But an example

</content>
</entry>
<entry>
<id>57fae4fd068fd5a29498f1c3e81c94772b6d48fa</id>
<published>2024-07-16T04:03:37Z</published>
<updated>2024-07-17T08:02:07Z</updated>
<title type="text">sdp: test invalid durations</title>
<link rel="alternate" type="text/html" href="commit/57fae4fd068fd5a29498f1c3e81c94772b6d48fa.html" />
<author>
<name>Steve Wills</name>
<email>steve@mouf.net</email>
</author>
<content type="text">commit 57fae4fd068fd5a29498f1c3e81c94772b6d48fa
parent d10472b3356f92c5d640ed1a09f243dd6721a0a7
Author: Steve Wills &lt;steve@mouf.net&gt;
Date:   Tue, 16 Jul 2024 00:03:37 -0400

sdp: test invalid durations

</content>
</entry>
<entry>
<id>d10472b3356f92c5d640ed1a09f243dd6721a0a7</id>
<published>2024-07-17T07:36:56Z</published>
<updated>2024-07-17T07:36:56Z</updated>
<title type="text">cmd/avhelp: initial sketch of a GUI to some packages we&#39;ve written</title>
<link rel="alternate" type="text/html" href="commit/d10472b3356f92c5d640ed1a09f243dd6721a0a7.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit d10472b3356f92c5d640ed1a09f243dd6721a0a7
parent a6df7e0a96d17f16d8bdd41dea688ef7f6d1a943
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Wed, 17 Jul 2024 17:36:56 +1000

cmd/avhelp: initial sketch of a GUI to some packages we&#39;ve written

</content>
</entry>
<entry>
<id>a6df7e0a96d17f16d8bdd41dea688ef7f6d1a943</id>
<published>2024-07-17T04:03:08Z</published>
<updated>2024-07-17T04:03:08Z</updated>
<title type="text">cmd/demo: finally an application?</title>
<link rel="alternate" type="text/html" href="commit/a6df7e0a96d17f16d8bdd41dea688ef7f6d1a943.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit a6df7e0a96d17f16d8bdd41dea688ef7f6d1a943
parent 60477083f6a072f03697146e9e4db0ab30f21949
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Wed, 17 Jul 2024 14:03:08 +1000

cmd/demo: finally an application?

</content>
</entry>
<entry>
<id>60477083f6a072f03697146e9e4db0ab30f21949</id>
<published>2024-07-16T06:24:41Z</published>
<updated>2024-07-16T06:24:41Z</updated>
<title type="text">sdp: document most important exported structures</title>
<link rel="alternate" type="text/html" href="commit/60477083f6a072f03697146e9e4db0ab30f21949.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 60477083f6a072f03697146e9e4db0ab30f21949
parent d1dd8e3025766be03521c488a2f65cdd1202e33b
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 16 Jul 2024 16:24:41 +1000

sdp: document most important exported structures

Not all fields are documented. Includes documentation for the trickier
time description fields.

</content>
</entry>
<entry>
<id>d1dd8e3025766be03521c488a2f65cdd1202e33b</id>
<published>2024-07-16T05:51:59Z</published>
<updated>2024-07-16T05:51:59Z</updated>
<title type="text">sdp: parse time zone adjustments</title>
<link rel="alternate" type="text/html" href="commit/d1dd8e3025766be03521c488a2f65cdd1202e33b.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit d1dd8e3025766be03521c488a2f65cdd1202e33b
parent b9fff5d7c191955ae61eb22983fdd23993d995f0
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 16 Jul 2024 15:51:59 +1000

sdp: parse time zone adjustments

That&#39;s all the fields in SDP handled!

</content>
</entry>
<entry>
<id>b9fff5d7c191955ae61eb22983fdd23993d995f0</id>
<published>2024-07-16T03:11:15Z</published>
<updated>2024-07-16T03:11:15Z</updated>
<title type="text">sdp: document Session.Time field</title>
<link rel="alternate" type="text/html" href="commit/b9fff5d7c191955ae61eb22983fdd23993d995f0.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit b9fff5d7c191955ae61eb22983fdd23993d995f0
parent f2462ddb1dad2764d71341d7cc259938f633d5d6
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 16 Jul 2024 13:11:15 +1000

sdp: document Session.Time field

Need this especially as an undocumented [2] array is a magic number.

</content>
</entry>
<entry>
<id>f2462ddb1dad2764d71341d7cc259938f633d5d6</id>
<published>2024-07-16T02:59:45Z</published>
<updated>2024-07-16T02:59:45Z</updated>
<title type="text">sdp: parse time description, repeat fields</title>
<link rel="alternate" type="text/html" href="commit/f2462ddb1dad2764d71341d7cc259938f633d5d6.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit f2462ddb1dad2764d71341d7cc259938f633d5d6
parent 92f8e13f32219d0d60cd4fa1ff2875298203f2fa
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Tue, 16 Jul 2024 12:59:45 +1000

sdp: parse time description, repeat fields

There are still some tests that should be written - see the TODOs. We
do not support parsing the timezone offset yet; for now we stop
parsing and return an error if we encounter it.

</content>
</entry>
<entry>
<id>92f8e13f32219d0d60cd4fa1ff2875298203f2fa</id>
<published>2024-07-15T08:39:09Z</published>
<updated>2024-07-15T08:39:09Z</updated>
<title type="text">add archive link to README</title>
<link rel="alternate" type="text/html" href="commit/92f8e13f32219d0d60cd4fa1ff2875298203f2fa.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 92f8e13f32219d0d60cd4fa1ff2875298203f2fa
parent 2ab9141c5d9c45cfd0d970599e07557539d56c1c
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Mon, 15 Jul 2024 18:39:09 +1000

add archive link to README

</content>
</entry>
<entry>
<id>2ab9141c5d9c45cfd0d970599e07557539d56c1c</id>
<published>2024-07-10T01:13:49Z</published>
<updated>2024-07-10T01:13:49Z</updated>
<title type="text">sdp: clearer TODO</title>
<link rel="alternate" type="text/html" href="commit/2ab9141c5d9c45cfd0d970599e07557539d56c1c.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 2ab9141c5d9c45cfd0d970599e07557539d56c1c
parent 439c6395b12db4f7329a94e472639a5b55169cf0
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Wed, 10 Jul 2024 11:13:49 +1000

sdp: clearer TODO

</content>
</entry>
<entry>
<id>439c6395b12db4f7329a94e472639a5b55169cf0</id>
<published>2024-07-05T06:51:16Z</published>
<updated>2024-07-05T06:51:16Z</updated>
<title type="text">sdp: manage parsing state in a parser struct</title>
<link rel="alternate" type="text/html" href="commit/439c6395b12db4f7329a94e472639a5b55169cf0.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit 439c6395b12db4f7329a94e472639a5b55169cf0
parent baedec4c102a6e02db8236e10c2733080f2ba3e2
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri,  5 Jul 2024 16:51:16 +1000

sdp: manage parsing state in a parser struct

The ReadSession and readSession functions were getting pretty long,
with break labels and even a goto. Managing the state in the parser
obviates that stuff. It also let us deduplicate much of the scanning
logic e.g. checking for empty/invalid lines.

</content>
</entry>
<entry>
<id>baedec4c102a6e02db8236e10c2733080f2ba3e2</id>
<published>2024-07-05T05:41:47Z</published>
<updated>2024-07-05T05:41:47Z</updated>
<title type="text">sdp: Parse option media description fields</title>
<link rel="alternate" type="text/html" href="commit/baedec4c102a6e02db8236e10c2733080f2ba3e2.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit baedec4c102a6e02db8236e10c2733080f2ba3e2
parent c2edff6142980892930d56b4d97f7aa4a0650f4f
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri,  5 Jul 2024 15:41:47 +1000

sdp: Parse option media description fields

The parsing logic has become pretty tricky! Tests pass, so refactoring
can be done pretty safely as long as we still get the Session struct
out that we expect.

</content>
</entry>
<entry>
<id>c2edff6142980892930d56b4d97f7aa4a0650f4f</id>
<published>2024-07-05T04:12:36Z</published>
<updated>2024-07-05T04:14:03Z</updated>
<title type="text">sdp: handle parsing connection info</title>
<link rel="alternate" type="text/html" href="commit/c2edff6142980892930d56b4d97f7aa4a0650f4f.html" />
<author>
<name>Oliver Lowe</name>
<email>o@olowe.co</email>
</author>
<content type="text">commit c2edff6142980892930d56b4d97f7aa4a0650f4f
parent 0da91c7d665bcbadeb67e22762a4bcb818e1ca4f
Author: Oliver Lowe &lt;o@olowe.co&gt;
Date:   Fri,  5 Jul 2024 14:12:36 +1000

sdp: handle parsing connection info

This is not stored in the Session struct yet. The parsing code feels
untidy, but we can come back to that later. We have tests so it should
be easy enough to refactor.

</content>
</entry>
</feed>
