this repo has no description atmosphereconf-vods.wisp.place/
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 1890 lines 43 kB view raw
1WEBVTT 2 31 400:00:00.000 --> 00:00:06.960 5All right. 6 72 800:00:06.960 --> 00:00:09.280 9So that's how Streamplace VOD works. 10 113 1200:00:09.280 --> 00:00:11.200 13I hope you all enjoyed the presentation. 14 154 1600:00:11.200 --> 00:00:13.120 17My name is Eli Malin. 18 195 2000:00:13.120 --> 00:00:15.800 21I'm the CEO and founder of Streamplace. 22 236 2400:00:15.800 --> 00:00:21.600 25I don't care about my Caribbeaner update version. 26 277 2800:00:21.600 --> 00:00:29.320 29So the crux of this talk was if you are going to make a system that has both VOD and live, 30 318 3200:00:29.320 --> 00:00:32.280 33that'd be good at all. 34 359 3600:00:32.280 --> 00:00:33.640 37You should probably start with live. 38 3910 4000:00:33.640 --> 00:00:35.640 41Live video is more difficult than VOD. 42 4311 4400:00:35.640 --> 00:00:42.040 45It is much easier to generalize live video to VOD than it is to go the opposite direction. 46 4712 4800:00:42.040 --> 00:00:43.600 49So we started out with live. 50 5113 5200:00:43.600 --> 00:00:45.520 53We're pretty happy with that. 54 5514 5600:00:45.520 --> 00:00:47.360 57And knock on wood. 58 5915 6000:00:47.360 --> 00:00:49.920 61Of course, as soon as I walked out of the other room, people started reporting playback 62 6316 6400:00:49.920 --> 00:00:50.920 65issues over there. 66 6717 6800:00:50.920 --> 00:00:55.560 69But overall, everything's been going really well at all of this. 70 7118 7200:00:55.560 --> 00:01:00.800 73So I'll start by sort of explaining how Streamplace, a quick explanation of how Streamplace live 74 7519 7600:01:00.800 --> 00:01:03.080 77works because I've talked about this a lot before. 78 7920 8000:01:03.080 --> 00:01:09.240 81And then we'll talk about how we're adapting that for a decentralized VOD primitive. 82 8321 8400:01:09.240 --> 00:01:15.280 85What does it mean to have something like, you know, what would a decentralized YouTube 86 8722 8800:01:15.280 --> 00:01:16.280 89look like? 90 9123 9200:01:16.280 --> 00:01:20.480 93What things do you need in order to make that happen? 94 9524 9600:01:20.480 --> 00:01:22.560 97So yeah, this is just about Streamplace. 98 9925 10000:01:22.560 --> 00:01:29.320 101There's been three Streamplace third-party clients created since the beginning of this 102 10326 10400:01:29.320 --> 00:01:30.840 105conference. 106 10727 10800:01:30.840 --> 00:01:35.960 109So I don't know if that reflects poorly on our front end or if it just refers to the 110 11128 11200:01:35.960 --> 00:01:38.280 113entrepreneurial spirit of the app proto community. 114 11529 11600:01:38.280 --> 00:01:41.760 117But this one's from Jack.xyz. 118 11930 12000:01:41.760 --> 00:01:46.240 121And it shows all of the streams at once, really given the Streamplace servers the maximum 122 12331 12400:01:46.240 --> 00:01:50.720 125workout to give everybody what they're looking for there. 126 12732 12800:01:50.720 --> 00:01:55.160 129Before we do anything else, I found this MP4 file on the ground. 130 13133 13200:01:55.160 --> 00:02:01.160 133Let's see what it is. 134 13534 13600:02:01.160 --> 00:02:06.520 137You can all imagine the great noises Trabio is making here. 138 13935 14000:02:06.520 --> 00:02:12.560 141What's going to happen? 142 14336 14400:02:12.560 --> 00:02:15.560 145And wait for it. 146 14737 14800:02:15.560 --> 00:02:18.240 149Yeah, we got them. 150 15138 15200:02:18.240 --> 00:02:19.240 153Yeah. 154 15539 15600:02:19.280 --> 00:02:26.000 157So that MP4 file I found on the ground turned out to be my glorious victory over Trabio. 158 15940 16000:02:26.000 --> 00:02:27.000 161So how do I know that? 162 16341 16400:02:27.000 --> 00:02:30.480 165How do I know it's Eli's livestream that happened there? 166 16742 16800:02:30.480 --> 00:02:35.720 169And that has to do with Streamplace's signing format. 170 17143 17200:02:35.720 --> 00:02:39.040 173So we needed to... 174 17544 17600:02:39.040 --> 00:02:41.840 177So decentralized VOD is something that's kind of existed before, right? 178 17945 18000:02:41.840 --> 00:02:42.840 181You could argue... 182 18346 18400:02:42.840 --> 00:02:43.920 185This will be a popular opinion. 186 18747 18800:02:43.920 --> 00:02:47.680 189You could argue video NFTs are kind of like a decentralized VOD, right? 190 19148 19200:02:47.680 --> 00:02:51.680 193You've got an IPFS reference to something that's out there and not controlled by any 194 19549 19600:02:51.680 --> 00:02:52.680 197one party. 198 19950 20000:02:52.680 --> 00:02:54.880 201Lots of other IPFS based. 202 20351 20400:02:54.880 --> 00:02:59.640 205There's like DAT based livestreaming that maybe falls into that. 206 20752 20800:02:59.640 --> 00:03:03.160 209But for the most part, we needed to invent what a decentralized livestream is. 210 21153 21200:03:03.160 --> 00:03:06.200 213So what we did was we took... 214 21554 21600:03:06.200 --> 00:03:10.080 217The first thing that happens is you generate a signing key, same as the one that's used 218 21955 22000:03:10.080 --> 00:03:13.800 221to secure your app proto repository. 222 22356 22400:03:13.800 --> 00:03:16.080 225We then take that signing key. 226 22757 22800:03:16.080 --> 00:03:23.360 229You then configure your OBS instance, just like we're doing here, to stream in to Streamplace. 230 23158 23200:03:23.360 --> 00:03:25.160 233You actually provide it with that signing key. 234 23559 23600:03:25.160 --> 00:03:27.120 237So it has the capability of signing on your behalf. 238 23960 24000:03:27.120 --> 00:03:31.000 241If you really care about your key custody, you should run Streamplace locally and then 242 24361 24400:03:31.000 --> 00:03:34.760 245syndicate it out to a server. 246 24762 24800:03:34.760 --> 00:03:37.280 249Then this is basically every livestream you've ever watched. 250 25163 25200:03:37.280 --> 00:03:42.740 253If you haven't messed with video infrastructure before, it's just a bunch of short video files 254 25564 25600:03:42.740 --> 00:03:44.600 257that are thrown into your face in sequence. 258 25965 26000:03:44.600 --> 00:03:46.940 261And it provides the illusion of a livestream. 262 26366 26400:03:46.940 --> 00:03:48.220 265So that's how we do it. 266 26767 26800:03:48.220 --> 00:03:50.660 269Each MP4 file comes in. 270 27168 27200:03:50.660 --> 00:03:56.220 273We give each one of them an embedded signature using technology from the C2PA, the Coalition 274 27569 27600:03:56.220 --> 00:03:59.480 277for Content Provenance and Authenticity. 278 27970 28000:03:59.480 --> 00:04:00.780 281Cool format. 282 28371 28400:04:00.780 --> 00:04:06.200 285It provides a mechanism for giving you an MP4 file that contains an embedded signature 286 28772 28800:04:06.200 --> 00:04:11.380 289over a hash of all of that MP4 file, except for that part of the signature. 290 29173 29200:04:11.380 --> 00:04:12.640 293That's really tricky to get right. 294 29574 29600:04:12.660 --> 00:04:16.780 297And that's one of the things I really like about the C2PA's tooling is you've got this 298 29975 30000:04:16.780 --> 00:04:23.540 301a lot of decentralized media projects have external signatures. 302 30376 30400:04:23.540 --> 00:04:26.780 305So you might have this actually including like Blue Sky videos, right? 306 30777 30800:04:26.780 --> 00:04:28.660 309How do you know it's my Blue Sky video? 310 31178 31200:04:28.660 --> 00:04:34.780 313It's because there's a blob out there that is referenced by a record in my repository 314 31579 31600:04:34.780 --> 00:04:37.220 317and my repository has a signature on the root commit. 318 31980 32000:04:37.220 --> 00:04:39.300 321So that's how you know it's mine, right? 322 32381 32400:04:39.320 --> 00:04:44.080 325What I like about this format is I can have this is the MP4 file on the ground example 326 32782 32800:04:44.080 --> 00:04:45.080 329I just gave, right? 330 33183 33200:04:45.080 --> 00:04:49.000 333You can have arbitrary MP4 file on your computer and all of that signing and provenance data 334 33584 33600:04:49.000 --> 00:04:51.920 337is intact and embedded in the MP4 file. 338 33985 34000:04:51.920 --> 00:04:52.920 341So I like that a lot. 342 34386 34400:04:52.920 --> 00:04:58.160 345It's something we really wanted to preserve as we move from live to VOD. 346 34787 34800:04:58.160 --> 00:05:00.600 349And lots of very cool metadata in here. 350 35188 35200:05:00.600 --> 00:05:02.720 353We're not doing too much with this mechanism yet. 354 35589 35600:05:02.720 --> 00:05:08.460 357I spent a long time talking to Trezi yesterday about embedding this part of the embedded 358 35990 36000:05:08.480 --> 00:05:10.680 361metadata here should be that I'm playing Silksong, right? 362 36391 36400:05:10.680 --> 00:05:15.880 365And then if you care about Silksong, you can watch that live stream and get that data from 366 36792 36800:05:15.880 --> 00:05:17.680 369like pretty much any direction, right? 370 37193 37200:05:17.680 --> 00:05:22.400 373Like you can download it from sketchiest website in the world.ru and still be confident that 374 37594 37600:05:22.400 --> 00:05:25.360 377you're looking at the right thing, right? 378 37995 38000:05:25.360 --> 00:05:27.360 381And then I'm playing Silksong. 382 38396 38400:05:27.360 --> 00:05:31.160 385Those, yeah, that's this example. 386 38797 38800:05:31.160 --> 00:05:34.140 389I have, yeah, we've made streamplace as easy to run as possible. 390 39198 39200:05:34.140 --> 00:05:38.320 393So you can run your own streamplace nodes, syndicate my streams. 394 39599 39600:05:38.340 --> 00:05:41.700 397You get copied over in this sort of trustless, unauthenticated way. 398 399100 40000:05:41.700 --> 00:05:43.220 401And then you see it over there. 402 403101 40400:05:43.220 --> 00:05:48.980 405So the thinking here is we probably won't beat Twitch by making a bigger data center 406 407102 40800:05:48.980 --> 00:05:51.540 409or buying more bandwidth than Amazon. 410 411103 41200:05:51.540 --> 00:05:55.340 413But we might be able to beat them by following the example of BitTorrent, right? 414 415104 41600:05:55.340 --> 00:05:59.220 417You can have lots of decentralized infrastructure that's replicating all of this, but through 418 419105 42000:05:59.220 --> 00:06:02.500 421the magic of digital signatures, you know that the video is authentic. 422 423106 42400:06:02.500 --> 00:06:07.100 425So what's the problem? 426 427107 42800:06:07.100 --> 00:06:09.240 429This isn't very convenient. 430 431108 43200:06:09.240 --> 00:06:13.360 433So when I say slice the video up into one second MP4 files, I'm being very literal about 434 435109 43600:06:13.360 --> 00:06:14.360 437that. 438 439110 44000:06:14.360 --> 00:06:17.440 441If you run streamplace on your computer, you can navigate to this and see lots and lots 442 443111 44400:06:17.440 --> 00:06:20.080 445and lots of one second MP4 files. 446 447112 44800:06:20.080 --> 00:06:22.600 449And when the computer is processing them all and feeding to you as a live stream, that's 450 451113 45200:06:22.600 --> 00:06:23.600 453okay. 454 455114 45600:06:23.600 --> 00:06:27.440 457Afterward, when you want to work with this as a VOD, it's a pain in the ass. 458 459115 46000:06:27.440 --> 00:06:34.480 461So we wanted, this was one of the design goals of VOD for us is how do we handle that? 462 463116 46400:06:34.480 --> 00:06:39.920 465And unfortunately, because we used regular MP4 files, they're non-concatenatable. 466 467117 46800:06:39.920 --> 00:06:45.560 469You can't take two MP4 files, squish all the bytes together and get valid output, right? 470 471118 47200:06:45.560 --> 00:06:47.900 473That's just not MP4 works. 474 475119 47600:06:47.900 --> 00:06:49.980 477It's not valid data there. 478 479120 48000:06:49.980 --> 00:06:55.260 481So you'd have to mux it and the signature that you get there wouldn't match the input. 482 483121 48400:06:55.260 --> 00:06:58.900 485And all of a sudden you've broken this entire cool BitTorrent deprovenance mechanism that 486 487122 48800:06:58.900 --> 00:07:01.940 489I was just describing. 490 491123 49200:07:01.940 --> 00:07:09.560 493So this is the other reason we were already looking at forking C2PA. 494 495124 49600:07:09.560 --> 00:07:13.960 497So here we have a list of signing algorithms. 498 499125 50000:07:13.960 --> 00:07:25.680 501As you can see here, we have the good and virtuous ECDSA signature over a SHA256 hash 502 503126 50400:07:25.680 --> 00:07:37.820 505over the P256 curve, but not over the SCCP256K1 curve, the evil shady curve that's used inside 506 507127 50800:07:37.820 --> 00:07:41.080 509BitTorrent and Ethereum and AppProto. 510 511128 51200:07:41.080 --> 00:07:48.340 513So I think my theory here is that somebody in Adobe had to sell some exec that they weren't 514 515129 51600:07:48.340 --> 00:07:49.940 517making blockchain software here. 518 519130 52000:07:49.940 --> 00:07:51.800 521So we didn't do that kind of signing. 522 523131 52400:07:51.800 --> 00:07:53.020 525We only did this kind of signing. 526 527132 52800:07:53.020 --> 00:07:58.120 529So technically for as long as streamplace has existed, it hasn't been C2PA compatible. 530 531133 53200:07:58.120 --> 00:08:00.940 533And I had been looking for a while to formalize that. 534 535134 53600:08:00.940 --> 00:08:04.920 537So oh, yeah, this is the other. 538 539135 54000:08:04.920 --> 00:08:07.960 541So this is the other. 542 543136 54400:08:07.960 --> 00:08:13.760 545So Adobe is out there right now lobbying, especially European governments and the state 546 547137 54800:08:13.760 --> 00:08:20.680 549of California to require provenance data on everything that you post on social media. 550 551138 55200:08:20.680 --> 00:08:24.200 553This is the reason for the C2PA's existence, getting us ready for a world filled with deep 554 555139 55600:08:24.200 --> 00:08:25.200 557takes. 558 559140 56000:08:25.200 --> 00:08:29.140 561This is not inherently a bad idea. 562 563141 56400:08:29.140 --> 00:08:32.880 565Once anybody can deep fake anything, how do you ever trust what you're looking at? 566 567142 56800:08:32.880 --> 00:08:35.460 569No one technical mechanism can solve that problem. 570 571143 57200:08:35.460 --> 00:08:40.020 573But one way you could be more confident is if there was provenance data embedded in the 574 575144 57600:08:40.020 --> 00:08:43.620 577live stream, where it says, oh, this video is taken from Eli's camera and then edited 578 579145 58000:08:43.620 --> 00:08:48.160 581using this software and makes its way everywhere. 582 583146 58400:08:48.280 --> 00:08:51.320 585The reason Adobe is doing this lobbying is because they want to try and do some regulatory 586 587147 58800:08:51.320 --> 00:08:52.320 589capture. 590 591148 59200:08:52.320 --> 00:08:57.360 593So they want to sell governments, these expensive Creative Cloud subscriptions, and be the only 594 595149 59600:08:57.360 --> 00:09:01.920 597software that you could possibly use in order to do all of that stuff. 598 599150 60000:09:01.920 --> 00:09:07.760 601Also the part I think is really funny is they want you to go pay a CA, like $107 a month 602 603151 60400:09:07.760 --> 00:09:10.440 605for a signing certificate. 606 607152 60800:09:10.440 --> 00:09:12.240 609Let's encrypt and everything never happened. 610 611153 61200:09:12.920 --> 00:09:18.320 613Of course, in the app proto and decentralized web communities, we have DIDs and totally other 614 615154 61600:09:18.320 --> 00:09:23.480 617stacks of how we would handle some of this stuff. 618 619155 62000:09:23.480 --> 00:09:27.360 621How we would handle key custody, how we would handle authenticity, that kind of thing. 622 623156 62400:09:27.360 --> 00:09:33.040 625PLC directories got its own take on everything. 626 627157 62800:09:33.040 --> 00:09:39.120 629Some good ideas need to be modernized and not try and pay these vendors a bunch of money 630 631158 63200:09:39.120 --> 00:09:41.640 633for certificates. 634 635159 63600:09:41.720 --> 00:09:48.160 637I said all of these things out loud a lot and the good folks at the IPFS Foundation 638 639160 64000:09:48.160 --> 00:09:50.960 641and the DASL project were very, very receptive to it. 642 643161 64400:09:50.960 --> 00:09:53.240 645So they've given us a grant. 646 647162 64800:09:53.240 --> 00:09:59.040 649Everything you see past this point in the presentation is a result of the grant that 650 651163 65200:09:59.040 --> 00:10:01.800 653we got from the IPFS Foundation. 654 655164 65600:10:01.800 --> 00:10:07.880 657So we're working on two specs with them, Stupa and Muxal. 658 659165 66000:10:07.880 --> 00:10:10.960 661Stupa is the simple standard for provenance and authenticity. 662 663166 66400:10:10.960 --> 00:10:13.160 665This is the simpler of the two standards. 666 667167 66800:10:13.160 --> 00:10:14.480 669It's very much, thank you, Ted. 670 671168 67200:10:14.480 --> 00:10:15.480 673Look at that. 674 675169 67600:10:15.480 --> 00:10:16.760 677Ted got me a glass of water. 678 679170 68000:10:16.760 --> 00:10:17.760 681Everybody thank Ted. 682 683171 68400:10:17.760 --> 00:10:19.760 685That was awesome. 686 687172 68800:10:23.280 --> 00:10:29.280 689Stupa is our, I don't know what makes a fork a hostile fork, but it's definitely a fork 690 691173 69200:10:29.280 --> 00:10:32.760 693of the C2PA that takes out all the things. 694 695174 69600:10:32.760 --> 00:10:34.400 697It doesn't really, it actually doesn't take out anything. 698 699175 70000:10:34.400 --> 00:10:38.080 701Like if you want to pay DID just start at 200 bucks a month, you totally can. 702 703176 70400:10:38.080 --> 00:10:39.920 705But we have some different opinions about that. 706 707177 70800:10:39.920 --> 00:10:40.920 709We have DIDS, right? 710 711178 71200:10:40.920 --> 00:10:47.120 713So instead of signing it with some cert that you're given by a CA, you sign it with a signing 714 715179 71600:10:47.120 --> 00:10:53.200 717key that has a provenance chain back to your at-proto identity, right? 718 719180 72000:10:53.200 --> 00:11:00.240 721And then we also make it consistent with DASL, the C2PA signatures, C2PA manifests rather 722 723181 72400:11:00.240 --> 00:11:01.800 725already use Seaboard. 726 727182 72800:11:01.800 --> 00:11:06.640 729So we're just upgrading it to use Drizzle, Drizzle DASLs. 730 731183 73200:11:06.640 --> 00:11:10.240 733Very strict subset of Seaboard used in at-proto, right? 734 735184 73600:11:10.240 --> 00:11:11.240 737That's Stupa. 738 739185 74000:11:11.240 --> 00:11:12.240 741That's all of Stupa. 742 743186 74400:11:12.240 --> 00:11:14.140 745The rest of the presentation is about Muxill because it's way more complicated. 746 747187 74800:11:14.140 --> 00:11:16.920 749This is just a little change that we're making here. 750 751188 75200:11:16.920 --> 00:11:18.080 753Would love if they upstreamed it. 754 755189 75600:11:18.080 --> 00:11:25.920 757Would love if there were DIDS and K256 signing in C2PA. 758 759190 76000:11:25.920 --> 00:11:29.920 761So let's talk about the design goals for Muxill. 762 763191 76400:11:29.920 --> 00:11:33.960 765This is basically what changes do we need to make to those MP4 files that I described 766 767192 76800:11:33.960 --> 00:11:37.840 769before in order to make them appropriate for VOD. 770 771193 77200:11:37.840 --> 00:11:41.800 773So you don't have thousands and thousands of MP4 files on your computer after a long 774 775194 77600:11:41.800 --> 00:11:43.400 777livestream. 778 779195 78000:11:43.400 --> 00:11:46.840 781So we want to keep the property that they're self-certifying. 782 783196 78400:11:46.840 --> 00:11:50.920 785It's awesome that you can just find one of these files and then go verify its provenance 786 787197 78800:11:50.920 --> 00:11:51.920 789chain. 790 791198 79200:11:51.920 --> 00:11:55.780 793It shouldn't be, you shouldn't require external data, right? 794 795199 79600:11:55.780 --> 00:12:01.240 797As a design goal, we want to support livestream to VOD so that what video engineers call DVR, 798 799200 80000:12:01.240 --> 00:12:05.040 801if you're watching a livestream, that you can seek back and see what happened one minute 802 803201 80400:12:05.040 --> 00:12:08.400 805ago, two minutes ago, three minutes ago, that kind of thing. 806 807202 80800:12:08.400 --> 00:12:10.160 809It would be nice if it's a useful format. 810 811203 81200:12:10.160 --> 00:12:13.240 813I don't want to give you some opaque seaboard blob or something. 814 815204 81600:12:13.240 --> 00:12:18.080 817A design goal of this is that at the end of it, you have, at the end of a 24-hour livestream, 818 819205 82000:12:18.080 --> 00:12:21.840 821you should have a 24-hour MP4 file on your computer. 822 823206 82400:12:21.840 --> 00:12:25.840 825Easiest to work with, maximally compatible, preserves all of the provenance information 826 827207 82800:12:25.840 --> 00:12:28.040 829I was describing. 830 831208 83200:12:28.040 --> 00:12:31.040 833And it should be streamable with minimal overhead. 834 835209 83600:12:31.040 --> 00:12:34.720 837I'm not going to get too deep into media over quick in this presentation, though I 838 839210 84000:12:34.720 --> 00:12:36.400 841would love to. 842 843211 84400:12:36.400 --> 00:12:45.720 845But basically, we don't want to do a bunch of extra effort to go from the canonical format 846 847212 84800:12:45.720 --> 00:12:49.680 849that we're going to use for all of this to actually streaming it to users. 850 851213 85200:12:49.680 --> 00:12:52.800 853We shouldn't need to re-encode or anything like that. 854 855214 85600:12:52.800 --> 00:12:57.920 857Unfortunately, that is an impossible series of constraints. 858 859215 86000:12:57.920 --> 00:13:02.560 861Fundamentally, the reason being that if the output is going to be just an MP4 file on 862 863216 86400:13:02.560 --> 00:13:06.640 865your computer, that is completely different than the format the media over quick uses 866 867217 86800:13:06.640 --> 00:13:11.240 869that's going to be useful for sending things to users, in particular with things like multiple 870 871218 87200:13:11.240 --> 00:13:12.240 873tracks. 874 875219 87600:13:12.240 --> 00:13:20.000 877We really want to do multi-track video, multi-track audio, 720p, a bunch of other 1080p, different 878 879220 88000:13:20.000 --> 00:13:22.800 881audio formats, AAC and Opus for different things. 882 883221 88400:13:22.800 --> 00:13:27.320 885All of that complexity we would like to be able to package in this one file, and that 886 887222 88800:13:27.320 --> 00:13:31.000 889skyrockets the bandwidth that you would use to send it out to people. 890 891223 89200:13:31.000 --> 00:13:34.440 893You don't want to send them every rendition, you want to send them just one. 894 895224 89600:13:34.440 --> 00:13:37.800 897So, how do we get around that? 898 899225 90000:13:37.800 --> 00:13:39.280 901And the answer is we mux. 902 903226 90400:13:39.280 --> 00:13:42.640 905This is why it's called muxle. 906 907227 90800:13:42.640 --> 00:13:51.240 909So, the key insight here is that the archival format, so this is to say the MP4 file on 910 911228 91200:13:51.240 --> 00:13:57.080 913your computer, the streaming format, which is the format the video is in when it goes 914 915229 91600:13:57.080 --> 00:14:03.840 917over media over quick, and streams to a user, and the self-certifying format that has this 918 919230 92000:14:03.840 --> 00:14:08.280 921intact signature that you use to validate that the media is who it says it is and get 922 923231 92400:14:08.280 --> 00:14:15.880 925all the nice metadata, they don't all have to be the same format. 926 927232 92800:14:15.880 --> 00:14:20.840 929As long as we can deterministically mux between them. 930 931233 93200:14:20.840 --> 00:14:24.360 933As long as if you have one of these formats, there is a deterministic algorithm you can 934 935234 93600:14:24.360 --> 00:14:28.120 937use to turn it into any one of these other formats. 938 939235 94000:14:28.120 --> 00:14:31.320 941So we've accomplished this with Wasm, primarily. 942 943236 94400:14:31.320 --> 00:14:35.440 945Wasm, especially the latest version of Wasm, has a fully deterministic profile. 946 947237 94800:14:35.440 --> 00:14:40.960 949Even short of that, you know, Rust compiled to Wasm and then you pipe some bytes through 950 951238 95200:14:40.960 --> 00:14:44.960 953it, you're very, very likely to get the same bytes out through the output, right? 954 955239 95600:14:44.960 --> 00:14:51.280 957So this is, yeah, so let's get into the different formats that we're using inside of here. 958 959240 96000:14:51.280 --> 00:14:55.600 961I'm going to get deep into MP4 file specifics. 962 963241 96400:14:55.600 --> 00:15:00.520 965I wouldn't wish this upon anyone having to dive this deep into the MP4 specs. 966 967242 96800:15:00.520 --> 00:15:06.160 969I had to pay $300 for a PDF file. 970 971243 97200:15:06.160 --> 00:15:09.400 973So yes, this is the whole point of StreamPlaces. 974 975244 97600:15:09.400 --> 00:15:14.920 977These are the hard work we do, the hard problems we solve, so none of you have to, right? 978 979245 98000:15:15.840 --> 00:15:22.280 981So we, the base primitives here that are part of Muxle. 982 983246 98400:15:22.280 --> 00:15:25.880 985First we have video metadata. 986 987247 98800:15:25.880 --> 00:15:31.820 989I borrow a lot of this terminology from a spec called Hang that's from Luke Curley who 990 991248 99200:15:31.820 --> 00:15:35.840 993created the media over QuickSpec. 994 995249 99600:15:35.840 --> 00:15:40.920 997This is, catalog is his term for this, but this is all of the metadata that you need 998 999250 100000:15:40.920 --> 00:15:41.920 1001to understand the video. 1002 1003251 100400:15:41.920 --> 00:15:46.160 1005I can't just, video decoders won't just accept some random video bytes. 1006 1007252 100800:15:46.160 --> 00:15:52.360 1009You have to say, no, these video bytes are, for example, 1920 by 1080 at 60 FPS. 1010 1011253 101200:15:52.360 --> 00:15:57.320 1013You've got the time scale and then a canonical track ID for everything that goes into this, 1014 1015254 101600:15:57.320 --> 00:15:58.320 1017right? 1018 1019255 102000:15:58.320 --> 00:15:59.320 1021How many channels is the audio? 1022 1023256 102400:15:59.320 --> 00:16:02.080 1025I don't know if it's listed in here, but this would have stuff like what language is the 1026 1027257 102800:16:02.080 --> 00:16:03.080 1029audio. 1030 1031258 103200:16:03.080 --> 00:16:06.200 1033If we've got the audio translated into several different languages, that would be included 1034 1035259 103600:16:06.200 --> 00:16:07.520 1037in this metadata. 1038 1039260 104000:16:07.520 --> 00:16:14.320 1041This is nice to separate out because from a low latency transmission perspective, you 1042 1043261 104400:16:14.320 --> 00:16:15.880 1045don't want to repeat this stuff, right? 1046 1047262 104800:16:15.880 --> 00:16:19.640 1049You don't want to say, hey, 1080p video, 1080p video, you know it's 1080p video because the 1050 1051263 105200:16:19.640 --> 00:16:22.500 1053last 500 segments were 1080p video, right? 1054 1055264 105600:16:22.500 --> 00:16:28.040 1057So we send, we can send this once at the start and not have to repeat it. 1058 1059265 106000:16:28.040 --> 00:16:32.520 1061I'm not quite getting into the at-proto stuff here, but just at the bottom there, a little 1062 1063266 106400:16:32.520 --> 00:16:36.520 1065teaser of what this might look like if you wanted to put it in that proto repository, 1066 1067267 106800:16:36.520 --> 00:16:40.120 1069this could be a place.stream.muxle.catalog record. 1070 1071268 107200:16:40.120 --> 00:16:43.680 1073We'll get to how it actually works in a minute. 1074 1075269 107600:16:43.680 --> 00:16:45.720 1077This lets us make init segments. 1078 1079270 108000:16:45.720 --> 00:16:47.240 1081Now we're talking about MP4 atoms. 1082 1083271 108400:16:47.240 --> 00:16:50.480 1085This is fun. 1086 1087272 108800:16:50.480 --> 00:16:59.400 1089So this data represented as like JSON or CBOR or whatever and stored in your at-proto repository 1090 1091273 109200:16:59.400 --> 00:17:05.280 1093is enough to create, actually deterministically create the start of the MP4 file, which is 1094 1095274 109600:17:05.280 --> 00:17:06.280 1097called the init segment. 1098 1099275 110000:17:06.280 --> 00:17:09.760 1101It's the very beginning of the MP4 file that contains the file type atom telling you this 1102 1103276 110400:17:09.760 --> 00:17:16.600 1105is an MP4 file and the move atom that describes, for example, the duration of the video, what 1106 1107277 110800:17:16.600 --> 00:17:17.600 1109all the tracks are. 1110 1111278 111200:17:17.600 --> 00:17:22.040 1113There's a bunch of, this is like the MP4 encoding of all that metadata that I just described. 1114 1115279 111600:17:22.040 --> 00:17:26.840 1117This is the beginning of the muxle file init segment. 1118 1119280 112000:17:26.840 --> 00:17:33.640 1121We then split up the video into muxle segments. 1122 1123281 112400:17:33.640 --> 00:17:37.680 1125This again is borrowed, this is pretty much a verbatim hang CMAF, which is part of the 1126 1127282 112800:17:37.680 --> 00:17:41.440 1129video over QuickSpec, which is awesome because that means it's going to stream very efficiently 1130 1131283 113200:17:41.440 --> 00:17:45.000 1133to users eventually. 1134 1135284 113600:17:45.000 --> 00:17:46.920 1137This is just repeated. 1138 1139285 114000:17:46.920 --> 00:17:52.040 1141Every frame gets its own, what's called a muf and an MDAT, so little segments, little 1142 1143286 114400:17:52.040 --> 00:18:00.880 1145slivers of the MP4 file that represent each frame, each video or audio frame, essentially. 1146 1147287 114800:18:00.880 --> 00:18:05.120 1149Easy enough, but we're going to do a lot with these in a minute. 1150 1151288 115200:18:05.120 --> 00:18:12.120 1153And then we go back to that stupa specification I was talking about a second ago, the CTPA 1154 1155289 115600:18:12.120 --> 00:18:13.120 1157stuff. 1158 1159290 116000:18:13.120 --> 00:18:18.160 1161So this is, we can take, this is the canonical signed format. 1162 1163291 116400:18:18.160 --> 00:18:22.640 1165This is the thing that you, when you get this format, you can validate the signature, validate 1166 1167292 116800:18:22.640 --> 00:18:23.640 1169the provenance claim. 1170 1171293 117200:18:23.640 --> 00:18:30.480 1173No, this is actually definitely Eli's CTPA signed video file. 1174 1175294 117600:18:30.480 --> 00:18:34.160 1177This is actually me beating Trabio or whatever. 1178 1179295 118000:18:34.160 --> 00:18:38.480 1181And this is, this is great. 1182 1183296 118400:18:38.480 --> 00:18:43.960 1185This is not necessarily the best format for archival and playback. 1186 1187297 118800:18:43.960 --> 00:18:49.520 1189So one key insight and the Eureka moment I had when making this is like, okay, so this 1190 1191298 119200:18:49.520 --> 00:18:54.640 1193is like the canonical thing, but you wouldn't ever write this to your hard drive. 1194 1195299 119600:18:54.640 --> 00:18:59.960 1197Or if you did because you're repeating the beginning of the file, the file type stuff, 1198 1199300 120000:18:59.960 --> 00:19:03.560 1201this is how, this would get you right back to one second MP4 files on your computer 1202 1203301 120400:19:03.560 --> 00:19:05.320 1205over and over and over. 1206 1207302 120800:19:05.320 --> 00:19:10.360 1209So while this is like, you consider this like the base unit of stream play streaming or 1210 1211303 121200:19:10.360 --> 00:19:15.040 1213a VOD or what have you, this, yeah, you'd never actually write one of these to the hard 1214 1215304 121600:19:15.040 --> 00:19:17.720 1217drive unless you were like debugging or something like that. 1218 1219305 122000:19:17.720 --> 00:19:19.360 1221What would you write to the hard drive? 1222 1223306 122400:19:19.360 --> 00:19:20.360 1225You ask. 1226 1227307 122800:19:20.360 --> 00:19:23.640 1229You would write a muxal archive. 1230 1231308 123200:19:23.640 --> 00:19:24.640 1233Blake three. 1234 1235309 123600:19:24.640 --> 00:19:26.880 1237I know, hang out with that proto people. 1238 1239310 124000:19:26.880 --> 00:19:28.840 1241I know a lot of protocol engineers. 1242 1243311 124400:19:28.840 --> 00:19:32.480 1245Every one of them has had a moment where they take me aside and they're like, you should 1246 1247312 124800:19:32.480 --> 00:19:35.520 1249really be using Blake three for this stuff. 1250 1251313 125200:19:35.520 --> 00:19:39.040 1253And I agree with them eventually. 1254 1255314 125600:19:39.040 --> 00:19:41.440 1257So this is what you would write to your hard drive, right? 1258 1259315 126000:19:41.440 --> 00:19:44.040 1261So this is the in it segment. 1262 1263316 126400:19:44.040 --> 00:19:46.760 1265This is the part where you say it's 1080p video. 1266 1267317 126800:19:46.760 --> 00:19:49.240 1269Then you have all of these. 1270 1271318 127200:19:49.240 --> 00:19:51.100 1273Each of these is what's called a gop segment. 1274 1275319 127600:19:51.100 --> 00:19:55.080 1277So a key frame, a video followed by a bunch of other frames and then a key frame and then 1278 1279320 128000:19:55.080 --> 00:19:57.160 1281a bunch of other frames. 1282 1283321 128400:19:57.160 --> 00:20:03.640 1285And the cool thing about this is we've totally messed up the signature now, right? 1286 1287322 128800:20:03.640 --> 00:20:09.680 1289Because we, the signature is over this file with a in it segment and a video gop and an 1290 1291323 129200:20:09.680 --> 00:20:11.560 1293audio gop and then a manifest, right? 1294 1295324 129600:20:11.560 --> 00:20:14.000 1297This is, this is the thing that we signed. 1298 1299325 130000:20:14.000 --> 00:20:15.360 1301This doesn't look like that at all. 1302 1303326 130400:20:15.360 --> 00:20:18.120 1305I've even just kind of put the manifest at the, at the end there. 1306 1307327 130800:20:18.120 --> 00:20:22.120 1309But because we have deterministic muxing tools, we can recover this. 1310 1311328 131200:20:22.120 --> 00:20:27.640 1313We can, or we can recover the signed canonical thing, right? 1314 1315329 131600:20:27.640 --> 00:20:34.920 1317This format, however, is really, really useful for VOD because if you are, I'll show you 1318 1319330 132000:20:34.920 --> 00:20:36.800 1321why. 1322 1323331 132400:20:36.800 --> 00:20:39.740 1325See it's like this. 1326 1327332 132800:20:39.740 --> 00:20:42.880 1329So this is a HLS playlist. 1330 1331333 133200:20:42.880 --> 00:20:48.280 1333This is how you, you don't know it, but most of the time you've played video on the internet. 1334 1335334 133600:20:48.280 --> 00:20:51.440 1337You've had one of these happening in the background. 1338 1339335 134000:20:51.440 --> 00:20:55.160 1341And what this does is takes all of those, this is just the video playlist. 1342 1343336 134400:20:55.160 --> 00:20:56.640 1345This just tells you how to do the video. 1346 1347337 134800:20:56.640 --> 00:21:01.560 1349The audio is referenced in a, in a different, in a different manifest. 1350 1351338 135200:21:01.560 --> 00:21:08.640 1353And basically what this gives you is a byte range in an index into that file. 1354 1355339 135600:21:08.640 --> 00:21:11.120 1357So you can say this, this year says, this is one second of video. 1358 1359340 136000:21:11.120 --> 00:21:12.760 1361You can find it at this index of this file. 1362 1363341 136400:21:12.760 --> 00:21:13.760 1365This is one second of video. 1366 1367342 136800:21:13.760 --> 00:21:16.480 1369You can find it at this index of this file. 1370 1371343 137200:21:16.480 --> 00:21:19.200 1373And this is all, this is all you need for efficient VOD playback. 1374 1375344 137600:21:19.200 --> 00:21:22.640 1377If you're doing it live, there's disadvantages to doing it this way. 1378 1379345 138000:21:22.640 --> 00:21:25.120 1381You probably want to use media over quick and some of the other formats that we talked 1382 1383346 138400:21:25.120 --> 00:21:26.120 1385about. 1386 1387347 138800:21:26.120 --> 00:21:28.520 1389But for VOD, this is really, really good. 1390 1391348 139200:21:28.520 --> 00:21:33.160 1393And we've achieved one of our design goals because all of these, it's just referencing 1394 1395349 139600:21:33.160 --> 00:21:37.080 1397different byte ranges in archive.muxle.mp4, right? 1398 1399350 140000:21:37.080 --> 00:21:41.720 1401So we've, the thing that is, I've been saying on your computer, but the thing for video, 1402 1403351 140400:21:41.720 --> 00:21:48.120 1405the thing that's in your app repository is, is just one big MP4 file. 1406 1407352 140800:21:48.120 --> 00:21:52.560 1409It's really easy to understand. 1410 1411353 141200:21:52.560 --> 00:22:00.920 1413The other, the other thing we get from this is, is the Blake three, Sid, the magic of 1414 1415354 141600:22:00.920 --> 00:22:01.920 1417Blake three. 1418 1419355 142000:22:01.920 --> 00:22:04.920 1421Why, why was it that all those video engineers were telling me that I needed to use Blake 1422 1423356 142400:22:04.920 --> 00:22:05.920 1425three? 1426 1427357 142800:22:05.920 --> 00:22:14.240 1429It's because this Blake three hash is a Merkle tree over this file that you see here, which 1430 1431358 143200:22:14.240 --> 00:22:19.960 1433means you can request to just that part that says track one, gop one there. 1434 1435359 143600:22:19.960 --> 00:22:25.960 1437And through cryptographic verification, you can be 100% confident that that is the correct 1438 1439360 144000:22:25.960 --> 00:22:27.960 1441data that you've pulled out of there, right? 1442 1443361 144400:22:27.960 --> 00:22:32.080 1445You can verify, yes, this is in fact part of this Blake three, Sid, which is really, 1446 1447362 144800:22:32.080 --> 00:22:37.440 1449really useful when you're doing something like a CDN because then you can make all these, 1450 1451363 145200:22:37.440 --> 00:22:40.560 1453you can have be backing it with just one big file. 1454 1455364 145600:22:40.560 --> 00:22:42.400 1457You can make these byte range requests. 1458 1459365 146000:22:42.400 --> 00:22:47.120 1461You still get the cryptographic integrity that like, oh yes, that, that, that hash matches 1462 1463366 146400:22:47.120 --> 00:22:50.600 1465what I saw in Eli's app repository. 1466 1467367 146800:22:50.600 --> 00:22:53.120 1469So this is a really, really good format for this. 1470 1471368 147200:22:53.120 --> 00:22:54.960 1473Um, cool. 1474 1475369 147600:22:54.960 --> 00:23:02.680 1477So yes, three different formats that we, uh, uh, that we have here. 1478 1479370 148000:23:02.680 --> 00:23:07.320 1481So, um, the archival format, which is the big MP4 file that goes in your app, proto 1482 1483371 148400:23:07.320 --> 00:23:12.880 1485repository, the self certifying format, which is the part that has the, uh, C2P a signature 1486 1487372 148800:23:12.880 --> 00:23:16.760 1489attached and the streaming format, which is just when you're actually sending it out, 1490 1491373 149200:23:16.760 --> 00:23:19.360 1493you just send, uh, you just send this part, right? 1494 1495374 149600:23:19.360 --> 00:23:25.280 1497You stream this stuff, uh, each, each frame of video and audio directly to users. 1498 1499375 150000:23:25.280 --> 00:23:29.840 1501So for all the at proto people that didn't care about all the different structures of 1502 1503376 150400:23:29.840 --> 00:23:33.600 1505the MP4 file, how do you use all of this? 1506 1507377 150800:23:33.600 --> 00:23:36.280 1509We're not quite ready for it, but the very first vods available on stream play. 1510 1511378 151200:23:36.280 --> 00:23:40.160 1513Most are going to follow this format and it's going to be all of the talks from this 1514 1515379 151600:23:40.160 --> 00:23:41.160 1517conference. 1518 1519380 152000:23:41.160 --> 00:23:44.080 1521Uh, they will be published to at proto repository. 1522 1523381 152400:23:44.080 --> 00:23:45.840 1525Um, and you'll be able to work with them. 1526 1527382 152800:23:45.840 --> 00:23:48.560 1529This is a little preview of what this looks like. 1530 1531383 153200:23:48.560 --> 00:23:54.760 1533Uh, so we have a, uh, yeah. 1534 1535384 153600:23:54.760 --> 00:23:59.600 1537So the man that as you might expect the, the lexicon type for this is a place.stream.video. 1538 1539385 154000:23:59.600 --> 00:24:04.460 1541It's got, uh, things like creator, um, some of the, some of this metadata in here. 1542 1543386 154400:24:04.460 --> 00:24:06.740 1545This is like, I'm pretending this is the one for this talk. 1546 1547387 154800:24:06.740 --> 00:24:09.380 1549I don't have a vod for this talk cause I'm still doing this talk. 1550 1551388 155200:24:09.380 --> 00:24:11.220 1553So you don't know what the hash is yet. 1554 1555389 155600:24:11.220 --> 00:24:14.820 1557Um, it's got, it's just as I said, it's just a blob. 1558 1559390 156000:24:14.820 --> 00:24:16.140 1561It's a video MP4 file. 1562 1563391 156400:24:16.140 --> 00:24:19.500 1565Um, but it is very, very easily cacheable. 1566 1567392 156800:24:19.500 --> 00:24:22.700 1569Um, you've got a nanosecond duration in there. 1570 1571393 157200:24:22.700 --> 00:24:27.280 1573Uh, we, the design constraints for this I've been targeting that the maximum length of 1574 1575394 157600:24:27.280 --> 00:24:29.860 1577one of these is going to be 24 hours. 1578 1579395 158000:24:29.860 --> 00:24:33.660 1581Um, because, uh, at a certain point it gets ridiculous. 1582 1583396 158400:24:33.860 --> 00:24:36.860 1585Yeah. 1586 1587397 158800:24:36.860 --> 00:24:38.540 1589Uh, and I don't want to like overflow the nanosecond duration, but if you've got a 24 1590 1591398 159200:24:38.540 --> 00:24:42.220 1593seven live stream, that seems like a reasonable primitive that like each day of streaming 1594 1595399 159600:24:42.220 --> 00:24:46.300 1597that you would stream into would become its own vod, uh, with a 24 hour duration. 1598 1599400 160000:24:46.300 --> 00:24:47.300 1601Right. 1602 1603401 160400:24:47.300 --> 00:24:49.180 1605Um, and then it's got a live stream reference. 1606 1607402 160800:24:49.180 --> 00:24:51.700 1609So, uh, yeah. 1610 1611403 161200:24:51.700 --> 00:24:53.300 1613So, uh, all of this will be available. 1614 1615404 161600:24:53.300 --> 00:24:54.300 1617Yeah. 1618 1619405 162000:24:54.300 --> 00:24:56.140 1621I was hoping to have all of this available and I was like, Oh, I got an ounce in this 1622 1623406 162400:24:56.140 --> 00:24:57.140 1625talk and it's going to be big. 1626 1627407 162800:24:57.140 --> 00:24:58.340 1629And we're like really, really close. 1630 1631408 163200:24:58.340 --> 00:25:01.820 1633But I wasn't, I didn't want to push a bunch of changes to stream place right before we 1634 1635409 163600:25:01.820 --> 00:25:04.020 1637did all the live streaming and screw everything else up. 1638 1639410 164000:25:04.020 --> 00:25:05.020 1641Right. 1642 1643411 164400:25:05.020 --> 00:25:08.700 1645So I, I, I did try to do that. 1646 1647412 164800:25:08.700 --> 00:25:10.860 1649Uh, we did that. 1650 1651413 165200:25:10.860 --> 00:25:13.740 1653Uh, I did at about seven 10 this morning. 1654 1655414 165600:25:13.740 --> 00:25:15.900 1657I'm like, all right, let's push the muxal changes. 1658 1659415 166000:25:15.900 --> 00:25:16.900 1661Let's see. 1662 1663416 166400:25:16.900 --> 00:25:20.660 1665And then immediately that laptop couldn't stream into stream place anymore for whatever 1666 1667417 166800:25:20.660 --> 00:25:21.660 1669reason. 1670 1671418 167200:25:21.660 --> 00:25:23.220 1673So I was like, Nope, Nope, back revert. 1674 1675419 167600:25:23.220 --> 00:25:24.780 1677We're gonna, we'll do it. 1678 1679420 168000:25:24.780 --> 00:25:25.780 1681We'll do it after. 1682 1683421 168400:25:25.780 --> 00:25:29.740 1685Um, so that's all by way of saying this is all very, very close. 1686 1687422 168800:25:30.100 --> 00:25:33.700 1689Um, and we're hoping to give it to the community very, very soon. 1690 1691423 169200:25:34.260 --> 00:25:37.180 1693Um, and, uh, yeah, and then build it with everybody, right? 1694 1695424 169600:25:37.180 --> 00:25:38.300 1697So we don't have a front end for it. 1698 1699425 170000:25:38.340 --> 00:25:41.780 1701Um, I'm going to challenge the, we're going to do a little VOD jam and say, Hey, at 1702 1703426 170400:25:41.780 --> 00:25:44.380 1705proto community, here's the videos, build me a front end for it. 1706 1707427 170800:25:44.580 --> 00:25:49.100 1709Given that without me asking, we got three front ends for stream place in the last 1710 1711428 171200:25:49.100 --> 00:25:52.740 1713three days, I feel like in the vibe coding era, we're gonna, we're gonna get some 1714 1715429 171600:25:52.740 --> 00:25:53.380 1717submissions. 1718 1719430 172000:25:53.380 --> 00:25:57.420 1721If you submit one of these, uh, you're going to earn a badge next to your chat 1722 1723431 172400:25:57.420 --> 00:25:58.860 1725name in stream place. 1726 1727432 172800:25:59.340 --> 00:26:02.220 1729Um, from now until the end of time. 1730 1731433 173200:26:03.100 --> 00:26:06.100 1733So, uh, yeah, that's it. 1734 1735434 173600:26:06.140 --> 00:26:07.620 1737That's how stream place works VOD. 1738 1739435 174000:26:19.220 --> 00:26:19.500 1741Great. 1742 1743436 174400:26:21.460 --> 00:26:21.900 1745Awesome. 1746 1747437 174800:26:27.020 --> 00:26:27.300 1749Yeah. 1750 1751438 175200:26:29.380 --> 00:26:30.340 1753Yeah. 1754 1755439 175600:26:30.340 --> 00:26:34.780 1757So the, the big alternative, um, why MP4, uh, there's a couple of reasons. 1758 1759440 176000:26:35.020 --> 00:26:39.940 1761Um, one because, uh, it's the most ubiquitous media format and the, that's 1762 1763441 176400:26:39.940 --> 00:26:41.420 1765the most highly compatible across everything. 1766 1767442 176800:26:41.940 --> 00:26:47.860 1769Um, the second is, um, it gives us the, uh, the, the, the media over quick 1770 1771443 177200:26:47.860 --> 00:26:50.140 1773stuff, um, tends to support it a lot already. 1774 1775444 177600:26:50.660 --> 00:26:54.700 1777Um, the, also the FM, uh, so this is like CMAF. 1778 1779445 178000:26:54.700 --> 00:26:58.140 1781Back to the, this thing, this is like CMAF MP4 playback. 1782 1783446 178400:26:58.180 --> 00:27:02.500 1785Um, and the advantage here is it lets you, um, separate out the, it gives you that 1786 1787447 178800:27:02.500 --> 00:27:05.780 1789lack of redundancy that I was describing where the in it segment isn't, there are 1790 1791448 179200:27:05.780 --> 00:27:08.980 1793other formats that embed all of that in a data in every segment, but we don't 1794 1795449 179600:27:08.980 --> 00:27:11.820 1797actually want that because it's redundant for, for a long video. 1798 1799450 180000:27:11.820 --> 00:27:13.900 1801So, um, yeah, those reasons. 1802 1803451 180400:27:14.900 --> 00:27:16.420 1805Sure. 1806 1807452 180800:27:16.420 --> 00:27:21.380 1809Uh, the question was, uh, the, the question was, uh, the, the, the, the, the, 1810 1811453 181200:27:22.060 --> 00:27:23.100 1813sure, sure, sure. 1814 1815454 181600:27:23.140 --> 00:27:28.220 1817Uh, the question was why VP nine instead of, or why H two six four instead 1818 1819455 182000:27:28.220 --> 00:27:31.740 1821of like VP nine or AV one, no reason other than maximally, maximum 1822 1823456 182400:27:31.740 --> 00:27:36.080 1825compatibility right now, we really, really want, uh, AV one in, in stream 1826 1827457 182800:27:36.080 --> 00:27:40.900 1829place, um, we fully intend to support AV one as much as we do H two six four, 1830 1831458 183200:27:40.900 --> 00:27:44.540 1833especially when we do stuff like, like, uh, uh, I want to replace to do a lot 1834 1835459 183600:27:44.540 --> 00:27:48.020 1837of things that no other streaming platforms do, like for example, uh, like 1838 1839460 184000:27:48.020 --> 00:27:54.100 1841four K 120 FPS AV one video would be SISIC, uh, uh, can't even do it. 1842 1843461 184400:27:54.100 --> 00:27:55.380 1845I've tried to do it with H two six four. 1846 1847462 184800:27:55.380 --> 00:27:59.380 1849It just like doesn't know encoder can even come close to handling that. 1850 1851463 185200:27:59.380 --> 00:28:00.820 1853So, um, yeah, yeah. 1854 1855464 185600:28:00.860 --> 00:28:02.980 1857Uh, in terms of codec support, we want to support like every 1858 1859465 186000:28:02.980 --> 00:28:04.060 1861codec that it makes sense to. 1862 1863466 186400:28:04.420 --> 00:28:07.040 1865We just started with this because we're not quite in a world where I could 1866 1867467 186800:28:07.040 --> 00:28:08.980 1869probably get away with AV one only. 1870 1871468 187200:28:09.020 --> 00:28:13.260 1873And we would have needed an H two six four backup anyway, in that context. 1874 1875469 187600:28:13.260 --> 00:28:15.800 1877That's why we started with H two six four, but yeah, definitely 1878 1879470 188000:28:15.800 --> 00:28:16.700 1881want to support lots of codex. 1882 1883471 188400:28:18.020 --> 00:28:18.520 1885Yeah. 1886 1887472 188800:28:24.560 --> 00:28:24.900 1889Thank you. 1890