RTCMultiConnection สามารถใช้ H264 แทน VP9 สำหรับการแชร์หน้าจอได้หรือไม่

ฉันกำลังทำงานในโปรเจ็กต์ที่เกี่ยวข้องกับการแชร์หน้าจอ และปัญหาเดียวที่ฉันพบคือจำเป็นต้องแสดงหน้าจอที่แชร์จากพีซีหรือ Mac (เบราว์เซอร์ Chromium อันที่จริงเป็นแอป Electron) บน Raspberry PI (ฉันใช้โมเดล 3B ทันสมัยที่สุด) ในการทดลองของฉัน โปรเจ็กต์เพิ่งเริ่มต้น ฉันใช้ RTCMultiConnection เพื่อแชร์หน้าจอและดู

ปัญหาคือมันช้าอย่างไร้ประโยชน์ (2-3 fps บางครั้งมีความล่าช้า 10 วินาที) แม้ว่าจะเปิดใช้งานการเร่งความเร็ว HW เต็มรูปแบบใน Chromium ซึ่งแสดงมัน และฉันเข้าใจอย่างถ่องแท้ว่าทำไม: เนื่องจากใช้ตัวแปลงสัญญาณ VP9 ซึ่งไม่มีการเร่งความเร็ว HW อยู่ บนราสเบอร์รี่

คำถามคือ: ฉันสามารถใช้ H264 ใน RTCMultiConnection ได้หรือไม่ ถ้าใช่ ทำอย่างไร? ฉันรู้ว่า WebRTC นั้นรองรับมันโดยพื้นฐานแล้ว


person Mikhail Novikov    schedule 07.10.2017    source แหล่งที่มา


คำตอบ (1)


เพิ่มรหัสต่อไปนี้ในไฟล์สาธิต HTML ของคุณ:

connection.processSdp = function(sdp) {
    // remove VP8+VP9 so that Firefox can use H264
    sdp = CodecsHandler.removeVPX(sdp);
    return sdp;
};

ไปที่ไดเรกทอรี "dev" และเปิดไฟล์นี้: dev/CodecsHandler.js#L5-L30 บรรทัด 5 ถึง 30

ตรวจสอบให้แน่ใจว่าบรรทัด VP8 และ VP9 ถูกต้อง

a=rtpmap:100
a=rtpmap:101

บางที VP8 อาจเป็น 96 และ VP9 อาจเป็น 98 ดังนั้นให้แทนที่ rtpmap ตามนั้น เช่น.

a=rtpmap:96
a=rtpmap:98

อย่าลืมทดสอบโดยใช้ Firefox เท่านั้น ฉันไม่รู้ว่า Chrome เสถียรรองรับ H264 ด้วยหรือไม่

Fireox อาจต้องมีแฟล็กบางอย่าง คุณสามารถค้นหา h264 ธงบน about:config

อย่าลืมลิงก์ dev/CodecsHandler.js ในไฟล์สาธิต HTML ของคุณ โดยอยู่หลัง dist/RTCMultiConnection.min.js

<script src="dist/RTCMultiConnection.min.js"></script>
<script src="dev/CodecsHandler.js"></script>
<script>
var connection = new RTCMultiConnection();
connection.socketURL = 'https://yourserver.com:9001/';
connection.processSdp = function(sdp) {
    // remove VP8+VP9 so that Firefox can use H264
    sdp = CodecsHandler.removeVPX(sdp);
    return sdp;
};
connection.openOrJoin('roomid');
</script>
person Muaz Khan    schedule 07.10.2017
comment
ขอบคุณ! แม้ว่าสภาพแวดล้อมของฉันจะแตกต่างออกไปและมันไม่ได้เป็นแบบที่คุณพูด แต่มันก็แสดงให้ฉันเห็นหนทางและในที่สุดฉันก็ทำมันสำเร็จ น่าแปลกที่มันทำงานได้ดีบน Chrome เช่นกัน - person Mikhail Novikov; 09.10.2017