基于阿里云直播实现视频推流(ffmpeg)/拉流(Django2.0)以及在线视频直播播放(支持http/https)功能

本文涉及的产品
视频直播,500GB 1个月
.cn 域名,1个 12个月
简介: 由于5g网络的光速推广,视频业务又被推上了风口浪尖,在2019年初我们还在谈论照片,短视频等关键字,而进入2020年,我们津津乐道的就只有视频,视频,还是视频,普通人拿起手机做直播早已不是奢望。

由于5g网络的光速推广,视频业务又被推上了风口浪尖,在2019年初我们还在谈论照片,短视频等关键字,而进入2020年,我们津津乐道的就只有视频,视频,还是视频,普通人拿起手机做直播早已不是奢望。

去年我曾经写了一篇文章:利用Docker挂载Nginx-rtmp(服务器直播流分发)+FFmpeg(推流)+Vue.js结合Video.js(播放器流播放)来实现实时网络直播,这篇攻略依托docker的便捷性,自主搭建了一个网络直播平台,只不过受限于个人服务器的带宽和配置,如果真的做起万人直播业务还是力不从心,所以本次我们尝试使用套路云,不好意思说错了,是阿里云(阿里云的套路是真的顶),我们利用阿里云来做一套网络直播平台,体验依托第三方的在线直播的魅力,值得吐槽的一点是,阿里云关于直播的文档过于松散,有些直播细节并没有完全讲清楚,本次所有操作都是亲测可用,请各位放心服用。

在线直播的基本思路没有变化,还是本地打开设备直播 -> 数据实时推送到服务器 -> N个客户端拉取数据流到本地播放,只不过之前nginx-trmp的角色由阿里云进行了替代,因为阿里云基于其庞大的cdn网络性能更加牛逼。

首先注册阿里云平台:https://www.aliyun.com/

在产品线中选择视频直播服务

然后选择添加域名,添加一个播流域名,注意这个域名是用来播放的,前提是需要通过工信部备案

随后添加第二个域名,这个域名是用来推流的

此时我们已经添加了两个域名,一个用来推流,一个用来拉流播放

点击播流域名,进行配置,关联推流域名

关联成功之后,一定不要忘了再次配置播流域名,对该域名进行跨域配置,如果不进行跨域配置,你的直播地址就无法在其他网站或者客户端上面播放,配置参数是access-control-allow-origin,取值是*,意为所有来源。

随后点击地址生成器,来生成推流的网络地址以及播放地址

这里需要填写appname和streamname,这里根据需要自己填就可以,需要注意的是,如果开多个直播,那么这两个变量不能重名,点击开始生成,系统会分配给你一个推流地址和三个播放地址。

需要注意一点的是,阿里云为了安全起见,防止恶意推流或者恶意截获播放地址,默认开启了一个鉴权串,每次直播这个鉴权串会不同,这里我只是测试,所以将这个功能关闭了,如果正式生产环境进行直播还是建议带上这个参数,增加安全性

到了这里,前期的准备工作基本就完成了,我们就来推个流,这里可以使用软件来推流,比如odbc,但是我们在这里推荐使用ffmpeg,因为ffmpeg更加灵活,同时更容易集成到web框架比如django中,关于ffmpeg的安装和使用请参加这篇文章:Python3利用ffmpeg针对视频进行一些操作

这里我们用ffmpeg命令将我当前的桌面录屏推送到阿里云直播服务

ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://bo.v3u.cn/v3u/live

当然了,如果你愿意推送某个视频,也可以这样推

ffmpeg -re  -stream_loop -1 -i test.mp4 -vcodec copy -acodec copy -f flv -y rtmp://bo.v3u.cn/live/v3u

此时再阿里云直播服务的流管理中,可以实时监控到推流信息

推流成功后,之后的工作就是在线播放了,这里我们使用Django来进行在线播放,首先利用django的视图功能来渲染一个网页模板

def my_ali(request):  
  
    return render(request,'index.html')

在模板中,我们使用阿里出品的Aliplayer来进行播放

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="utf-8">  
<meta http-equiv="x-ua-compatible" content="IE=edge" >  
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>  
<title>Aliplayer在线配置</title>  
<link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.1/skins/default/aliplayer-min.css" />  
<script type="text/javascript" charset="utf-8" src="https://g.alicdn.com/de/prismplayer/2.8.1/aliplayer-min.js"></script>  
</head>  
<body>  
<div class="prism-player" id="player-con"></div>  
<script>  
var player = new Aliplayer({  
  "id": "player-con",  
  "source": "http://ali.v3u.cn/v3u/live.m3u8",  
  "width": "100%",  
  "height": "500px",  
  "autoplay": true,  
  "isLive": false,  
  "rePlay": true,  
  "playsinline": true,  
  "preload": true,  
  "controlBarVisibility": "hover",  
  "useH5Prism": true  
}, function (player) {  
    player._switchLevel = 0;  
    console.log("播放器创建了。");  
  }  
);  
</script>  
</body>

播放地址,也就是source属性,使用m3u8后缀

直播效果是这样的

不得不说,阿里云虽然套路,但是性能真的顶,无论是速度还是清晰度,或者说延迟方面,都要远远强于我之前自己搭建的nginx-rtmp服务器。

值得一提的是,默认的播放地址还是http,如果你需要https的直播地址,比如有些客户端强制https拉流,像微信这样的,就需要在阿里云里为你的播放域名申请一个ssl证书,这里以ali.v3u.cn为例子

选择产品线的ssl证书服务

点击购买证书

证书类型,毫无疑问选择免费版

购买之后,选择证书申请

·证书的绑定域名要选择你的播放域名

成功后,点击下载,选择apache

将下载后的证书解压后,用编辑器打开public.crt文件,将秘钥配置到播放流域名的配置中

这之后我们就可以用https的地址来播放直播视频了

结语:总体上阿里云直播还是很给力的,主要的坑就是一定要记得配置域名跨域,另外说明一下直播服务价格不菲,预算不足的朋友还是慎重考虑,最后就是阿里云同步还提供直播视频进行录播,录播的文件还能直接存放在阿里云自己的oss网盘中,这个真是套路的可以,也就是说除了直播,我们还可以依托阿里云oss来实现在线点播功能,不过这就是另外一个故事了,有机会和大家分享。

相关文章
|
22天前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
97 3
快速上手|HTTP 接口功能自动化测试
|
5天前
|
前端开发 JavaScript 数据库
https页面加载http资源的解决方法
https页面加载http资源的解决方法
13 7
|
4月前
|
安全 网络协议 网络安全
IP代理的三大协议:HTTP、HTTPS与SOCKS5的区别
**HTTP代理**适用于基本网页浏览,简单但不安全;**HTTPS代理**提供加密,适合保护隐私;**SOCKS5代理**灵活强大,支持TCP/UDP及认证,适用于绕过限制。选择代理协议应考虑安全、效率及匿名需求。
|
20天前
|
安全 网络安全 数据安全/隐私保护
HTTP与HTTPS协议区别及应用场景
在互联网高速发展的今天,HTTP与HTTPS作为数据传输的基石,作用至关重要。HTTP允许客户端与服务器间传输超文本文档,但其数据传输过程未加密,存在安全隐患;HTTPS则在此基础上加入了SSL/TLS协议,实现了数据加密传输,增强了安全性,广泛应用于电子商务、网上银行、政府网站及社交媒体平台等涉及敏感信息传输的领域,有效保护了用户隐私和数据安全。随着网络安全意识提升,HTTPS正逐渐成为主流。
|
3月前
|
JSON 网络协议 安全
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
【7月更文挑战第16天】本文介绍了HTTP和HTTPS协议的基本概念与作用,强调了理解HTTP协议对使用抓包工具Fiddler的重要性。HTTP是用于Web浏览器与服务器间信息传输的协议,不加密,易被截取,不适合传输敏感信息。HTTPS是HTTP的安全版,通过SSL/TLS提供加密和服务器身份验证,确保数据安全。HTTP请求包括请求行、请求头、空行和可选的请求主体,响应则有响应行、响应头、空行和响应主体。HTTP协议无状态,而HTTPS解决了安全性问题,但也带来了额外的计算开销。Fiddler作为一个强大的抓包工具,可以帮助开发者和测试人员分析HTTP/HTTPS通信,理解请求和响应的结构。
60 4
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
|
2月前
|
运维 算法 应用服务中间件
运维系列.Nginx中使用HTTP压缩功能(一)
运维系列.Nginx中使用HTTP压缩功能(一)
35 1
|
2月前
Ueditor——请求后台配置项http错误,上传功能将不能正常使用
Ueditor——请求后台配置项http错误,上传功能将不能正常使用
39 0
Ueditor——请求后台配置项http错误,上传功能将不能正常使用
|
3月前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
70 10
|
2月前
|
JavaScript 前端开发 Java
【Azure 环境】各种语言版本或命令,发送HTTP/HTTPS的请求合集
【Azure 环境】各种语言版本或命令,发送HTTP/HTTPS的请求合集
|
3月前
|
安全 程序员 网络安全
HTTP和HTTPS的区别,你真的了解吗?
大家好,我是你们的技术小伙伴小米!今天我们来聊聊HTTP和HTTPS的区别以及HTTPS链接的建立过程,同时了解两种常见的加密算法——对称加密和非对称加密。通过这篇文章,你将深入理解这些网络基础知识,为网站安全保驾护航!
61 7
下一篇
无影云桌面