视频谈话记录和直播系统的实现(四)c# websocket + MediaRecorder + blob 实现服务器端高清录制

问题重现

  在前面的内容中(点这里看前篇),已经实现了利用srs的dvr功能进行服务器端的录制,但会产生一个问题:录制的文件不一定是1080P,而且分辨率会不断发生变化,刚开始分辨率和码流较小,然后会变大,一段时间后又会变小,而且在分辨切换的过程中,会有将近1s的黑屏,而且会无规律的画面静止,如此反复。这是不符合项目目标的,必须要着手解决这个问题。

产生原因

  由于采用了webrtc推流的方式,而这种方式传输视频数据,是没有办法自己定义和管理码流、分辨率的,因为协议本身会依据带宽质量动态调节。srs dvr自身只负责对输入的流录制,并不会与推流方进行协议协商,所以出现了上面的现象。

解决思路

  既然srs dvr不理想,那只有自己动手了。

  1. 从navigator.mediaDevices.getUserMedia获取stream;
  2. 创建一个MediaRecorder
  3. 在MediaRecorder的ondataavailable回调中,可以获取到blob;
  4. 将blob通过websocket发送到blazor server;
  5. blazor server中,接收blob,通过FileStream保存在文件里;
  6. 客户端停止录像,断开websocket,服务器关闭FileStream对象,完成录像。

关键代码

  js部分

startPush();
        var mediaRecorder;
        var ws;

        function stopRec() {
   
            mediaRecorder.stop();
            ws.close();
            ws = null;
        }

        async function startPush() {
   
            var constraints = {
   
                audio: true,
                video: {
   
                    width: {
    min: 1280, ideal: 1920, max: 1920 },
                    height: {
    min: 720,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旭腾恒力

分享和打赏都是美德

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值