temp
This commit is contained in:
parent
8e1c8d13e2
commit
17250fc1a5
|
@ -17,6 +17,3 @@ mkcert -ecdsa -cert-file "$CRT" -key-file "$KEY" localhost 127.0.0.1 ::1
|
||||||
# Reduce the expiration time of the certificate to 14 days; the WebTransport maximum.
|
# Reduce the expiration time of the certificate to 14 days; the WebTransport maximum.
|
||||||
# TODO https://github.com/FiloSottile/mkcert/pull/513
|
# TODO https://github.com/FiloSottile/mkcert/pull/513
|
||||||
openssl x509 -days 14 -in "$CRT" -signkey "$KEY" -out "$CRT"
|
openssl x509 -days 14 -in "$CRT" -signkey "$KEY" -out "$CRT"
|
||||||
|
|
||||||
# Compute the sha256 fingerprint of the certificate for WebTransport
|
|
||||||
# openssl x509 -in "$CRT" -outform der | openssl dgst -sha256
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
50e151a79d06af6b9289180af319ca974e227d9ec58c30362c9304e56df3e3ea
|
|
@ -6,9 +6,10 @@
|
||||||
"check": "tsc --noEmit"
|
"check": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@parcel/transformer-inline-string": "2.8.3",
|
||||||
"@parcel/validator-typescript": "^2.6.0",
|
"@parcel/validator-typescript": "^2.6.0",
|
||||||
|
"@types/dom-webcodecs": "^0.1.6",
|
||||||
"parcel": "^2.8.0",
|
"parcel": "^2.8.0",
|
||||||
"typescript": ">=3.0.0",
|
"typescript": ">=3.0.0"
|
||||||
"@types/dom-webcodecs": "^0.1.6"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
642ab03bc58c48ed614e6523d93c2455d8223aedfbdcba7f502ca0ea08590921
|
|
@ -3,6 +3,7 @@ import * as Stream from "../stream"
|
||||||
import * as MP4 from "../mp4"
|
import * as MP4 from "../mp4"
|
||||||
|
|
||||||
import Video from "../video/index"
|
import Video from "../video/index"
|
||||||
|
import fingerprint from 'bundle-text:./fingerprint.hex';
|
||||||
|
|
||||||
///<reference path="./types/webtransport.d.ts"/>
|
///<reference path="./types/webtransport.d.ts"/>
|
||||||
|
|
||||||
|
@ -43,29 +44,16 @@ export class Player {
|
||||||
}
|
}
|
||||||
|
|
||||||
async connect(url: string): Promise<WebTransport> {
|
async connect(url: string): Promise<WebTransport> {
|
||||||
// TODO remove this when WebTransport supports the system CA pool
|
|
||||||
const fingerprintURL = new URL(url);
|
|
||||||
fingerprintURL.pathname = "/fingerprint"
|
|
||||||
|
|
||||||
const response = await fetch(fingerprintURL)
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error('failed to get server fingerprint');
|
|
||||||
}
|
|
||||||
|
|
||||||
const hex = await response.text()
|
|
||||||
|
|
||||||
// Convert the hex to binary.
|
// Convert the hex to binary.
|
||||||
let fingerprint = [];
|
let hash = [];
|
||||||
for (let c = 0; c < hex.length; c += 2) {
|
for (let c = 0; c < fingerprint.length; c += 2) {
|
||||||
fingerprint.push(parseInt(hex.substring(c, c+2), 16));
|
hash.push(parseInt(fingerprint.substring(c, c+2), 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
//const fingerprint = Uint8Array.from(atob(hex), c => c.charCodeAt(0))
|
|
||||||
|
|
||||||
const quic = new WebTransport(url, {
|
const quic = new WebTransport(url, {
|
||||||
"serverCertificateHashes": [{
|
"serverCertificateHashes": [{
|
||||||
"algorithm": "sha-256",
|
"algorithm": "sha-256",
|
||||||
"value": new Uint8Array(fingerprint),
|
"value": new Uint8Array(hash),
|
||||||
}]
|
}]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -60,8 +60,6 @@ export class Renderer {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("dropping frame")
|
|
||||||
|
|
||||||
frame.close()
|
frame.close()
|
||||||
|
|
||||||
this.queue.shift()
|
this.queue.shift()
|
||||||
|
|
|
@ -576,6 +576,13 @@
|
||||||
"@parcel/workers" "2.8.3"
|
"@parcel/workers" "2.8.3"
|
||||||
nullthrows "^1.1.1"
|
nullthrows "^1.1.1"
|
||||||
|
|
||||||
|
"@parcel/transformer-inline-string@2.8.3":
|
||||||
|
version "2.8.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@parcel/transformer-inline-string/-/transformer-inline-string-2.8.3.tgz#693f13dd3d3f5f19c3af9389643328328496ace5"
|
||||||
|
integrity sha512-TBMk2H9nV8JMOsLztalhzS6HgthG5SCHKYkR2MaW7eSZuSGotbSP22aJip8HgQZ/lPMdOMb1lknHmd8WROxWHg==
|
||||||
|
dependencies:
|
||||||
|
"@parcel/plugin" "2.8.3"
|
||||||
|
|
||||||
"@parcel/transformer-js@2.8.3":
|
"@parcel/transformer-js@2.8.3":
|
||||||
version "2.8.3"
|
version "2.8.3"
|
||||||
resolved "https://registry.yarnpkg.com/@parcel/transformer-js/-/transformer-js-2.8.3.tgz#fe400df428394d1e7fe5afb6dea5c7c858e44f03"
|
resolved "https://registry.yarnpkg.com/@parcel/transformer-js/-/transformer-js-2.8.3.tgz#fe400df428394d1e7fe5afb6dea5c7c858e44f03"
|
||||||
|
|
|
@ -20,7 +20,7 @@ require (
|
||||||
github.com/marten-seemann/qtls-go1-18 v0.1.3 // indirect
|
github.com/marten-seemann/qtls-go1-18 v0.1.3 // indirect
|
||||||
github.com/marten-seemann/qtls-go1-19 v0.1.1 // indirect
|
github.com/marten-seemann/qtls-go1-19 v0.1.1 // indirect
|
||||||
github.com/onsi/ginkgo/v2 v2.2.0 // indirect
|
github.com/onsi/ginkgo/v2 v2.2.0 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871 // indirect
|
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect
|
||||||
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect
|
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect
|
||||||
|
|
|
@ -77,7 +77,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
|
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/lucas-clemente/quic-go v0.31.0 h1:MfNp3fk0wjWRajw6quMFA3ap1AVtlU+2mtwmbVogB2M=
|
|
||||||
github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
|
github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
|
||||||
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||||
github.com/marten-seemann/qpack v0.3.0 h1:UiWstOgT8+znlkDPOg2+3rIuYXJ2CnGDkGUXN6ki6hE=
|
github.com/marten-seemann/qpack v0.3.0 h1:UiWstOgT8+znlkDPOg2+3rIuYXJ2CnGDkGUXN6ki6hE=
|
||||||
|
@ -153,8 +152,8 @@ golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnf
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871 h1:/pEO3GD/ABYAjuakUS6xSEmmlyVS4kxBNkeA9tLJiTI=
|
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o=
|
||||||
golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA=
|
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA=
|
||||||
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA=
|
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA=
|
||||||
|
|
|
@ -176,6 +176,11 @@ func (s *Session) writeInit(ctx context.Context, init *MediaInit) (err error) {
|
||||||
return fmt.Errorf("failed to create stream: %w", err)
|
return fmt.Errorf("failed to create stream: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if temp == nil {
|
||||||
|
// Not sure when this happens, perhaps when closing a connection?
|
||||||
|
return fmt.Errorf("received a nil stream from quic-go")
|
||||||
|
}
|
||||||
|
|
||||||
// Wrap the stream in an object that buffers writes instead of blocking.
|
// Wrap the stream in an object that buffers writes instead of blocking.
|
||||||
stream := NewStream(temp)
|
stream := NewStream(temp)
|
||||||
s.streams.Add(stream.Run)
|
s.streams.Add(stream.Run)
|
||||||
|
@ -217,7 +222,7 @@ func (s *Session) writeSegment(ctx context.Context, segment *MediaSegment) (err
|
||||||
|
|
||||||
if temp == nil {
|
if temp == nil {
|
||||||
// Not sure when this happens, perhaps when closing a connection?
|
// Not sure when this happens, perhaps when closing a connection?
|
||||||
return fmt.Errorf("received a nil stream from quic-go: %w", err)
|
return fmt.Errorf("received a nil stream from quic-go")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wrap the stream in an object that buffers writes instead of blocking.
|
// Wrap the stream in an object that buffers writes instead of blocking.
|
||||||
|
|
|
@ -56,6 +56,8 @@ func run(ctx context.Context) (err error) {
|
||||||
hash := sha256.Sum256(tlsCert.Certificate[0])
|
hash := sha256.Sum256(tlsCert.Certificate[0])
|
||||||
fingerprint := hex.EncodeToString(hash[:])
|
fingerprint := hex.EncodeToString(hash[:])
|
||||||
|
|
||||||
|
fmt.Println(fingerprint)
|
||||||
|
|
||||||
webConfig := web.Config{
|
webConfig := web.Config{
|
||||||
Addr: *addr,
|
Addr: *addr,
|
||||||
CertFile: *cert,
|
CertFile: *cert,
|
||||||
|
|
Loading…
Reference in New Issue