{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":793940853,"defaultBranch":"main","name":"streaming","ownerLogin":"untangledco","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2024-04-30T06:50:36.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/106001770?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1714460524.0","currentOid":""},"activityList":{"items":[{"before":"c09ddbced03b4d97e812871bcfe48b196390f3b3","after":"b80fe72bf0cda6e47989801e6e86bb43a03bb2d7","ref":"refs/heads/main","pushedAt":"2024-09-07T04:53:42.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"Advertise zero dependencies\n\nBecause it’s a distinguishing feature of the project!","shortMessageHtmlLink":"Advertise zero dependencies"}},{"before":"f7c6ae15d84416d1c6a4d34c1c5a35a35ecbb612","after":"c09ddbced03b4d97e812871bcfe48b196390f3b3","ref":"refs/heads/main","pushedAt":"2024-08-19T02:48:34.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"rtp: let test session only accept local connections","shortMessageHtmlLink":"rtp: let test session only accept local connections"}},{"before":"cb9f53840ce84710f2da783c0f4efc3a96479ba2","after":"f7c6ae15d84416d1c6a4d34c1c5a35a35ecbb612","ref":"refs/heads/main","pushedAt":"2024-08-17T01:07:07.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"pcap: export Encode, Decode functions\n\nUse Go's io.Reader and io.Writer so that we don't have to keep\neverything in memory, and it works in a way that Go programmers are\nfamiliar with.","shortMessageHtmlLink":"pcap: export Encode, Decode functions"}},{"before":"7c79b0547941d5c8539ca8c8206cefdf0f4f74aa","after":"cb9f53840ce84710f2da783c0f4efc3a96479ba2","ref":"refs/heads/main","pushedAt":"2024-08-17T00:41:48.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"mpegts: let callers handle packet length errors explicitly","shortMessageHtmlLink":"mpegts: let callers handle packet length errors explicitly"}},{"before":"fa32a75741dba59c89d92757937ef9039129dea1","after":"7c79b0547941d5c8539ca8c8206cefdf0f4f74aa","ref":"refs/heads/main","pushedAt":"2024-08-12T00:58:51.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"m3u8: clarify purpose of some sample playlists\n\nBig Buck Bunny is the classic test sample for a lot of video dev work.\ntos.m3u8 is here because it is a valid playlist containing lots of\ncomments and empty lines. Unusual, but still a valid playlist; hoping\nit will help catch bugs in our parser's handling of comments and\nwhitespace.","shortMessageHtmlLink":"m3u8: clarify purpose of some sample playlists"}},{"before":"0a43df059f4cb2d4fd25c1b60f2c826f7c68346b","after":"fa32a75741dba59c89d92757937ef9039129dea1","ref":"refs/heads/main","pushedAt":"2024-08-11T06:35:08.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"sdp: only apply TTL field to ipv4 connections\n\nAs per section 5.7 of RFC 8866: \"IP6\" multicast does not use TTL\nscoping, and hence the TTL value MUST NOT be present for \"IP6\"\nmulticast. Amends comment to clarify it only applies to IPv4 packets.","shortMessageHtmlLink":"sdp: only apply TTL field to ipv4 connections"}},{"before":"96a874b067dad9a5704171d9c63a5594b6d42e3d","after":"0a43df059f4cb2d4fd25c1b60f2c826f7c68346b","ref":"refs/heads/main","pushedAt":"2024-08-11T06:33:37.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"sdp: only apply TTL field to ipv4 connections\n\nAs per section 5.7 of RFC 8866: \"IP6\" multicast does not use TTL scoping, and hence the TTL value MUST NOT be present for \"IP6\" multicast. Amends comment to clarify it only applies to IPv4 packets.","shortMessageHtmlLink":"sdp: only apply TTL field to ipv4 connections"}},{"before":"8d2c4bc42dfbbe01d8d7cfd968ca60c8048ae6f9","after":"96a874b067dad9a5704171d9c63a5594b6d42e3d","ref":"refs/heads/main","pushedAt":"2024-08-10T09:00:04.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"sdp: resolve remaining validation, documentation TODOs\n\nNo real changes, just notes. Always encode a valid timestamp when\nsession start time is unset but an end time is set. Document the TTL\nin ConnInfo is a specific property of multicast traffic. No need to\nimpose more structure on session Attributes when the data is pretty\nfree-form anyway (similar to http.Header). Safely round times in\nsession repeat schedules to ensure we never write invalid decimal\nplaces.","shortMessageHtmlLink":"sdp: resolve remaining validation, documentation TODOs"}},{"before":"6c87f537549ca5125fbe7faa7cd4e9353e031e8f","after":"8d2c4bc42dfbbe01d8d7cfd968ca60c8048ae6f9","ref":"refs/heads/main","pushedAt":"2024-08-10T07:29:11.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"rtp: correct string values for PCM audio payload types","shortMessageHtmlLink":"rtp: correct string values for PCM audio payload types"}},{"before":"e6908ad17804237bb7f0669edc99e86339a18d84","after":"6c87f537549ca5125fbe7faa7cd4e9353e031e8f","ref":"refs/heads/main","pushedAt":"2024-08-10T05:34:41.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"sdp: make the empty Origin Username useful\n\nOne less thing for users to worry about, and we'll always encode a\nvalid value.","shortMessageHtmlLink":"sdp: make the empty Origin Username useful"}},{"before":"b4fa198b81781fa6ca022e1777da1278858f0487","after":"e6908ad17804237bb7f0669edc99e86339a18d84","ref":"refs/heads/main","pushedAt":"2024-08-09T10:37:57.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"pcap: support only current savefile version\n\nReduces the stuff our package exposes. As a bonus we actually return\nan error if somehow we try to decode a file we may not be able to\nsafely such as older, newer or invalid versions.","shortMessageHtmlLink":"pcap: support only current savefile version"}},{"before":"fcea81b718bb25117fabbf6d158fe1701f2dc060","after":"b4fa198b81781fa6ca022e1777da1278858f0487","ref":"refs/heads/main","pushedAt":"2024-08-08T11:12:01.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"pcap: name testing data directory the usual name\n\nWhile here name pcap file based on its actual contents.","shortMessageHtmlLink":"pcap: name testing data directory the usual name"}},{"before":"de0ee9781f1a9dc39f34bf012c85bb8ef6438179","after":"fcea81b718bb25117fabbf6d158fe1701f2dc060","ref":"refs/heads/main","pushedAt":"2024-08-08T07:46:10.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"pcap: put test data in idiomatic testdata directory\n\nWhile here name pcap file based on its actual contents.","shortMessageHtmlLink":"pcap: put test data in idiomatic testdata directory"}},{"before":"ac0bbf61fe81b5d097be816471b5b166591691b4","after":"de0ee9781f1a9dc39f34bf012c85bb8ef6438179","ref":"refs/heads/main","pushedAt":"2024-08-04T10:02:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"pcap: rename parser.go to pcap\n\nThere's no mention of any parsers, and we only have one file\ncontaining both encoding and decoding pcap data.","shortMessageHtmlLink":"pcap: rename parser.go to pcap"}},{"before":"707e234349846c8aa9f5ace53518e88033627e31","after":"ac0bbf61fe81b5d097be816471b5b166591691b4","ref":"refs/heads/main","pushedAt":"2024-08-04T09:46:13.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"pcap: drop superfluous endianness payload encode\n\nBecause it's just a slice of bytes, endianness does not apply.","shortMessageHtmlLink":"pcap: drop superfluous endianness payload encode"}},{"before":"61bd1078782b91e755baeb63e85097ceab5aa2c4","after":"707e234349846c8aa9f5ace53518e88033627e31","ref":"refs/heads/main","pushedAt":"2024-08-03T11:45:04.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"pcap: include which packet, context in decode errors","shortMessageHtmlLink":"pcap: include which packet, context in decode errors"}},{"before":"6e4c05bac228db41752f6a87097b405ff9ad294b","after":"61bd1078782b91e755baeb63e85097ceab5aa2c4","ref":"refs/heads/main","pushedAt":"2024-08-02T11:30:19.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"cmd/autx: correctly copy bytes out to the network\n\nWe weren't really copying them before, we were just grabbing whatever\nwe had in our buffer which was constantly being overwritten!\n\nThis patch also correctly specifies and sets the payload size to\nalways fits a UDP packet to fit in the typical network MTU of 1400-ish\nbytes. The sample rate and transmission interval are modified\naccordingly with guidance from RFC 3551.","shortMessageHtmlLink":"cmd/autx: correctly copy bytes out to the network"}},{"before":"e3efd43f94e6f502942e52c0a77474c1ab474962","after":"6e4c05bac228db41752f6a87097b405ff9ad294b","ref":"refs/heads/main","pushedAt":"2024-08-02T11:26:18.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"cmd/autx: correctly copy bytes out to the network\n\nWe weren't really copying them before, we were just grabbing whatever\nwe had in our buffer which was constantly being overwritten!\n\nThis patch also correctly specifies and sets the payload size to\nalways fits a UDP packet to fit in the typical network MTU of 1400-ish\nbytes. The sample rate and transmission interval are modified\naccordingly with guidance from RFC 3551.","shortMessageHtmlLink":"cmd/autx: correctly copy bytes out to the network"}},{"before":"97693535acd9ae096cffa7e635491aa97264c4a1","after":"e3efd43f94e6f502942e52c0a77474c1ab474962","ref":"refs/heads/main","pushedAt":"2024-08-02T03:06:31.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"pcap: Added Encoding function to encode to .pcap","shortMessageHtmlLink":"pcap: Added Encoding function to encode to .pcap"}},{"before":"5e057162d97599b2803923f2450d38d26c9833f0","after":"97693535acd9ae096cffa7e635491aa97264c4a1","ref":"refs/heads/main","pushedAt":"2024-08-01T08:45:39.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"cmd/autx: import audio transmit program\n\nThis is a fun test of our RTP and SDP packages. From the docs:\n\"Command autx transmits audio over the network via RTP.\"","shortMessageHtmlLink":"cmd/autx: import audio transmit program"}},{"before":"353e0a6999febb7e25924ca1e5f6893ea05ab3a9","after":"5e057162d97599b2803923f2450d38d26c9833f0","ref":"refs/heads/main","pushedAt":"2024-07-28T10:38:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"misc: README typo","shortMessageHtmlLink":"misc: README typo"}},{"before":"7d382dc385db1ecdfe2c37b21a782cba8f31cc23","after":"353e0a6999febb7e25924ca1e5f6893ea05ab3a9","ref":"refs/heads/main","pushedAt":"2024-07-25T01:27:32.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"sdp: store m-line type as an int\n\nMedia types have 6 valid values defined in the RFC, so using our own\nint is a bit clearer for users of the package (including me!) and can\ncatch out normal typos like \"vvideo\" - or really any other invalid\nstring.","shortMessageHtmlLink":"sdp: store m-line type as an int"}},{"before":"9d3606015d4f3d5a4972e92d41f5b92dd6469f20","after":"7d382dc385db1ecdfe2c37b21a782cba8f31cc23","ref":"refs/heads/main","pushedAt":"2024-07-23T05:56:46.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"cmcd: round request durations to nearest 100ms\n\nThis is spec compliant.","shortMessageHtmlLink":"cmcd: round request durations to nearest 100ms"}},{"before":"5446ee9238512d767735753f9f435b42ae4df0cc","after":"9d3606015d4f3d5a4972e92d41f5b92dd6469f20","ref":"refs/heads/main","pushedAt":"2024-07-23T05:30:04.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"pcap: add package overview docs","shortMessageHtmlLink":"pcap: add package overview docs"}},{"before":"eaad0eae5c24e2cdf206d68dc8ee75d395ce944c","after":"5446ee9238512d767735753f9f435b42ae4df0cc","ref":"refs/heads/main","pushedAt":"2024-07-19T23:38:08.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"pcap: implement decoding","shortMessageHtmlLink":"pcap: implement decoding"}},{"before":"a5dbf39878dda31b7eb1688c39bd9c81b074e1b1","after":"eaad0eae5c24e2cdf206d68dc8ee75d395ce944c","ref":"refs/heads/main","pushedAt":"2024-07-19T10:19:48.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"keep mac os metadata files out of version control","shortMessageHtmlLink":"keep mac os metadata files out of version control"}},{"before":"8e53152fcfe39faafa76242ad58909c35ff29015","after":"a5dbf39878dda31b7eb1688c39bd9c81b074e1b1","ref":"refs/heads/main","pushedAt":"2024-07-18T10:41:51.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"sdp: add simplest example usage of the package\n\nThe only yucky thing here is we do not follow our own recommendation\nto use sdp.Now(); it's non-deterministic so can't be set in the\nexamples \"Output:\" comment. But good enough for a first go!","shortMessageHtmlLink":"sdp: add simplest example usage of the package"}},{"before":"100851ab2d0042150f9239111f470af0052011a0","after":"8e53152fcfe39faafa76242ad58909c35ff29015","ref":"refs/heads/main","pushedAt":"2024-07-18T10:15:18.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"sdp: only parse, store valid values of ConnInfo.TTL\n\nThe spec says values must be between 0 and 255, so using a uint8\ninstead of an int better enforces the rule.","shortMessageHtmlLink":"sdp: only parse, store valid values of ConnInfo.TTL"}},{"before":"bf6b0ca8870d05e1193797e86fa34dd9ef779fb4","after":"100851ab2d0042150f9239111f470af0052011a0","ref":"refs/heads/main","pushedAt":"2024-07-18T08:04:39.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"sdp: implement session, media encoding","shortMessageHtmlLink":"sdp: implement session, media encoding"}},{"before":"57fae4fd068fd5a29498f1c3e81c94772b6d48fa","after":"bf6b0ca8870d05e1193797e86fa34dd9ef779fb4","ref":"refs/heads/main","pushedAt":"2024-07-17T11:56:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"ollytom","name":"Oliver Lowe","path":"/ollytom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/17470471?s=80&v=4"},"commit":{"message":"add example \"ideal\" commit message\n\nnot ideal, I dunno. But an example","shortMessageHtmlLink":"add example \"ideal\" commit message"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0wN1QwNDo1Mzo0Mi4wMDAwMDBazwAAAASvfFUF","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNy0xN1QxMTo1NjoxMy4wMDAwMDBazwAAAASByDYG"}},"title":"Activity · untangledco/streaming"}