前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WebRTC实战教程:如何实现共享屏幕和摄像头三分屏

WebRTC实战教程:如何实现共享屏幕和摄像头三分屏

作者头像
Tinywan
发布2024-03-11 13:42:01
1990
发布2024-03-11 13:42:01
举报
文章被收录于专栏:开源技术小栈开源技术小栈

💻 在线演示

演示地址 https://webrtc.tinywan.com/docs-2022/demo-07/video.html

三分屏截图

📝 源码

index.html

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebRTC实战教程:如何实现共享屏幕和摄像头三分屏</title>
</head>
<body>
<div id="app">
    <div style="margin: auto;">
        <div style="border: 1px solid #ccc; float: left; margin-right: 20px;">
            <video ref="documentPreview" width="800" height="600" autoplay></video>
        </div>
        <div>
            <video ref="videoPreview" width="300" height="250" autoplay></video>
        </div>
    </div>
</div>
<script src="https://cdn.staticfile.org/vue/3.0.5/vue.global.js"></script>
<script src="main.js"></script>
</body>
</html>

main.js

代码语言:javascript
复制
const App = {
    data() {
        return {
            currentWebmData: null,
        }
    },
    mounted() {
        this._initDevice();
    },
    methods: {
        async _initDevice (){
            // (1) 获取摄像头的音频和视频
            let cameraConstraints = {
                video:true,
                audio:true
            };
            this._cameraStream = await navigator.mediaDevices.getUserMedia(cameraConstraints);
            this.$refs.videoPreview.srcObject = this._cameraStream;

            // (2) 获取课件视频
            let displayMediaOptions = {
                video: {
                    cursor: "always"
                },
                audio: false
            }
            this._documentStream = await navigator.mediaDevices.getDisplayMedia(displayMediaOptions);
            // 预览
            this.$refs.documentPreview.srcObject = this._documentStream;

            // this._context2d = this.$refs.documentPreview.getContext("2d");
            // this._context2d.drawImage(this._documentStream,0,0,400,300)

            // (3) 合并音轨
            // this._cameraStream.getTracks().forEach(value => this._documentStream.addTrack(value));

            // (4) 通过RTC进行推流
            // this._context2d = this.$refs.canvas.getContext("2d");
            // this._context2d.drawImage(this._cameraStream,0,0,400,300)
        }
    }
};
var vm = Vue.createApp(App).mount('#app');
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 💻 在线演示
    • 三分屏截图
    • 📝 源码
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档