Do some fun SDP rewriting to hopefully get better quality

This commit is contained in:
Marks Polakovs 2020-04-10 16:16:43 +02:00
parent c025ae95ae
commit 4a70fb405f
4 changed files with 35 additions and 2 deletions

View file

@ -21,6 +21,7 @@
"@types/react-redux": "^7.1.5",
"@types/reactstrap": "^8.4.2",
"@types/redux-persist": "^4.3.1",
"@types/sdp-transform": "^2.4.3",
"@types/wavesurfer.js": "^3.2.0",
"@types/webpack-env": "^1.14.1",
"@typescript-eslint/eslint-plugin": "^2.2.0",
@ -83,6 +84,7 @@
"resolve": "1.12.0",
"resolve-url-loader": "3.1.0",
"sass-loader": "7.2.0",
"sdp-transform": "^2.14.0",
"semver": "6.3.0",
"style-loader": "1.0.0",
"terser-webpack-plugin": "1.4.1",

View file

@ -1,3 +1,5 @@
import SdpTransform from "sdp-transform";
import {
Streamer,
ConnectionStateListener,
@ -70,7 +72,24 @@ export class WebRTCStreamer extends Streamer {
this.ws!.close();
}
const offer = await this.pc.createOffer();
// TODO do some fun SDP fuckery to get quality
// Do some fun SDP fuckery to get better quality
const parsed = SdpTransform.parse(offer.sdp!);
console.log("Old SDP", parsed);
parsed.media.forEach(track => {
let opusIndex = 0;
for (let i = 0; i < track.rtp.length; i++) {
if (track.rtp[i].codec === "opus") {
opusIndex = i;
}
// TODO: maybe delete non-Opus candidates?
}
track.fmtp[opusIndex].config += `; maxaveragebitrate=${192 * 2 * 1024}; stereo=1; sprop-stereo=1 ; cbr=1`;
});
offer.sdp = SdpTransform.write(parsed);
console.log("New SDP", offer.sdp);
await this.pc.setLocalDescription(offer);
await this.waitForIceCandidates();
this.ws!.send(

View file

@ -69,7 +69,9 @@ export function NavBar() {
onClick={() =>
dispatch(
broadcastState.connectionState ===
"NOT_CONNECTED"
"NOT_CONNECTED" ||
broadcastState.connectionState ===
"CONNECTION_LOST"
? BroadcastState.startStreaming()
: BroadcastState.stopStreaming()
)

View file

@ -1550,6 +1550,11 @@
dependencies:
"@types/node" "*"
"@types/sdp-transform@^2.4.3":
version "2.4.3"
resolved "https://registry.yarnpkg.com/@types/sdp-transform/-/sdp-transform-2.4.3.tgz#67cb3e8319f2de37e95e376002b89e870e19c69e"
integrity sha512-DaDNfnjtnO2KMw0XxO3cUEs9G6wioOCWnUTG/g24zh1jccCsV5hzHILZoDRds0LLFhKcMEJfoC7YFuMAYL51uw==
"@types/shallowequal@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@types/shallowequal/-/shallowequal-1.1.1.tgz#aad262bb3f2b1257d94c71d545268d592575c9b1"
@ -9538,6 +9543,11 @@ scss-tokenizer@^0.2.3:
js-base64 "^2.1.8"
source-map "^0.4.2"
sdp-transform@^2.14.0:
version "2.14.0"
resolved "https://registry.yarnpkg.com/sdp-transform/-/sdp-transform-2.14.0.tgz#222452e79e335f000fb9a9a2850021265d1da12d"
integrity sha512-8ZYOau/o9PzRhY0aMuRzvmiM6/YVQR8yjnBScvZHSdBnywK5oZzAJK+412ZKkDq29naBmR3bRw8MFu0C01Gehg==
select-hose@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"