[{"id":"36921731522","type":"IssueCommentEvent","actor":{"id":1180334,"login":"stefhak","display_login":"stefhak","gravatar_id":"","url":"https://api.github.com/users/stefhak","avatar_url":"https://avatars.githubusercontent.com/u/1180334?"},"repo":{"id":143313599,"name":"w3c/webrtc-nv-use-cases","url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases/issues/129","repository_url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases","labels_url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases/issues/129/labels{/name}","comments_url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases/issues/129/comments","events_url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases/issues/129/events","html_url":"https://github.com/w3c/webrtc-nv-use-cases/pull/129","id":2042999588,"node_id":"PR_kwDOCIrKv85iEkKv","number":129,"title":"Section 3.2.1: Add N49 - video decoding recovery after packet loss","user":{"login":"xingri","id":1542365,"node_id":"MDQ6VXNlcjE1NDIzNjU=","avatar_url":"https://avatars.githubusercontent.com/u/1542365?v=4","gravatar_id":"","url":"https://api.github.com/users/xingri","html_url":"https://github.com/xingri","followers_url":"https://api.github.com/users/xingri/followers","following_url":"https://api.github.com/users/xingri/following{/other_user}","gists_url":"https://api.github.com/users/xingri/gists{/gist_id}","starred_url":"https://api.github.com/users/xingri/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xingri/subscriptions","organizations_url":"https://api.github.com/users/xingri/orgs","repos_url":"https://api.github.com/users/xingri/repos","events_url":"https://api.github.com/users/xingri/events{/privacy}","received_events_url":"https://api.github.com/users/xingri/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":14,"created_at":"2023-12-15T06:43:12Z","updated_at":"2024-03-27T08:51:05Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases/pulls/129","html_url":"https://github.com/w3c/webrtc-nv-use-cases/pull/129","diff_url":"https://github.com/w3c/webrtc-nv-use-cases/pull/129.diff","patch_url":"https://github.com/w3c/webrtc-nv-use-cases/pull/129.patch","merged_at":null},"body":"Partial fixes for #103\n\n\n\n***\nPreview | Diff","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases/issues/129/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases/issues/129/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases/issues/comments/2022233946","html_url":"https://github.com/w3c/webrtc-nv-use-cases/pull/129#issuecomment-2022233946","issue_url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases/issues/129","id":2022233946,"node_id":"IC_kwDOCIrKv854iNda","user":{"login":"stefhak","id":1180334,"node_id":"MDQ6VXNlcjExODAzMzQ=","avatar_url":"https://avatars.githubusercontent.com/u/1180334?v=4","gravatar_id":"","url":"https://api.github.com/users/stefhak","html_url":"https://github.com/stefhak","followers_url":"https://api.github.com/users/stefhak/followers","following_url":"https://api.github.com/users/stefhak/following{/other_user}","gists_url":"https://api.github.com/users/stefhak/gists{/gist_id}","starred_url":"https://api.github.com/users/stefhak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefhak/subscriptions","organizations_url":"https://api.github.com/users/stefhak/orgs","repos_url":"https://api.github.com/users/stefhak/repos","events_url":"https://api.github.com/users/stefhak/events{/privacy}","received_events_url":"https://api.github.com/users/stefhak/received_events","type":"User","site_admin":false},"created_at":"2024-03-27T08:51:05Z","updated_at":"2024-03-27T08:51:05Z","author_association":"CONTRIBUTOR","body":"The way I see it is:\r\na) We have an agreed sub-use case \"Game streaming\" in the \"Low latency streaming\" use case of the document \"WebRTC Extended Use Cases\"\r\nb) Current providers of game streaming that are using WebRTC have determined that continuing to decode after a frame loss (event though no key frame has arrived) improves the gamer's experience\r\nSo to me it makes total sense to, as it can be derived from this agreed (sub-)use case, to add a requirement phrased something like \"The application must be able to control video decoding to continue even after a frame-loss without waiting for a key frame.\".\r\n\r\nExactly how to meet that requirement is a later question. Perhaps the approach pointed out by @aboba in https://github.com/w3c/webrtc-nv-use-cases/pull/129#issuecomment-2021621725 is a good one, and in one previous meeting it was pointed out that modifying libwebrtc in to allow decoding to continue is pretty simple, but as said how to meet the requirement is a later question IMHO.","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases/issues/comments/2022233946/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-03-27T08:51:06Z","org":{"id":379216,"login":"w3c","gravatar_id":"","url":"https://api.github.com/orgs/w3c","avatar_url":"https://avatars.githubusercontent.com/u/379216?"}},{"id":"36673757636","type":"IssuesEvent","actor":{"id":1180334,"login":"stefhak","display_login":"stefhak","gravatar_id":"","url":"https://api.github.com/users/stefhak","avatar_url":"https://avatars.githubusercontent.com/u/1180334?"},"repo":{"id":202366095,"name":"google/android-emulator-container-scripts","url":"https://api.github.com/repos/google/android-emulator-container-scripts"},"payload":{"action":"opened","issue":{"url":"https://api.github.com/repos/google/android-emulator-container-scripts/issues/372","repository_url":"https://api.github.com/repos/google/android-emulator-container-scripts","labels_url":"https://api.github.com/repos/google/android-emulator-container-scripts/issues/372/labels{/name}","comments_url":"https://api.github.com/repos/google/android-emulator-container-scripts/issues/372/comments","events_url":"https://api.github.com/repos/google/android-emulator-container-scripts/issues/372/events","html_url":"https://github.com/google/android-emulator-container-scripts/issues/372","id":2194288679,"node_id":"I_kwDODA_cj86CyjAn","number":372,"title":"Why is not newer emulator versions covered","user":{"login":"stefhak","id":1180334,"node_id":"MDQ6VXNlcjExODAzMzQ=","avatar_url":"https://avatars.githubusercontent.com/u/1180334?v=4","gravatar_id":"","url":"https://api.github.com/users/stefhak","html_url":"https://github.com/stefhak","followers_url":"https://api.github.com/users/stefhak/followers","following_url":"https://api.github.com/users/stefhak/following{/other_user}","gists_url":"https://api.github.com/users/stefhak/gists{/gist_id}","starred_url":"https://api.github.com/users/stefhak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefhak/subscriptions","organizations_url":"https://api.github.com/users/stefhak/orgs","repos_url":"https://api.github.com/users/stefhak/repos","events_url":"https://api.github.com/users/stefhak/events{/privacy}","received_events_url":"https://api.github.com/users/stefhak/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-03-19T08:03:19Z","updated_at":"2024-03-19T08:03:19Z","closed_at":null,"author_association":"NONE","active_lock_reason":null,"body":"The latest image listed in [https://github.com/google/android-emulator-container-scripts/blob/master/REGISTRY.MD](https://github.com/google/android-emulator-container-scripts/blob/master/REGISTRY.MD) is version 30. Why are not later versions included?\r\n\r\nAlso, [https://source.android.com/docs/automotive/start/avd/cloud_emulator](https://source.android.com/docs/automotive/start/avd/cloud_emulator) talk about a seprate goldfish-webrtc-bridge, but to my understanding there is no such thing from version 33.","reactions":{"url":"https://api.github.com/repos/google/android-emulator-container-scripts/issues/372/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/google/android-emulator-container-scripts/issues/372/timeline","performed_via_github_app":null,"state_reason":null}},"public":true,"created_at":"2024-03-19T08:03:20Z","org":{"id":1342004,"login":"google","gravatar_id":"","url":"https://api.github.com/orgs/google","avatar_url":"https://avatars.githubusercontent.com/u/1342004?"}},{"id":"35824334660","type":"IssueCommentEvent","actor":{"id":1180334,"login":"stefhak","display_login":"stefhak","gravatar_id":"","url":"https://api.github.com/users/stefhak","avatar_url":"https://avatars.githubusercontent.com/u/1180334?"},"repo":{"id":23384500,"name":"w3c/webrtc-pc","url":"https://api.github.com/repos/w3c/webrtc-pc"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2938","repository_url":"https://api.github.com/repos/w3c/webrtc-pc","labels_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2938/labels{/name}","comments_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2938/comments","events_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2938/events","html_url":"https://github.com/w3c/webrtc-pc/issues/2938","id":2131862989,"node_id":"I_kwDOAWTRtM5_EaXN","number":2938,"title":"If a preferred codec is filtered out, does it still get assigned a PT?","user":{"login":"henbos","id":11347890,"node_id":"MDQ6VXNlcjExMzQ3ODkw","avatar_url":"https://avatars.githubusercontent.com/u/11347890?v=4","gravatar_id":"","url":"https://api.github.com/users/henbos","html_url":"https://github.com/henbos","followers_url":"https://api.github.com/users/henbos/followers","following_url":"https://api.github.com/users/henbos/following{/other_user}","gists_url":"https://api.github.com/users/henbos/gists{/gist_id}","starred_url":"https://api.github.com/users/henbos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henbos/subscriptions","organizations_url":"https://api.github.com/users/henbos/orgs","repos_url":"https://api.github.com/users/henbos/repos","events_url":"https://api.github.com/users/henbos/events{/privacy}","received_events_url":"https://api.github.com/users/henbos/received_events","type":"User","site_admin":false},"labels":[{"id":6392221275,"node_id":"LA_kwDOAWTRtM8AAAABfQGOWw","url":"https://api.github.com/repos/w3c/webrtc-pc/labels/Discuss%20at%20next%20meeting","name":"Discuss at next meeting","color":"1d76db","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":12,"created_at":"2024-02-13T09:26:15Z","updated_at":"2024-02-20T08:54:47Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"Use case: I want to signal in the SDP that I support sending X, but my transceiver is `sendrecv`.\r\n\r\nX is filtered out from the preference list at createOffer, so it's not in the `m=video` line. But should it be in the `a=rtpmap` list?\r\n\r\nArguments for:\r\n- It's useful and avoids having to signal things outside SDP.\r\n\r\nArgument against:\r\n- [JSEP](https://www.rfc-editor.org/rfc/rfc8829.html#section-5.2.1): \"media formats MUST be generated in the corresponding order and MUST exclude any codecs not present in the codec preferences\"","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2938/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2938/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/comments/1953743853","html_url":"https://github.com/w3c/webrtc-pc/issues/2938#issuecomment-1953743853","issue_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2938","id":1953743853,"node_id":"IC_kwDOAWTRtM50c8Pt","user":{"login":"stefhak","id":1180334,"node_id":"MDQ6VXNlcjExODAzMzQ=","avatar_url":"https://avatars.githubusercontent.com/u/1180334?v=4","gravatar_id":"","url":"https://api.github.com/users/stefhak","html_url":"https://github.com/stefhak","followers_url":"https://api.github.com/users/stefhak/followers","following_url":"https://api.github.com/users/stefhak/following{/other_user}","gists_url":"https://api.github.com/users/stefhak/gists{/gist_id}","starred_url":"https://api.github.com/users/stefhak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefhak/subscriptions","organizations_url":"https://api.github.com/users/stefhak/orgs","repos_url":"https://api.github.com/users/stefhak/repos","events_url":"https://api.github.com/users/stefhak/events{/privacy}","received_events_url":"https://api.github.com/users/stefhak/received_events","type":"User","site_admin":false},"created_at":"2024-02-20T08:54:46Z","updated_at":"2024-02-20T08:54:46Z","author_association":"CONTRIBUTOR","body":"I agree to your conclusion @alvestrand and like the proposed note. Likely there should be some reference to an SDP RFC as well, but that's just a detail.","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/comments/1953743853/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-02-20T08:54:47Z","org":{"id":379216,"login":"w3c","gravatar_id":"","url":"https://api.github.com/orgs/w3c","avatar_url":"https://avatars.githubusercontent.com/u/379216?"}},{"id":"34930431618","type":"IssuesEvent","actor":{"id":1180334,"login":"stefhak","display_login":"stefhak","gravatar_id":"","url":"https://api.github.com/users/stefhak","avatar_url":"https://avatars.githubusercontent.com/u/1180334?"},"repo":{"id":213330334,"name":"w3c/webrtc-extensions","url":"https://api.github.com/repos/w3c/webrtc-extensions"},"payload":{"action":"opened","issue":{"url":"https://api.github.com/repos/w3c/webrtc-extensions/issues/195","repository_url":"https://api.github.com/repos/w3c/webrtc-extensions","labels_url":"https://api.github.com/repos/w3c/webrtc-extensions/issues/195/labels{/name}","comments_url":"https://api.github.com/repos/w3c/webrtc-extensions/issues/195/comments","events_url":"https://api.github.com/repos/w3c/webrtc-extensions/issues/195/events","html_url":"https://github.com/w3c/webrtc-extensions/issues/195","id":2088334943,"node_id":"I_kwDODLcpns58eXZf","number":195,"title":"How is RTCRtpCodec codec used?","user":{"login":"stefhak","id":1180334,"node_id":"MDQ6VXNlcjExODAzMzQ=","avatar_url":"https://avatars.githubusercontent.com/u/1180334?v=4","gravatar_id":"","url":"https://api.github.com/users/stefhak","html_url":"https://github.com/stefhak","followers_url":"https://api.github.com/users/stefhak/followers","following_url":"https://api.github.com/users/stefhak/following{/other_user}","gists_url":"https://api.github.com/users/stefhak/gists{/gist_id}","starred_url":"https://api.github.com/users/stefhak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefhak/subscriptions","organizations_url":"https://api.github.com/users/stefhak/orgs","repos_url":"https://api.github.com/users/stefhak/repos","events_url":"https://api.github.com/users/stefhak/events{/privacy}","received_events_url":"https://api.github.com/users/stefhak/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2024-01-18T13:51:28Z","updated_at":"2024-01-18T13:51:28Z","closed_at":null,"author_association":"NONE","active_lock_reason":null,"body":"Looking at https://w3c.github.io/webrtc-extensions/#rtcrtpencodingparameters, a new parameter \"codec\" is added. However, it is not used in any of the algorithms in section 7 (parameters.codec**s** is used in 7.2.1, presumably that refers to codecs in https://w3c.github.io/webrtc-pc/#rtcrtpparameters?).","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-extensions/issues/195/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/w3c/webrtc-extensions/issues/195/timeline","performed_via_github_app":null,"state_reason":null}},"public":true,"created_at":"2024-01-18T13:51:29Z","org":{"id":379216,"login":"w3c","gravatar_id":"","url":"https://api.github.com/orgs/w3c","avatar_url":"https://avatars.githubusercontent.com/u/379216?"}},{"id":"34929622727","type":"ForkEvent","actor":{"id":1180334,"login":"stefhak","display_login":"stefhak","gravatar_id":"","url":"https://api.github.com/users/stefhak","avatar_url":"https://avatars.githubusercontent.com/u/1180334?"},"repo":{"id":23384500,"name":"w3c/webrtc-pc","url":"https://api.github.com/repos/w3c/webrtc-pc"},"payload":{"forkee":{"id":745015338,"node_id":"R_kgDOLGgIKg","name":"webrtc-pc","full_name":"stefhak/webrtc-pc","private":false,"owner":{"login":"stefhak","id":1180334,"node_id":"MDQ6VXNlcjExODAzMzQ=","avatar_url":"https://avatars.githubusercontent.com/u/1180334?v=4","gravatar_id":"","url":"https://api.github.com/users/stefhak","html_url":"https://github.com/stefhak","followers_url":"https://api.github.com/users/stefhak/followers","following_url":"https://api.github.com/users/stefhak/following{/other_user}","gists_url":"https://api.github.com/users/stefhak/gists{/gist_id}","starred_url":"https://api.github.com/users/stefhak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefhak/subscriptions","organizations_url":"https://api.github.com/users/stefhak/orgs","repos_url":"https://api.github.com/users/stefhak/repos","events_url":"https://api.github.com/users/stefhak/events{/privacy}","received_events_url":"https://api.github.com/users/stefhak/received_events","type":"User","site_admin":false},"html_url":"https://github.com/stefhak/webrtc-pc","description":"WebRTC 1.0 API","fork":true,"url":"https://api.github.com/repos/stefhak/webrtc-pc","forks_url":"https://api.github.com/repos/stefhak/webrtc-pc/forks","keys_url":"https://api.github.com/repos/stefhak/webrtc-pc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stefhak/webrtc-pc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stefhak/webrtc-pc/teams","hooks_url":"https://api.github.com/repos/stefhak/webrtc-pc/hooks","issue_events_url":"https://api.github.com/repos/stefhak/webrtc-pc/issues/events{/number}","events_url":"https://api.github.com/repos/stefhak/webrtc-pc/events","assignees_url":"https://api.github.com/repos/stefhak/webrtc-pc/assignees{/user}","branches_url":"https://api.github.com/repos/stefhak/webrtc-pc/branches{/branch}","tags_url":"https://api.github.com/repos/stefhak/webrtc-pc/tags","blobs_url":"https://api.github.com/repos/stefhak/webrtc-pc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stefhak/webrtc-pc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stefhak/webrtc-pc/git/refs{/sha}","trees_url":"https://api.github.com/repos/stefhak/webrtc-pc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stefhak/webrtc-pc/statuses/{sha}","languages_url":"https://api.github.com/repos/stefhak/webrtc-pc/languages","stargazers_url":"https://api.github.com/repos/stefhak/webrtc-pc/stargazers","contributors_url":"https://api.github.com/repos/stefhak/webrtc-pc/contributors","subscribers_url":"https://api.github.com/repos/stefhak/webrtc-pc/subscribers","subscription_url":"https://api.github.com/repos/stefhak/webrtc-pc/subscription","commits_url":"https://api.github.com/repos/stefhak/webrtc-pc/commits{/sha}","git_commits_url":"https://api.github.com/repos/stefhak/webrtc-pc/git/commits{/sha}","comments_url":"https://api.github.com/repos/stefhak/webrtc-pc/comments{/number}","issue_comment_url":"https://api.github.com/repos/stefhak/webrtc-pc/issues/comments{/number}","contents_url":"https://api.github.com/repos/stefhak/webrtc-pc/contents/{+path}","compare_url":"https://api.github.com/repos/stefhak/webrtc-pc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stefhak/webrtc-pc/merges","archive_url":"https://api.github.com/repos/stefhak/webrtc-pc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stefhak/webrtc-pc/downloads","issues_url":"https://api.github.com/repos/stefhak/webrtc-pc/issues{/number}","pulls_url":"https://api.github.com/repos/stefhak/webrtc-pc/pulls{/number}","milestones_url":"https://api.github.com/repos/stefhak/webrtc-pc/milestones{/number}","notifications_url":"https://api.github.com/repos/stefhak/webrtc-pc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stefhak/webrtc-pc/labels{/name}","releases_url":"https://api.github.com/repos/stefhak/webrtc-pc/releases{/id}","deployments_url":"https://api.github.com/repos/stefhak/webrtc-pc/deployments","created_at":"2024-01-18T13:25:11Z","updated_at":"2024-01-18T13:25:11Z","pushed_at":"2024-01-16T16:32:13Z","git_url":"git://github.com/stefhak/webrtc-pc.git","ssh_url":"git@github.com:stefhak/webrtc-pc.git","clone_url":"https://github.com/stefhak/webrtc-pc.git","svn_url":"https://github.com/stefhak/webrtc-pc","homepage":"https://w3c.github.io/webrtc-pc/","size":31123,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main","public":true}},"public":true,"created_at":"2024-01-18T13:25:11Z","org":{"id":379216,"login":"w3c","gravatar_id":"","url":"https://api.github.com/orgs/w3c","avatar_url":"https://avatars.githubusercontent.com/u/379216?"}},{"id":"34924262664","type":"ForkEvent","actor":{"id":1180334,"login":"stefhak","display_login":"stefhak","gravatar_id":"","url":"https://api.github.com/users/stefhak","avatar_url":"https://avatars.githubusercontent.com/u/1180334?"},"repo":{"id":213330334,"name":"w3c/webrtc-extensions","url":"https://api.github.com/repos/w3c/webrtc-extensions"},"payload":{"forkee":{"id":744943713,"node_id":"R_kgDOLGbwYQ","name":"webrtc-extensions","full_name":"stefhak/webrtc-extensions","private":false,"owner":{"login":"stefhak","id":1180334,"node_id":"MDQ6VXNlcjExODAzMzQ=","avatar_url":"https://avatars.githubusercontent.com/u/1180334?v=4","gravatar_id":"","url":"https://api.github.com/users/stefhak","html_url":"https://github.com/stefhak","followers_url":"https://api.github.com/users/stefhak/followers","following_url":"https://api.github.com/users/stefhak/following{/other_user}","gists_url":"https://api.github.com/users/stefhak/gists{/gist_id}","starred_url":"https://api.github.com/users/stefhak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefhak/subscriptions","organizations_url":"https://api.github.com/users/stefhak/orgs","repos_url":"https://api.github.com/users/stefhak/repos","events_url":"https://api.github.com/users/stefhak/events{/privacy}","received_events_url":"https://api.github.com/users/stefhak/received_events","type":"User","site_admin":false},"html_url":"https://github.com/stefhak/webrtc-extensions","description":"A repository for \"WebRTC 1.1+\" features","fork":true,"url":"https://api.github.com/repos/stefhak/webrtc-extensions","forks_url":"https://api.github.com/repos/stefhak/webrtc-extensions/forks","keys_url":"https://api.github.com/repos/stefhak/webrtc-extensions/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stefhak/webrtc-extensions/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stefhak/webrtc-extensions/teams","hooks_url":"https://api.github.com/repos/stefhak/webrtc-extensions/hooks","issue_events_url":"https://api.github.com/repos/stefhak/webrtc-extensions/issues/events{/number}","events_url":"https://api.github.com/repos/stefhak/webrtc-extensions/events","assignees_url":"https://api.github.com/repos/stefhak/webrtc-extensions/assignees{/user}","branches_url":"https://api.github.com/repos/stefhak/webrtc-extensions/branches{/branch}","tags_url":"https://api.github.com/repos/stefhak/webrtc-extensions/tags","blobs_url":"https://api.github.com/repos/stefhak/webrtc-extensions/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stefhak/webrtc-extensions/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stefhak/webrtc-extensions/git/refs{/sha}","trees_url":"https://api.github.com/repos/stefhak/webrtc-extensions/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stefhak/webrtc-extensions/statuses/{sha}","languages_url":"https://api.github.com/repos/stefhak/webrtc-extensions/languages","stargazers_url":"https://api.github.com/repos/stefhak/webrtc-extensions/stargazers","contributors_url":"https://api.github.com/repos/stefhak/webrtc-extensions/contributors","subscribers_url":"https://api.github.com/repos/stefhak/webrtc-extensions/subscribers","subscription_url":"https://api.github.com/repos/stefhak/webrtc-extensions/subscription","commits_url":"https://api.github.com/repos/stefhak/webrtc-extensions/commits{/sha}","git_commits_url":"https://api.github.com/repos/stefhak/webrtc-extensions/git/commits{/sha}","comments_url":"https://api.github.com/repos/stefhak/webrtc-extensions/comments{/number}","issue_comment_url":"https://api.github.com/repos/stefhak/webrtc-extensions/issues/comments{/number}","contents_url":"https://api.github.com/repos/stefhak/webrtc-extensions/contents/{+path}","compare_url":"https://api.github.com/repos/stefhak/webrtc-extensions/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stefhak/webrtc-extensions/merges","archive_url":"https://api.github.com/repos/stefhak/webrtc-extensions/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stefhak/webrtc-extensions/downloads","issues_url":"https://api.github.com/repos/stefhak/webrtc-extensions/issues{/number}","pulls_url":"https://api.github.com/repos/stefhak/webrtc-extensions/pulls{/number}","milestones_url":"https://api.github.com/repos/stefhak/webrtc-extensions/milestones{/number}","notifications_url":"https://api.github.com/repos/stefhak/webrtc-extensions/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stefhak/webrtc-extensions/labels{/name}","releases_url":"https://api.github.com/repos/stefhak/webrtc-extensions/releases{/id}","deployments_url":"https://api.github.com/repos/stefhak/webrtc-extensions/deployments","created_at":"2024-01-18T10:20:35Z","updated_at":"2024-01-18T10:20:35Z","pushed_at":"2024-01-12T21:44:30Z","git_url":"git://github.com/stefhak/webrtc-extensions.git","ssh_url":"git@github.com:stefhak/webrtc-extensions.git","clone_url":"https://github.com/stefhak/webrtc-extensions.git","svn_url":"https://github.com/stefhak/webrtc-extensions","homepage":"https://w3c.github.io/webrtc-extensions/","size":306,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main","public":true}},"public":true,"created_at":"2024-01-18T10:20:36Z","org":{"id":379216,"login":"w3c","gravatar_id":"","url":"https://api.github.com/orgs/w3c","avatar_url":"https://avatars.githubusercontent.com/u/379216?"}},{"id":"34924186297","type":"ForkEvent","actor":{"id":1180334,"login":"stefhak","display_login":"stefhak","gravatar_id":"","url":"https://api.github.com/users/stefhak","avatar_url":"https://avatars.githubusercontent.com/u/1180334?"},"repo":{"id":143313599,"name":"w3c/webrtc-nv-use-cases","url":"https://api.github.com/repos/w3c/webrtc-nv-use-cases"},"payload":{"forkee":{"id":744942765,"node_id":"R_kgDOLGbsrQ","name":"webrtc-nv-use-cases","full_name":"stefhak/webrtc-nv-use-cases","private":false,"owner":{"login":"stefhak","id":1180334,"node_id":"MDQ6VXNlcjExODAzMzQ=","avatar_url":"https://avatars.githubusercontent.com/u/1180334?v=4","gravatar_id":"","url":"https://api.github.com/users/stefhak","html_url":"https://github.com/stefhak","followers_url":"https://api.github.com/users/stefhak/followers","following_url":"https://api.github.com/users/stefhak/following{/other_user}","gists_url":"https://api.github.com/users/stefhak/gists{/gist_id}","starred_url":"https://api.github.com/users/stefhak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefhak/subscriptions","organizations_url":"https://api.github.com/users/stefhak/orgs","repos_url":"https://api.github.com/users/stefhak/repos","events_url":"https://api.github.com/users/stefhak/events{/privacy}","received_events_url":"https://api.github.com/users/stefhak/received_events","type":"User","site_admin":false},"html_url":"https://github.com/stefhak/webrtc-nv-use-cases","description":"Use cases for WebRTC NV","fork":true,"url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases","forks_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/forks","keys_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/teams","hooks_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/hooks","issue_events_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/issues/events{/number}","events_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/events","assignees_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/assignees{/user}","branches_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/branches{/branch}","tags_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/tags","blobs_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/git/refs{/sha}","trees_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/statuses/{sha}","languages_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/languages","stargazers_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/stargazers","contributors_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/contributors","subscribers_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/subscribers","subscription_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/subscription","commits_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/commits{/sha}","git_commits_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/git/commits{/sha}","comments_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/comments{/number}","issue_comment_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/issues/comments{/number}","contents_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/contents/{+path}","compare_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/merges","archive_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/downloads","issues_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/issues{/number}","pulls_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/pulls{/number}","milestones_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/milestones{/number}","notifications_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/labels{/name}","releases_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/releases{/id}","deployments_url":"https://api.github.com/repos/stefhak/webrtc-nv-use-cases/deployments","created_at":"2024-01-18T10:18:05Z","updated_at":"2024-01-18T10:18:06Z","pushed_at":"2023-12-27T19:07:46Z","git_url":"git://github.com/stefhak/webrtc-nv-use-cases.git","ssh_url":"git@github.com:stefhak/webrtc-nv-use-cases.git","clone_url":"https://github.com/stefhak/webrtc-nv-use-cases.git","svn_url":"https://github.com/stefhak/webrtc-nv-use-cases","homepage":"https://w3c.github.io/webrtc-nv-use-cases/","size":364,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main","public":true}},"public":true,"created_at":"2024-01-18T10:18:06Z","org":{"id":379216,"login":"w3c","gravatar_id":"","url":"https://api.github.com/orgs/w3c","avatar_url":"https://avatars.githubusercontent.com/u/379216?"}},{"id":"34924006916","type":"IssueCommentEvent","actor":{"id":1180334,"login":"stefhak","display_login":"stefhak","gravatar_id":"","url":"https://api.github.com/users/stefhak","avatar_url":"https://avatars.githubusercontent.com/u/1180334?"},"repo":{"id":23384500,"name":"w3c/webrtc-pc","url":"https://api.github.com/repos/w3c/webrtc-pc"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2926","repository_url":"https://api.github.com/repos/w3c/webrtc-pc","labels_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2926/labels{/name}","comments_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2926/comments","events_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2926/events","html_url":"https://github.com/w3c/webrtc-pc/pull/2926","id":2084395138,"node_id":"PR_kwDOAWTRtM5kN67Y","number":2926,"title":"make setCodecPreferences only look at receive codecs","user":{"login":"fippo","id":289731,"node_id":"MDQ6VXNlcjI4OTczMQ==","avatar_url":"https://avatars.githubusercontent.com/u/289731?v=4","gravatar_id":"","url":"https://api.github.com/users/fippo","html_url":"https://github.com/fippo","followers_url":"https://api.github.com/users/fippo/followers","following_url":"https://api.github.com/users/fippo/following{/other_user}","gists_url":"https://api.github.com/users/fippo/gists{/gist_id}","starred_url":"https://api.github.com/users/fippo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fippo/subscriptions","organizations_url":"https://api.github.com/users/fippo/orgs","repos_url":"https://api.github.com/users/fippo/repos","events_url":"https://api.github.com/users/fippo/events{/privacy}","received_events_url":"https://api.github.com/users/fippo/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2024-01-16T16:32:12Z","updated_at":"2024-01-18T10:12:10Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/w3c/webrtc-pc/pulls/2926","html_url":"https://github.com/w3c/webrtc-pc/pull/2926","diff_url":"https://github.com/w3c/webrtc-pc/pull/2926.diff","patch_url":"https://github.com/w3c/webrtc-pc/pull/2926.patch","merged_at":null},"body":"aligning with [JSEP](https://www.rfc-editor.org/rfc/rfc8829.html#name-setcodecpreferences): \n> setCodecPreferences does not directly affect which codec the implementation decides to send. \n> It only affects which codecs the implementation indicates that it prefers to receive\n\npartial fix for #2888\n\n\n\n***\nPreview | Diff","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2926/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2926/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/comments/1898180254","html_url":"https://github.com/w3c/webrtc-pc/pull/2926#issuecomment-1898180254","issue_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2926","id":1898180254,"node_id":"IC_kwDOAWTRtM5xI-6e","user":{"login":"stefhak","id":1180334,"node_id":"MDQ6VXNlcjExODAzMzQ=","avatar_url":"https://avatars.githubusercontent.com/u/1180334?v=4","gravatar_id":"","url":"https://api.github.com/users/stefhak","html_url":"https://github.com/stefhak","followers_url":"https://api.github.com/users/stefhak/followers","following_url":"https://api.github.com/users/stefhak/following{/other_user}","gists_url":"https://api.github.com/users/stefhak/gists{/gist_id}","starred_url":"https://api.github.com/users/stefhak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefhak/subscriptions","organizations_url":"https://api.github.com/users/stefhak/orgs","repos_url":"https://api.github.com/users/stefhak/repos","events_url":"https://api.github.com/users/stefhak/events{/privacy}","received_events_url":"https://api.github.com/users/stefhak/received_events","type":"User","site_admin":false},"created_at":"2024-01-18T10:12:08Z","updated_at":"2024-01-18T10:12:08Z","author_association":"CONTRIBUTOR","body":"LGTM.","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/comments/1898180254/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-01-18T10:12:10Z","org":{"id":379216,"login":"w3c","gravatar_id":"","url":"https://api.github.com/orgs/w3c","avatar_url":"https://avatars.githubusercontent.com/u/379216?"}},{"id":"34714288298","type":"IssueCommentEvent","actor":{"id":1180334,"login":"stefhak","display_login":"stefhak","gravatar_id":"","url":"https://api.github.com/users/stefhak","avatar_url":"https://avatars.githubusercontent.com/u/1180334?"},"repo":{"id":23384500,"name":"w3c/webrtc-pc","url":"https://api.github.com/repos/w3c/webrtc-pc"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888","repository_url":"https://api.github.com/repos/w3c/webrtc-pc","labels_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/labels{/name}","comments_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/comments","events_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/events","html_url":"https://github.com/w3c/webrtc-pc/issues/2888","id":1846413156,"node_id":"I_kwDOAWTRtM5uDgdk","number":2888,"title":"setCodecPreferences vs unidirectional codecs","user":{"login":"fippo","id":289731,"node_id":"MDQ6VXNlcjI4OTczMQ==","avatar_url":"https://avatars.githubusercontent.com/u/289731?v=4","gravatar_id":"","url":"https://api.github.com/users/fippo","html_url":"https://github.com/fippo","followers_url":"https://api.github.com/users/fippo/followers","following_url":"https://api.github.com/users/fippo/following{/other_user}","gists_url":"https://api.github.com/users/fippo/gists{/gist_id}","starred_url":"https://api.github.com/users/fippo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fippo/subscriptions","organizations_url":"https://api.github.com/users/fippo/orgs","repos_url":"https://api.github.com/users/fippo/repos","events_url":"https://api.github.com/users/fippo/events{/privacy}","received_events_url":"https://api.github.com/users/fippo/received_events","type":"User","site_admin":false},"labels":[{"id":6392221275,"node_id":"LA_kwDOAWTRtM8AAAABfQGOWw","url":"https://api.github.com/repos/w3c/webrtc-pc/labels/Discuss%20at%20next%20meeting","name":"Discuss at next meeting","color":"1d76db","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2023-08-11T08:24:53Z","updated_at":"2024-01-10T13:15:32Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"(for after TPAC, this is a minor detail and we have more important things to discuss)\r\n\r\nhttps://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-setcodecpreferences\r\nStep 6 says that\r\n> If the intersection between codecs and RTCRtpSender.getCapabilities(kind).codecs or the intersection between codecs and \r\n> RTCRtpReceiver.getCapabilities(kind).codecs only contains RTX, RED or FEC codecs or is an empty set, throw InvalidModificationError. \r\n> This ensures that we always have something to offer, regardless of transceiver.direction.\r\n\r\nThis means that you must negotiate at least one codec that you can send and receive.\r\n\r\nWhile this seems harmless, it causes trouble with asymmetric codec support and that is a fairly common thing. E.g. in Chrome on Windows we have 14 send codecs and 21 receive codecs, with the asymmetric ones ranging from H264 over VP9 to AV1.\r\nThe worst example we found was Android where the H264 send and receive profiles are not an exact string match and we have support for sending 42e032, 4d0032 and 640032 while being able to receive 42001f, 4d001f and 64001f. This lead to errors in a fairly innocent attempt to restrict the codecs to H264 variants:\r\n```\r\nconst codecs = RTCRtpSender.getCapabilities('codecs')\r\n .filter(c => c.mimeType.toLowerCase() === 'video/H264');\r\nsomeTransceiver.setCodecPreferences(codecs);\r\n```\r\n\r\nThe sentence \"this ensures that we always have something to offer\" is there to avoid the subsequent problem, not being able to negotiate a codec when the transceiver direction changes like this:\r\n```\r\nt.direction = 'recvonly'\r\nt.setCodecPreferences({a-codec-you-can-only-encode})\r\n```\r\nIf this was taken to createOffer and setLocalDescription it might lead to an m= line that is rejected which would cause the transceiver to be stopped which would be quite surprising.\r\n\r\nsetCodecPreferences might check the direction in that case but that just leads to the following scenario:\r\n```\r\nt.setCodecPreferences({a-codec-you-can-only-encode})\r\nt.direction = 'recvonly'\r\n```\r\nOne approach to solving this is that an attempt to set the direction to 'recvonly' might throw. This also requires a compability check in setCodecPreferences in case the direction was set before setCodecPreferences.\r\n\r\nThe other alternative would be to let createOffer (which knows about send+recv codes as well as the direction) throw an error when it detects this mismatch. It gets a bit finicky to figure out which transceiver was causing this, the mid *might* not be available.\r\n\r\nOverall I think this is an edge case but the first example is a fairly common flow that is currently broken (depending on the codec support)\r\n\r\nAlso: how is the \"intersection of codecs\" defined? It seems that for H264 this must take into account whether level-asymmetry is allowed, no?","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/reactions","total_count":1,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/comments/1884831753","html_url":"https://github.com/w3c/webrtc-pc/issues/2888#issuecomment-1884831753","issue_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888","id":1884831753,"node_id":"IC_kwDOAWTRtM5wWEAJ","user":{"login":"stefhak","id":1180334,"node_id":"MDQ6VXNlcjExODAzMzQ=","avatar_url":"https://avatars.githubusercontent.com/u/1180334?v=4","gravatar_id":"","url":"https://api.github.com/users/stefhak","html_url":"https://github.com/stefhak","followers_url":"https://api.github.com/users/stefhak/followers","following_url":"https://api.github.com/users/stefhak/following{/other_user}","gists_url":"https://api.github.com/users/stefhak/gists{/gist_id}","starred_url":"https://api.github.com/users/stefhak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefhak/subscriptions","organizations_url":"https://api.github.com/users/stefhak/orgs","repos_url":"https://api.github.com/users/stefhak/repos","events_url":"https://api.github.com/users/stefhak/events{/privacy}","received_events_url":"https://api.github.com/users/stefhak/received_events","type":"User","site_admin":false},"created_at":"2024-01-10T13:15:31Z","updated_at":"2024-01-10T13:15:31Z","author_association":"CONTRIBUTOR","body":"@fippo thanks for a good summary!\r\n\r\nFor my case (unidirectional medai), things now make sense as the receiving (also being SDP answerer) end can use transceiver.setCodecPreferences to indicate preferred receive codec(s). Exactly what I was looking for.\r\n\r\nOne slightly confusing thing for me is that webrtc-extensions adds the possibility to define a codec with setParameters on the _RTCRTPsender_. Can't this be a problem if used before negotiation? In that case any of the implemented (send) codecs can be used, so the promise probably resolves, but the receiver may not support it, which only becomes apparent after SDP o/a.","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/comments/1884831753/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-01-10T13:15:32Z","org":{"id":379216,"login":"w3c","gravatar_id":"","url":"https://api.github.com/orgs/w3c","avatar_url":"https://avatars.githubusercontent.com/u/379216?"}},{"id":"34678134708","type":"IssueCommentEvent","actor":{"id":1180334,"login":"stefhak","display_login":"stefhak","gravatar_id":"","url":"https://api.github.com/users/stefhak","avatar_url":"https://avatars.githubusercontent.com/u/1180334?"},"repo":{"id":23384500,"name":"w3c/webrtc-pc","url":"https://api.github.com/repos/w3c/webrtc-pc"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888","repository_url":"https://api.github.com/repos/w3c/webrtc-pc","labels_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/labels{/name}","comments_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/comments","events_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/events","html_url":"https://github.com/w3c/webrtc-pc/issues/2888","id":1846413156,"node_id":"I_kwDOAWTRtM5uDgdk","number":2888,"title":"setCodecPreferences vs unidirectional codecs","user":{"login":"fippo","id":289731,"node_id":"MDQ6VXNlcjI4OTczMQ==","avatar_url":"https://avatars.githubusercontent.com/u/289731?v=4","gravatar_id":"","url":"https://api.github.com/users/fippo","html_url":"https://github.com/fippo","followers_url":"https://api.github.com/users/fippo/followers","following_url":"https://api.github.com/users/fippo/following{/other_user}","gists_url":"https://api.github.com/users/fippo/gists{/gist_id}","starred_url":"https://api.github.com/users/fippo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fippo/subscriptions","organizations_url":"https://api.github.com/users/fippo/orgs","repos_url":"https://api.github.com/users/fippo/repos","events_url":"https://api.github.com/users/fippo/events{/privacy}","received_events_url":"https://api.github.com/users/fippo/received_events","type":"User","site_admin":false},"labels":[{"id":6392221275,"node_id":"LA_kwDOAWTRtM8AAAABfQGOWw","url":"https://api.github.com/repos/w3c/webrtc-pc/labels/Discuss%20at%20next%20meeting","name":"Discuss at next meeting","color":"1d76db","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":19,"created_at":"2023-08-11T08:24:53Z","updated_at":"2024-01-09T11:03:29Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"(for after TPAC, this is a minor detail and we have more important things to discuss)\r\n\r\nhttps://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-setcodecpreferences\r\nStep 6 says that\r\n> If the intersection between codecs and RTCRtpSender.getCapabilities(kind).codecs or the intersection between codecs and \r\n> RTCRtpReceiver.getCapabilities(kind).codecs only contains RTX, RED or FEC codecs or is an empty set, throw InvalidModificationError. \r\n> This ensures that we always have something to offer, regardless of transceiver.direction.\r\n\r\nThis means that you must negotiate at least one codec that you can send and receive.\r\n\r\nWhile this seems harmless, it causes trouble with asymmetric codec support and that is a fairly common thing. E.g. in Chrome on Windows we have 14 send codecs and 21 receive codecs, with the asymmetric ones ranging from H264 over VP9 to AV1.\r\nThe worst example we found was Android where the H264 send and receive profiles are not an exact string match and we have support for sending 42e032, 4d0032 and 640032 while being able to receive 42001f, 4d001f and 64001f. This lead to errors in a fairly innocent attempt to restrict the codecs to H264 variants:\r\n```\r\nconst codecs = RTCRtpSender.getCapabilities('codecs')\r\n .filter(c => c.mimeType.toLowerCase() === 'video/H264');\r\nsomeTransceiver.setCodecPreferences(codecs);\r\n```\r\n\r\nThe sentence \"this ensures that we always have something to offer\" is there to avoid the subsequent problem, not being able to negotiate a codec when the transceiver direction changes like this:\r\n```\r\nt.direction = 'recvonly'\r\nt.setCodecPreferences({a-codec-you-can-only-encode})\r\n```\r\nIf this was taken to createOffer and setLocalDescription it might lead to an m= line that is rejected which would cause the transceiver to be stopped which would be quite surprising.\r\n\r\nsetCodecPreferences might check the direction in that case but that just leads to the following scenario:\r\n```\r\nt.setCodecPreferences({a-codec-you-can-only-encode})\r\nt.direction = 'recvonly'\r\n```\r\nOne approach to solving this is that an attempt to set the direction to 'recvonly' might throw. This also requires a compability check in setCodecPreferences in case the direction was set before setCodecPreferences.\r\n\r\nThe other alternative would be to let createOffer (which knows about send+recv codes as well as the direction) throw an error when it detects this mismatch. It gets a bit finicky to figure out which transceiver was causing this, the mid *might* not be available.\r\n\r\nOverall I think this is an edge case but the first example is a fairly common flow that is currently broken (depending on the codec support)\r\n\r\nAlso: how is the \"intersection of codecs\" defined? It seems that for H264 this must take into account whether level-asymmetry is allowed, no?","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/reactions","total_count":1,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/comments/1882863703","html_url":"https://github.com/w3c/webrtc-pc/issues/2888#issuecomment-1882863703","issue_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888","id":1882863703,"node_id":"IC_kwDOAWTRtM5wOjhX","user":{"login":"stefhak","id":1180334,"node_id":"MDQ6VXNlcjExODAzMzQ=","avatar_url":"https://avatars.githubusercontent.com/u/1180334?v=4","gravatar_id":"","url":"https://api.github.com/users/stefhak","html_url":"https://github.com/stefhak","followers_url":"https://api.github.com/users/stefhak/followers","following_url":"https://api.github.com/users/stefhak/following{/other_user}","gists_url":"https://api.github.com/users/stefhak/gists{/gist_id}","starred_url":"https://api.github.com/users/stefhak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefhak/subscriptions","organizations_url":"https://api.github.com/users/stefhak/orgs","repos_url":"https://api.github.com/users/stefhak/repos","events_url":"https://api.github.com/users/stefhak/events{/privacy}","received_events_url":"https://api.github.com/users/stefhak/received_events","type":"User","site_admin":false},"created_at":"2024-01-09T11:03:28Z","updated_at":"2024-01-09T11:03:28Z","author_association":"CONTRIBUTOR","body":"Thanks @Orphis. I guess that is what I want to do, but I struggle on _how_ to apply those preferences.","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/comments/1882863703/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-01-09T11:03:29Z","org":{"id":379216,"login":"w3c","gravatar_id":"","url":"https://api.github.com/orgs/w3c","avatar_url":"https://avatars.githubusercontent.com/u/379216?"}},{"id":"34677814336","type":"IssueCommentEvent","actor":{"id":1180334,"login":"stefhak","display_login":"stefhak","gravatar_id":"","url":"https://api.github.com/users/stefhak","avatar_url":"https://avatars.githubusercontent.com/u/1180334?"},"repo":{"id":23384500,"name":"w3c/webrtc-pc","url":"https://api.github.com/repos/w3c/webrtc-pc"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888","repository_url":"https://api.github.com/repos/w3c/webrtc-pc","labels_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/labels{/name}","comments_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/comments","events_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/events","html_url":"https://github.com/w3c/webrtc-pc/issues/2888","id":1846413156,"node_id":"I_kwDOAWTRtM5uDgdk","number":2888,"title":"setCodecPreferences vs unidirectional codecs","user":{"login":"fippo","id":289731,"node_id":"MDQ6VXNlcjI4OTczMQ==","avatar_url":"https://avatars.githubusercontent.com/u/289731?v=4","gravatar_id":"","url":"https://api.github.com/users/fippo","html_url":"https://github.com/fippo","followers_url":"https://api.github.com/users/fippo/followers","following_url":"https://api.github.com/users/fippo/following{/other_user}","gists_url":"https://api.github.com/users/fippo/gists{/gist_id}","starred_url":"https://api.github.com/users/fippo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fippo/subscriptions","organizations_url":"https://api.github.com/users/fippo/orgs","repos_url":"https://api.github.com/users/fippo/repos","events_url":"https://api.github.com/users/fippo/events{/privacy}","received_events_url":"https://api.github.com/users/fippo/received_events","type":"User","site_admin":false},"labels":[{"id":6392221275,"node_id":"LA_kwDOAWTRtM8AAAABfQGOWw","url":"https://api.github.com/repos/w3c/webrtc-pc/labels/Discuss%20at%20next%20meeting","name":"Discuss at next meeting","color":"1d76db","default":false,"description":""}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":17,"created_at":"2023-08-11T08:24:53Z","updated_at":"2024-01-09T10:52:27Z","closed_at":null,"author_association":"CONTRIBUTOR","active_lock_reason":null,"body":"(for after TPAC, this is a minor detail and we have more important things to discuss)\r\n\r\nhttps://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-setcodecpreferences\r\nStep 6 says that\r\n> If the intersection between codecs and RTCRtpSender.getCapabilities(kind).codecs or the intersection between codecs and \r\n> RTCRtpReceiver.getCapabilities(kind).codecs only contains RTX, RED or FEC codecs or is an empty set, throw InvalidModificationError. \r\n> This ensures that we always have something to offer, regardless of transceiver.direction.\r\n\r\nThis means that you must negotiate at least one codec that you can send and receive.\r\n\r\nWhile this seems harmless, it causes trouble with asymmetric codec support and that is a fairly common thing. E.g. in Chrome on Windows we have 14 send codecs and 21 receive codecs, with the asymmetric ones ranging from H264 over VP9 to AV1.\r\nThe worst example we found was Android where the H264 send and receive profiles are not an exact string match and we have support for sending 42e032, 4d0032 and 640032 while being able to receive 42001f, 4d001f and 64001f. This lead to errors in a fairly innocent attempt to restrict the codecs to H264 variants:\r\n```\r\nconst codecs = RTCRtpSender.getCapabilities('codecs')\r\n .filter(c => c.mimeType.toLowerCase() === 'video/H264');\r\nsomeTransceiver.setCodecPreferences(codecs);\r\n```\r\n\r\nThe sentence \"this ensures that we always have something to offer\" is there to avoid the subsequent problem, not being able to negotiate a codec when the transceiver direction changes like this:\r\n```\r\nt.direction = 'recvonly'\r\nt.setCodecPreferences({a-codec-you-can-only-encode})\r\n```\r\nIf this was taken to createOffer and setLocalDescription it might lead to an m= line that is rejected which would cause the transceiver to be stopped which would be quite surprising.\r\n\r\nsetCodecPreferences might check the direction in that case but that just leads to the following scenario:\r\n```\r\nt.setCodecPreferences({a-codec-you-can-only-encode})\r\nt.direction = 'recvonly'\r\n```\r\nOne approach to solving this is that an attempt to set the direction to 'recvonly' might throw. This also requires a compability check in setCodecPreferences in case the direction was set before setCodecPreferences.\r\n\r\nThe other alternative would be to let createOffer (which knows about send+recv codes as well as the direction) throw an error when it detects this mismatch. It gets a bit finicky to figure out which transceiver was causing this, the mid *might* not be available.\r\n\r\nOverall I think this is an edge case but the first example is a fairly common flow that is currently broken (depending on the codec support)\r\n\r\nAlso: how is the \"intersection of codecs\" defined? It seems that for H264 this must take into account whether level-asymmetry is allowed, no?","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/reactions","total_count":1,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/comments/1882846680","html_url":"https://github.com/w3c/webrtc-pc/issues/2888#issuecomment-1882846680","issue_url":"https://api.github.com/repos/w3c/webrtc-pc/issues/2888","id":1882846680,"node_id":"IC_kwDOAWTRtM5wOfXY","user":{"login":"stefhak","id":1180334,"node_id":"MDQ6VXNlcjExODAzMzQ=","avatar_url":"https://avatars.githubusercontent.com/u/1180334?v=4","gravatar_id":"","url":"https://api.github.com/users/stefhak","html_url":"https://github.com/stefhak","followers_url":"https://api.github.com/users/stefhak/followers","following_url":"https://api.github.com/users/stefhak/following{/other_user}","gists_url":"https://api.github.com/users/stefhak/gists{/gist_id}","starred_url":"https://api.github.com/users/stefhak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefhak/subscriptions","organizations_url":"https://api.github.com/users/stefhak/orgs","repos_url":"https://api.github.com/users/stefhak/repos","events_url":"https://api.github.com/users/stefhak/events{/privacy}","received_events_url":"https://api.github.com/users/stefhak/received_events","type":"User","site_admin":false},"created_at":"2024-01-09T10:52:26Z","updated_at":"2024-01-09T10:52:26Z","author_association":"CONTRIBUTOR","body":"Is this related?: I'm looking at a case where the offerer offers sendonly video. I struggle on how to enable the receiving application to apply codec preferences (re-order and prune). I think you can setParameters (including codec data) on an RTPSender, but is there any similar for an RTPReceiver, or how should this be done?","reactions":{"url":"https://api.github.com/repos/w3c/webrtc-pc/issues/comments/1882846680/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2024-01-09T10:52:28Z","org":{"id":379216,"login":"w3c","gravatar_id":"","url":"https://api.github.com/orgs/w3c","avatar_url":"https://avatars.githubusercontent.com/u/379216?"}}]