【video】视频直播推流拉流慢、卡顿解决方案

针对视频直播App中常见的访问慢、卡顿等问题,本文提出通过结合使用CDN与HTTPDNS技术来提升用户体验。该方案能有效解决由调度不精准、域名劫持及网络切换导致的服务质量问题。
部署运行你感兴趣的模型镜像

一、摘要

视频直播类App当前已经普遍采用CDN来实现访问加速,但还是经常遇到推拉流慢、卡顿的问题,一般是由于调度不精准、域名劫持、终端手机接入网络动态切换等因素导致。结合使用CDN和HTTPDNS可以比较完美解决此类问题。

二、视频直播经典加速架构

当前视频直播类App经典加速架构如下图所示:

screenshot.png

图1 视频直播类App经典加速架构

经典加速架构中,推流阶段使用CDN就近接入实现推流加速,用户播放拉流阶段通用使用CDN来做加速。由于CDN节点分布的广泛性与边缘性确保了客户能够就近接入,与直连源站相比,通过CDN加速直播推拉流取得了非常显著的加速效果。

三、经典架构中存在的问题

尽管已经采用了CDN加速,直播类App仍然经常出现访问慢、卡顿等问题,导致大量用户投诉。主要原因是当前架构中存在以下几方面问题:

3.1 运营商Local DNS配置不合理导致无法就近接入

关于这个问题的描述参考文章App如何实现就近接入?如何改善调度不准问题?那些年移动App域名解析踩过的坑移动互联网时代,如何优化你的网络 —— 域名解析篇

3.2 域名劫持

关于这个问题可以参考文章域名劫持与防范那些年移动App域名解析踩过的坑移动互联网时代,如何优化你的网络 —— 域名解析篇

3.3 用户手机网络制式切换

假设用户A从移动4G切换到家中联通的wifi网络,仍然按照原先的CDN节点进行加速会出现跨ISP调度,访问质量差的悲剧事件。

四、解决办法

HTTPDNS + CDN

上述3个问题都可以通过接入HTTPDNS解决。

解决方案1: 终端源站配合的解决方案

screenshot.png

图2 终端源站配合使用 HTTPDNS 的解决方案

下面通过推流阶段2个场景说明改进方案如何确保调度到最佳CDN节点的:

case 1: Local DNS配置问题导致没有调度到最优节点的场景
  • Step 1: 用户手机上Local DNS配置不准确,域名解析阶段为域名dn返回的是CDN节点B的IP_b,而非最优的CDN节点IP IP_a。
  • Step 2: 推流的终端应用需要向CDN节点发起鉴权请求,CDN节点在收到鉴权请求后,需要提取终端的公网IP_c,然后除了转发鉴权相关信息到视频源站之外,必须带上推流终端的公网IP_c 给源站。
  • Step 3: 源站收到鉴权信息和终端IP后,首先做鉴权工作,然后源站利用推流的域名dn和推流终端公网IP IP_c向HTTPDNS服务器发起请求,获取最优的CDN节点IP_a,并将IP_a回传给推流终端,告知推流终端IP_a是最佳接入节点
  • Step 4: 终端推流时可以直接向CDN IP_a推流,或者等到发现出现卡顿、慢时切换到IP_a
case 2: 用户网络制式切换(如移动4G切联通wifi)的场景
  • Step 1: 假设之前移动4G网络下最佳CDN节点是IP_b,用户网络制式切换成联通wifi后,最佳节点换成了IP_a。网络切换后,终端第一步仍然向CDN节点IP_b推流,此时会鉴权失败。

  • Step 2: 重复场景1的Step 2到Step 4,推流终端最终可以找到最佳CDN节点IP_a并通过IP_a推流。

解决方案2: 轻服务端解决方案

screenshot

图3 完全基于终端调用 HTTPDNS 的方案

本方案非常清晰,当推流或者拉流出现服务质量问题(如慢、卡顿)时,立即使用HTTPDNS获取最新的最佳服务质量节点,并利用最新的节点进行推拉流。

另外,首次选用接入CDN节点时也建议使用HTTPDNS来解析决定。

其他要点

请注意,用户网络制式切换时,本架构能够自动找出最优节点并顺利切换到最优节点。

其他因调度问题导致拉流、推流阶段慢、卡顿的问题都可以通过上述方案解决。

五、总结

视频直播类App经常遇到播放质量不佳、慢、卡顿等问题,会引起客户投诉和流失,使用HTTPDNS可以基本解决这类问题。

六、附录

阿里云HTTPDNS六大优势:

1、支持全网域名解析

  • 接口简单统一
  • 无需对接多家HTTPDNS

2、以IP方式对外提供服务,防止自身被劫持

3、AnyCast IP支持异地容灾

各地域使用同一个IP地址提供服务

4、接入延迟低且稳定

以北京为例,测试一下阿里云HTTPDNS的访问延迟:

screenshot.png
图4 阿里云 HTTPDNS 服务器RTT延迟

5、支持https接口

6、提供Android SDK/iOS SDK,方便接入

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 关于直播的实现方法 #### 一、UniApp H5 手机端直播与实时播放 在 UniApp 的 H5 平台上,可以通过调用 WebRTC 或 RTMP 协议来完成前端的直播功能。具体来说,可以利用 HTML5 提供的 MediaDevices API 获取用户的摄像头权限并捕获音视频数据[^1]。 以下是基于 UniApp 和 RTMP 的一个简单代码示例: ```javascript // 初始化摄像头设备 async function initCamera() { const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true }); document.getElementById('localVideo').srcObject = stream; } // 开始到服务器 function startStream(serverUrl) { const localStream = document.getElementById('localVideo').srcObject; const peerConnection = new RTCPeerConnection(); // 添加本地媒体轨道 localStream.getTracks().forEach(track => peerConnection.addTrack(track, localStream)); // 设置远程描述符 peerConnection.setRemoteDescription(new RTCSessionDescription({ type: 'offer', sdp: serverUrl, })).then(() => { console.log('Pushing Stream to Server...'); }).catch(error => { console.error('Error setting remote description:', error); }); } ``` 上述代码展示了如何通过 `navigator.mediaDevices` 调用用户设备上的麦克风和摄像头,并将其封装成一个可被传输的数据发送给服务端。 --- #### 二、Obs+SRS+Nginx 实现直播 对于更复杂的场景,比如需要支持大规模并发或者自定义协议的情况,可以选择 OBS(Open Broadcaster Software)、SRS(Simple-RTMP-Server)以及 Nginx 来构建完整的直播架构[^2]。 OBS 主要用于采集客户端的画面和声音信号;而 SRS 则作为中间层负责处理 RTMP 量转发;最后由配置好 rtmp 插件模块后的 Nginx 完成 HTTP-FLV/HLS 取请求解析工作[^3]。 下面是一个简单的部署程概述: 1. **安装依赖环境** - Ubuntu 系统下执行命令: ```bash sudo apt update && sudo apt install nginx ffmpeg libnginx-mod-http-flv flvtool2 ``` 2. **下载编译 SRS** - 访问官方仓库克隆项目文件夹后运行脚本进行初始化操作即可获得最新版本的服务程序包。 3. **修改 NGINX 配置文件** 将默认站点路径下的 conf 文件替换为我们所需的模板样式如下所示: ```conf http { include /etc/nginx/mime.types; server { listen 8080; location /live { types { application/vnd.apple.mpegurl m3u8; } root html; add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,HEAD,OPTIONS; add_header Access-Control-Max-Age 3600; if ($request_method ~* "(GET|HEAD)") { break; } proxy_pass http://localhost:8081/; proxy_set_header Host $host; proxy_http_version 1.1; chunked_transfer_encoding off; } } rtmp { server { listen 1935; application live { live on; record off; } } } } ``` 4. 启动所有组件并测试连接状态是否正常。 --- #### 三、Nginx 搭建带鉴权机制的直播服务 如果希望进一步增强系统的安全性,则可以在原有的基础上加入身份认证环节。例如,在每次发起新的会话之前都需要先向指定接口提交用户名密码组合得到授权令牌再继续后续动作。 这里给出一段 PHP 版本的身份校验逻辑片段仅供参考学习之用: ```php <?php $authKey = $_SERVER['HTTP_AUTHORIZATION']; if (!$authKey || !preg_match('/Bearer\s+(\S+)/', $authKey, $matches)) { header('WWW-Authenticate: Bearer realm="Access Denied"'); die(json_encode(['error' => 'Invalid token'])); } else { list(,$token)=explode(" ",trim($authKey),2); // Verify Token Here... echo json_encode(["status"=>"success"]); } ?> ``` 此段代码实现了基本的 OAuth2 bearer tokens 方式的访问控制策略,可以根据实际需求调整算法强度或引入第三方库简化开发过程。 --- #### 四、知识付费类 HTTPS 方法教程 针对某些特殊行业领域内的应用案例分析——如教育培训机构出的线上课程资源分享平台等业务形态而言,除了常规的技术选型之外还需要特别注意网络安全防护措施方面的考量因素[^4]。 以 Workerman 结合 Aliyun Live Service 构建的知识支付体系为例说明其运作原理大致分为以下几个方面展开讨论: 1. **检查必要条件**:确认防火墙规则允许特定范围内的 IP 地址能够顺利抵达目标主机监听端口上; 2. **启动后台进程管理器**:确保即使当前终端意外断开也不会影响整体框架稳定性表现; 3. **调试回调函数注册情况**:按照服务商文档指引逐步完善各项参数设定直至完全匹配预期行为模式为止。 最终形成一套既满足性能指标又能兼顾用户体验质量标准的整体解决方案设计思路图谱。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值