首頁 後端開發 PHP問題 php怎麼實現線上直播功能

php怎麼實現線上直播功能

Dec 27, 2021 am 11:12 AM

php實現線上直播功能的方法:1、在控制台找到直播雲服務,創建直播雲空間;2、按需要將域名解析出來;3、安裝composer包;4、透過liveStart方法實現直播即可。

php怎麼實現線上直播功能

本文操作環境:Windows7系統,PHP7.1版,Dell G3電腦。

php怎麼實現線上直播功能?

php 七牛雲實現直播功能:

一:最近在做一個直播賣貨的項目,後台搭建好了準備接入直播,搜了幾家阿里,TX和七牛,結果阿里的直播php只有代碼沒有文檔,TX的我朋友說代碼比較亂就不考慮了,上了七牛註冊了一個帳戶,申請直播空間的時候被域名卡主了,已經備案的網域還要再網站公安備案一次

https://developer.qiniu.com/af/kb/3987/how-to-make-website-and-inquires-the-police-put-on-record-information?ref=support.qiniu.com
登入後複製

又搜發現涉及網路表演業務的,需辦理《網路文化經營許可證》,請諮詢當地人民政府文化行政部門,等待申請完後在進行下一步。

二:網域備案終於好了,開始搞第二步,實作直播功能,行動端可以參考七牛雲SDK,以下是服務端推流案例,本次使用的是rtmp流實現直播,在控制台找到直播雲服務,創建直播雲空間
php怎麼實現線上直播功能
創建好直播空間後會生成幾個二級域名,按需要將域名解析出來,然後就到了下面的樣子
php怎麼實現線上直播功能
代碼運行起來後會在直播流中看到你說創建的直播流播放歷史等信息
php怎麼實現線上直播功能
安裝composer套件

php composer.phar require qiniu/php-sdk
登入後複製

再vendor/pili-engineering/pili-sdk-php.v2裡能找到兩個案例,一個是直播的,一個是連麥的,這次先實現直播,下一篇再更新一下連麥

<?php

namespace App\Modules\Api\Http\Controllers;

use App\Modules\Live\Models\Broadcast;
use App\Modules\Live\Repositories\BroadcastRepositoryEloquent;
use Illuminate\Http\Request;
use Qiniu\Pili\Client;
use Qiniu\Pili\Mac;
use function Qiniu\Pili\RTMPPlayURL;
use function Qiniu\Pili\RTMPPublishURL;
use function Qiniu\Pili\SnapshotPlayURL;

class LiveController extends ApiBaseController
{
    private $auth;
    private $accessKey;
    private $secretKey;
    private $hubName;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->accessKey = config("qiniu.accessKey");
        $this->secretKey = config("qiniu.secretKey");
        $this->hubName = config("qiniu.bucket");
        parent::__construct();
    }
    /**
     *开启直播
     */
    public function liveStart(Request $request)
    {
        $userInfo = parent::getAuthenticatedUser($msg);
        if (isset($userInfo[&#39;user&#39;]) && !empty($userInfo[&#39;user&#39;])) {
            $request->offsetSet(&#39;user_id&#39;, $userInfo[&#39;user&#39;][&#39;id&#39;]);
        } else {
            return $this->sendResponse($msg, &#39;error&#39;, &#39;&#39;, 401);
        }
        $data = $request->all();
        $broadcast = app(BroadcastRepositoryEloquent::class)->findWhere([&#39;type&#39; => $data[&#39;type&#39;], &#39;user_id&#39; => $data[&#39;user_id&#39;]])->first();
        if (empty($broadcast)) {
            return $this->sendResponse(trans(&#39;admin.operate_failed&#39;) . &#39;未找到直播间&#39;);
        }
        $broadcast[&#39;name&#39;] = $data[&#39;name&#39;];
        //创建hub
        $mac = new Mac($this->accessKey, $this->secretKey);
        $client = new Client($mac);
        $hub = $client->hub($this->hubName);
        //获取stream
        $streamKey = $broadcast[&#39;show_id&#39;];
        $stream = $hub->stream($streamKey);
        $list = $hub->listStreams($streamKey, 1, "");
        //如果没找到对应的直播流创建新直播流
        if (count($list[&#39;keys&#39;]) == 0) {
            //获取stream
            $hub->create($streamKey);
        }
        if ($data[&#39;type&#39;] == 0) {
            $result = $this->updateShop($broadcast, $streamKey, $msg);
            if ($result == false) {
                return $this->sendResponse(trans(&#39;admin.operate_failed&#39;) . $msg);
            }
        } else {
            $result = $this->updateCurriculum($broadcast, $streamKey, $msg);
            if ($result == false) {
                return $this->sendResponse(trans(&#39;admin.operate_failed&#39;) . $msg);
            }
        }
        return $this->sendResponse(trans(&#39;admin.operate_succeeded&#39;), &#39;succ&#39;, [&#39;p_href&#39; => $broadcast[&#39;p_href&#39;]]);
    }

    //更新商城直播间
    public function updateShop($broadcast, $streamKey, &$msg = &#39;&#39;)
    {
        //获取推流地址
        $p_href = RTMPPublishURL("pili-publish.chengdulihong.com", $this->hubName, $streamKey, 3600, $this->accessKey, $this->secretKey);
        //获取播放地址
        $g_href = RTMPPlayURL("pili-publish.chengdulihong.com", $this->hubName, $streamKey);
        //截图直播地址
        $pic = SnapshotPlayURL("pili-publish.chengdulihong.com", $this->hubName, $streamKey);
        //更新直播间状态
        $u_broadcast = $broadcast->fill([&#39;name&#39; => $broadcast[&#39;name&#39;], &#39;chatroom_status&#39; => 0, &#39;p_href&#39; => $p_href, &#39;g_href&#39; => $g_href, &#39;pic&#39; => $pic])->save();
        if ($u_broadcast == false) {
            return $this->sendResponse(trans(&#39;admin.operate_failed&#39;) . &#39;更新直播间出错&#39;);
        }
        return true;
    }
登入後複製

     

推薦學習:《PHP視訊教學

#

以上是php怎麼實現線上直播功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)