{"id":17702350,"url":"https://github.com/hypervideo/svc-taco","last_synced_at":"2025-05-13T04:58:02.413Z","repository":{"id":257936786,"uuid":"860078573","full_name":"hypervideo/svc-taco","owner":"hypervideo","description":"WebRTC Video Encoder \u003c--\u003e WebCodecs VideoDecoder","archived":false,"fork":false,"pushed_at":"2024-10-28T16:55:34.000Z","size":499,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-13T04:57:56.155Z","etag":null,"topics":["svc","webcodecs","webrtc"],"latest_commit_sha":null,"homepage":"https://hypervideo.github.io/svc-taco/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hypervideo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-19T19:28:32.000Z","updated_at":"2024-11-01T09:54:57.000Z","dependencies_parsed_at":"2024-10-28T15:05:31.738Z","dependency_job_id":null,"html_url":"https://github.com/hypervideo/svc-taco","commit_stats":null,"previous_names":["hypervideo/svc-taco"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hypervideo%2Fsvc-taco","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hypervideo%2Fsvc-taco/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hypervideo%2Fsvc-taco/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hypervideo%2Fsvc-taco/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hypervideo","download_url":"https://codeload.github.com/hypervideo/svc-taco/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253877509,"owners_count":21977643,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["svc","webcodecs","webrtc"],"created_at":"2024-10-24T19:06:34.408Z","updated_at":"2025-05-13T04:58:02.375Z","avatar_url":"https://github.com/hypervideo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# svc-taco\n\nThis repository aims to investigate whether WebCodec's `VideoDecoder` can decode SVC-encoded video frames from WebRTC.\n\n## Background\n\n### Scalable Video Coding (SVC)\n\nAdaptive video streaming is the ability to adapt the video quality to the user's network conditions. Simulcast does this\nby independently encoding different versions of a video segment. However, this leads to an increased storage penalty due\nto the redundancy.\n\nSVC reduces this redundancy by encoding a video segment into multiple different spatial and temporal layers. A video\nsegment with the lowest requirements is encoded as the base layer.\n\n| Simulcast                   | SVC               |\n| --------------------------- | ----------------- |\n| ![Simulcast](simulcast.png) | ![SVC](svc-1.png) |\n\n### Limited Resources\n\n[hypervideo](https://github.com/hypervideo/hyper.video) uses `VideoEncoder` from the `WebCodec` API. However,\n`VideoEncoder`'s SVC capabilities are quite limited, as it only supports temporal scalability.\n\nIt is well known that WebRTC's video encoder supports both temporal and spatial scalability. WebRTC's most aggressive\n[`scalabilityMode`](https://www.w3.org/TR/webrtc-svc/#scalabilitymodes*) with a 2:1 resolution is `L3T3`. Meaning video\nsegments are encoded into 3 different spatial resolutions and 3 different temporal layers.\n\n![L3T3.png](L3T3.png)\n\n### AV1\n\nAn [investigation](https://issues.chromium.org/issues/338929751) into the current status of SVC decoding for WebCodecs\nshowed that the AV1 software decoder outputs the highest spatial layer. This means given an AV1 + SVC=\"L3T3\" encoded\nvideo stream, `VideoDecoder` should be able to decode these video frames.\n\n## Goals\n\nThis repository investigates the least invasive way to use WebRTC's media encoding feature and uses `VideoDecoder` to\ndecode the encoded video frames.\n\n## How to Run\n\n\u003e [!NOTE]  \n\u003e When running the demo locally, make sure to disable cache in your Network tab!\n\n```sh\n# this assumes you have Golang and Just installed\n# inside project root directory\njust run # or go run server.go\n```\n\n## Sources\n\nW3C VideoDecoder - https://www.w3.org/TR/webcodecs/#videodecoder-interface\n\nSVC Extension for WebRTC - https://www.w3.org/TR/webrtc-svc/#bib-media-capabilities\n\nChromium -\n[temporal-svc.js](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/external/wpt/webcodecs/temporal-svc-encoding.https.any.js;l=11-15;drc=e0e07506b7fc8a8ddd4e9f7799e8e572a8c57612)\n\nScalable High Efficiency Video Coding based HTTP Adaptive Streaming over QUIC -\nhttps://dl.acm.org/doi/10.1145/3405796.3405829\n\nAV1 Spec, 6.7.6.12. L3T3 (Informative) - https://aomediacodec.github.io/av1-spec/av1-spec.pdf\n\n## Related Thread\n\nhttps://github.com/hypervideo/hyper.video/issues/224\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhypervideo%2Fsvc-taco","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhypervideo%2Fsvc-taco","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhypervideo%2Fsvc-taco/lists"}