【实战教程】PHP如何轻松对接阿里云直播?

5965d20231129100415621.png

1. 配置阿里云直播的推流地址和播放地址

使用阿里云直播功能前,首先需要在阿里云控制台中创建直播应用,然后获取推流地址和播放地址。

推流地址一般格式为:

rtmp://{Domain}/{AppName}/{StreamName}?auth_key={AuthKey}-{Timestamp}-{RandomNum}

其中,

{Domain}代表阿里云直播的推流域名;

{AppName}代表应用名称,一般为“live”,也可以自定义;

{StreamName}代表流名称,可以自定义;

{AuthKey}代表授权密钥;

{Timestamp}代表当前时间戳;

{RandomNum}代表随机数。

播放地址一般格式为:

http://{Domain}/{AppName}/{StreamName}.m3u8

{Domain}代表阿里云直播的播放域名;

{AppName}代表应用名称,一般为“live”,也可以自定义;

{StreamName}代表流名称,可以自定义。

把获取到的推流地址和播放地址配置到代码中,代码如下:

class LiveAction extends Action {
    // 推流地址
    private $pushUrl = 'rtmp://{Domain}/{AppName}/{StreamName}?auth_key={AuthKey}-{Timestamp}-{RandomNum}';

    // 播放地址
    private $playUrl = 'http://{Domain}/{AppName}/{StreamName}.m3u8';

    // 阿里云直播的推流域名
    private $pushDomain = 'xxx.xxx.com';

    // 阿里云直播的播放域名
    private $playDomain = 'xxx.xxx.com';

    // 应用名称
    private $appName = 'live';

    // 流名称
    private $streamName = 'test';

    // 授权密钥
    private $authKey = '1234567890';

    // 获取推流地址
    private function getPushUrl() {
        $randomNum = rand(100000, 999999);
        $timestamp = time();
        $authKey = md5($this->authKey . $this->appName . $this->streamName . $timestamp . $randomNum);
        $pushUrl = str_replace(array('{Domain}', '{AppName}', '{StreamName}', '{AuthKey}', '{Timestamp}', '{RandomNum}'), array($this->pushDomain, $this->appName, $this->streamName, $authKey, $timestamp, $randomNum), $this->pushUrl);
        return $pushUrl;
    }

    // 获取播放地址
    private function getPlayUrl() {
        $playUrl = str_replace(array('{Domain}', '{AppName}', '{StreamName}'), array($this->playDomain, $this->appName, $this->streamName), $this->playUrl);
        return $playUrl;
    }
}

LiveAction中定义了一系列变量,包括推流地址和播放地址的格式和一些基本的配置信息,同时定义了两个私有方法,分别用于获取推流地址和播放地址。

getPushUrl方法中,先生成一个六位的随机数和当前时间戳,然后计算出授权密钥,最后将这些参数替换到推流地址的相应位置。最终返回一个完整的推流地址。

getPlayUrl方法中,直接将播放地址的相应位置替换即可。最终返回一个完整的播放地址。

dfe19202311291008498597.png

2. 在ThinkPHP中集成阿里云直播的推流功能

在ThinkPHP框架中,可以使用Fmpeg库来实现推流的功能。Fmpeg是一个非常强大的音视频处理工具,它不仅可以播放、转码音视频,还可以进行音视频的编辑、剪辑等等。

在使用Fmpeg之前,需要先安装Fmpeg库,并把它的路径配置到环境变量中。

代码如下:

class LiveAction extends Action {
    // 推流地址
    private $pushUrl = 'rtmp://{Domain}/{AppName}/{StreamName}?auth_key={AuthKey}-{Timestamp}-{RandomNum}';

    // 阿里云直播的推流域名
    private $pushDomain = 'xxx.xxx.com';

    // 应用名称
    private $appName = 'live';

    // 流名称
    private $streamName = 'test';

    // 授权密钥
    private $authKey = '1234567890';

    // 获取推流地址
    private function getPushUrl() {
        $randomNum = rand(100000, 999999);
        $timestamp = time();
        $authKey = md5($this->authKey . $this->appName . $this->streamName . $timestamp . $randomNum);
        $pushUrl = str_replace(array('{Domain}', '{AppName}', '{StreamName}', '{AuthKey}', '{Timestamp}', '{RandomNum}'), array($this->pushDomain, $this->appName, $this->streamName, $authKey, $timestamp, $randomNum), $this->pushUrl);
        return $pushUrl;
    }

    // 推流
    public function push() {
        $pushUrl = $this->getPushUrl();
        $command = 'ffmpeg -re -i test.flv -vcodec copy -acodec aac -f flv ' . $pushUrl;
        exec($command);
    }
}

LiveAction中添加了一个push方法,该方法利用Fmpeg库将本地的test.flv文件推流到阿里云直播中。

baeae202311291011398402.png

3. 在ThinkPHP中集成阿里云直播的播放功能

在ThinkPHP框架中,可以使用Hls.js库来实现直播的播放功能。Hls.js是一个基于HTML5的JavaScript库,它能够将M3U8格式的直播流实时转换成模拟的FLV格式并播放。

代码如下:

class LiveAction extends Action {
    // 播放地址
    private $playUrl = 'http://{Domain}/{AppName}/{StreamName}.m3u8';

    // 阿里云直播的播放域名
    private $playDomain = 'xxx.xxx.com';

    // 应用名称
    private $appName = 'live';

    // 流名称
    private $streamName = 'test';

    // 获取播放地址
    private function getPlayUrl() {
        $playUrl = str_replace(array('{Domain}', '{AppName}', '{StreamName}'), array($this->playDomain, $this->appName, $this->streamName), $this->playUrl);
        return $playUrl;
    }

    // 播放
    public function play() {
        $playUrl = $this->getPlayUrl();
        $this->assign('playUrl', $playUrl);
        $this->display();
    }
}

LiveAction中添加了一个play方法,该方法获取播放地址并分配给模板,然后通过模板display方法展示到页面上。

在页面上可以使用Hls.js库来播放直播流。

完整代码如下:

class LiveAction extends Action {
    // 推流地址
    private $pushUrl = 'rtmp://{Domain}/{AppName}/{StreamName}?auth_key={AuthKey}-{Timestamp}-{RandomNum}';


    // 阿里云直播的推流域名
    private $pushDomain = 'xxx.xxx.com';


    // 播放地址
    private $playUrl = 'http://{Domain}/{AppName}/{StreamName}.m3u8';


    // 阿里云直播的播放域名
    private $playDomain = 'xxx.xxx.com';


    // 应用名称
    private $appName = 'live';


    // 流名称
    private $streamName = 'test';


    // 授权密钥
    private $authKey = '1234567890';


    // 获取推流地址
    private function getPushUrl() {
        $randomNum = rand(100000, 999999);
        $timestamp = time();
        $authKey = md5($this->authKey . $this->appName . $this->streamName . $timestamp . $randomNum);
        $pushUrl = str_replace(array('{Domain}', '{AppName}', '{StreamName}', '{AuthKey}', '{Timestamp}', '{RandomNum}'), array($this->pushDomain, $this->appName, $this->streamName, $authKey, $timestamp, $randomNum), $this->pushUrl);
        return $pushUrl;
    }


    // 获取播放地址
    private function getPlayUrl() {
        $playUrl = str_replace(array('{Domain}', '{AppName}', '{StreamName}'), array($this->playDomain, $this->appName, $this->streamName), $this->playUrl);
        return $playUrl;
    }


    // 推流
    public function push() {
        $pushUrl = $this->getPushUrl();
        $command = 'ffmpeg -re -i test.flv -vcodec copy -acodec aac -f flv ' . $pushUrl;
        exec($command);
    }


    // 播放
    public function play() {
        $playUrl = $this->getPlayUrl();
        $this->assign('playUrl', $playUrl);
        $this->display();
    }
}

如果你想拥有自己的私域流量和私域直播电商系统,可以选择CRMEB Pro版高性能私域电商系统,CRMEB Pro版是一款高性能、高并发、高可用的私域客户关系管理(CRM)+营销电商(EB)系统;助力品牌商家实现公域引流转化私域沉淀,全渠道智能化经营。

9bd72202310171553168279.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/234988.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[虚拟机]使用VM打开虚拟机电脑重启解决方案。

问题:打开虚拟机点击启动后,电脑会自动重启。(WINDOWS10 20版本) 解决步骤: 1、对Windows功能进行操作。 上图三个启用。 上图一个取消。 再次打开后,不报警,显示下图问题: 继续解…

基于SpringBoot+Vue前后端分离的商城管理系统(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

【Linux】find . -perm 644 -exec ls -l {} \;

find . -perm 644 -exec ls -l {} ; find 命令使用 -perm 644 条件来查找文件权限为644的文件,然后通过 -exec ls -l {} \; 将这些文件传递给 ls -l 命令来显示详细的文件列表。 find . -perm 644:在当前目录及其子目录中查找文件权限为644的文件。 -e…

VINS-MONO代码解读5----vins_estimator(marginalization部分)

文章目录 0. 前言1.1 Marginalization Pipiline 1. marg factor构建1.1 变量及维度理解1.2 IMUFactor1.3 ProjectionTdFactor(ProjectionFactor)1.4 MarginalizationFactor( e p e_p ep​推导更新,FEJ解决的问题)1.4.1 先验残差的更新1.4.2 先验Jacobian的更新 2. R…

【大数据】Hudi 核心知识点详解(二)

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 &#x…

《使用ThinkPHP6开发项目》 - 创建应用

《使用ThinkPHP6开发项目》 - 安装ThinkPHP框架-CSDN博客 《使用ThinkPHP6开发项目》 - 设置项目环境变量-CSDN博客 《使用ThinkPHP6开发项目》 - 项目使用多应用开发-CSDN博客 根据前面的步骤,我们现在就可以开发我们的项目开发了,根据项目开发的需要…

超过 50% 的内部攻击使用特权提升漏洞

特权提升漏洞是企业内部人员在网络上进行未经授权的活动时最常见的漏洞,无论是出于恶意目的还是以危险的方式下载有风险的工具。 Crowdstrike 根据 2021 年 1 月至 2023 年 4 月期间收集的数据发布的一份报告显示,内部威胁正在上升,而利用权…

使用eXtplorer本地搭建文件管理器并内网穿透远程访问本地数据

文章目录 1. 前言2. eXtplorer网站搭建2.1 eXtplorer下载和安装2.2 eXtplorer网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1. 前言 通过互联网传输文件,是互联网最重要的应用之一,无论是…

Mac电脑投屏AirServer 2024怎么下载安装激活许可期限

对于那些想要将 iPhone、iPad 或其他 iOS 设备上的小屏幕镜像到计算机上的大屏幕的人来说,AirPlay 是一个很好的工具。 基于此,AirServer 非常需要将您的 Mac 或 PC 变成 AirPlay 设备。 但是如何使用计算机上的设置对 iPhone 等 iOS 设备进行屏幕镜像&a…

epoll实现同时承载100w客户端的数量

概念 先表明,这里是让epoll能够同时承受100w的连接,不针对业务处理。 对于百万并发的业务处理,其前提条件就是要同时承受住100w的连接。 程序源码 epoll的源码直接给出来 /*支持百万并发的 reactor1.其主要限制在于Linux系统的限制,需要修改一…

基于SpringBoot+JSP+Mysql宠物领养网站+协同过滤算法推荐宠物(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

大厂算法指南:优选算法 ——双指针篇(上)

大厂算法指南:优选算法 ——双指针篇(上) 前言:双指针简介一、[283.移动零](https://leetcode.cn/problems/move-zeroes/)1.1 算法思想(快排的思想:数组划分区间 - 数组分两块)1.2 算法流程1.3 …

neuq-acm预备队训练week 8 P8794 [蓝桥杯 2022 国 A] 环境治理

题目描述 输入格式 输出格式 输出一行包含一个整数表示答案。 输入输出样例 解题思路 最短路二分 AC代码 #include<bits/stdc.h> using namespace std; long long temp,n, Q; long long f[105][105],min_f[105][105],cut[105],dis[105][105];//cut为减少多少&#x…

在 Qt Creator 中编写 Doxygen 风格的注释

2023年12月10日&#xff0c;周日上午 如何生成Doxygen 风格的注释 在需要Doxygen 风格注释的函数上方输入 /**&#xff0c;然后按下 Enter 键。Qt Creator 将自动为你生成一个注释模板。 输入&#xff0c;Qt Creator会自动帮你补全Doxygen标签 不得不说&#xff0c;写了Doxyge…

【HarmonyOS开发】详解常见容器的使用

声明式UI提供了以下8种常见布局&#xff0c;开发者可根据实际应用场景选择合适的布局进行页面开发。 布局 应用场景 线性布局&#xff08;Row、Column&#xff09; 如果布局内子元素超过1个&#xff0c;且能够以某种方式线性排列时优先考虑此布局。 层叠布局&#xff08;St…

使用alpine镜像部署go应用时踩的坑

使用alpine镜像部署go应用时踩的坑 关于交叉编译 实际上我在ubuntu的交叉编译出来的exe并不能在alpine上运行&#xff0c;这边采取拉镜像编译复制出来的做法&#xff0c;部署再用干净的alpine 拉取golang:alpine踩坑 在Dockerhub上可以找到&#xff1a; 然而拉取的alpine中…

Cpolar配置外网访问和Dashy

Dashy是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航页。一款功能超强大,颜值爆表的可定制专属导航页工具 结合cpolar内网工具,我们实现无需部署到公网服务器…

周周清(2)----踩坑日记

周一&#xff1a; 1.之前换了一个jdk&#xff0c;然后又改了很多东西&#xff0c;很乱&#xff0c;以至于很多项目都不能直接运行了&#xff0c;所以今天就将ideal删除并且更新版本到2022.3.3&#xff0c;并且重新将ideal里面的配置环境变量&#xff0c;以及jdk下载安装配置&a…

【论文阅读笔记】NeRF+Mip-NeRF+Instant-NGP

目录 前言NeRF神经辐射场体渲染连续体渲染体渲染离散化 方法位置编码分层采样体渲染推导公式&#xff08;1&#xff09;到公式&#xff08;2&#xff09;部分代码解读相机变换&#xff08;重要&#xff01;&#xff09; Mip-NerfTo do Instant-NGPTo do 前言 NeRF是NeRF系列的…

【unity小技巧】实现枪武器随镜头手臂摇摆效果

文章目录 前言方法一、改变武器位置方法二、改变武器旋转结语完结 前言 如果我们视角移动转向&#xff0c;武器如果不跟着进行摇摆&#xff0c;会感觉我们的动作很生硬&#xff0c;特别是射击类游戏&#xff0c;如下 实现武器摇摆这里主要分享两种实现方法&#xff0c;一种是…