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

简介: 由于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来实现在线点播功能,不过这就是另外一个故事了,有机会和大家分享。

相关文章
|
XML JSON API
识别这些API接口定义(http,https,api,RPC,webservice,Restful api ,OpenAPI)
本内容介绍了API相关的术语分类,包括传输协议(HTTP/HTTPS)、接口风格(RESTful、WebService、RPC)及开放程度(API、OpenAPI),帮助理解各类API的特点与应用场景。
|
Android开发 Kotlin
|
安全 网络安全 数据安全/隐私保护
网页安全演进:HTTP、HTTPS与HSTS
这整个进程实质上是网页安全由“裸奔”到“穿衣”再到“绑带”的演变史。它保障了数据的机密性和完整性,降低了中间人攻击的风险,最终实现了更自由、更安全的网络环境。但别忘了,技术永远在发展,网络安全的赛跑也永无终点。*ENDPOINT*
1225 11
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
450 19
|
安全 网络协议 算法
HTTP/HTTPS与SOCKS5协议在隧道代理中的兼容性设计解析
本文系统探讨了构建企业级双协议隧道代理系统的挑战与实现。首先对比HTTP/HTTPS和SOCKS5协议特性,分析其在工作模型、连接管理和加密方式上的差异。接着提出兼容性架构设计,包括双协议接入层与统一隧道内核,通过协议识别模块和分层设计实现高效转换。关键技术部分深入解析协议转换引擎、连接管理策略及加密传输方案,并从性能优化、安全增强到典型应用场景全面展开。最后指出未来发展趋势将更高效、安全与智能。
707 1
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
715 1
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
1038 45
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
982 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
634 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
1106 7
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面