«

使用php对接阿里云mps对oss上视频进行转码m3u8

时间:2025-3-19 08:37     作者:杨佳乐     分类: PHP


目前许多短视频平台都采用把用户上传视频统一转码为m3u8+ts文件格式

主要优势:
适应性流媒体传输:M3U8可以根据用户的网络速度自动调整视频质量,确保流畅播放。它通过提供不同质量级别的媒体文件链接,使播放器能够根据当前网络条件选择最合适的质量级别进行播放。

分段传输:将长视频分割成小片段,便于通过HTTP协议快速传输。这种方式使得视频可以边下载边播放,减少了等待时间。

跨平台兼容性:M3U8格式被广泛支持,可以在多种设备和浏览器上播放,包括移动设备、桌面计算机以及智能电视等。

直播和点播:M3U8既可以用于直播流媒体,也可以用于点播服务,使其成为在线视频平台的理想选择。

本次使用php对接阿里云提供的mps服务,对视频进行转码

安装以下SDK

composer install alibabacloud/sdk
composer install alibabacloud/mts-20140618

下面代码为提交转码任务

<?php
namespace app;

use AlibabaCloud\SDK\Mts\V20140618\Models\SubmitJobsRequest;
use AlibabaCloud\SDK\Mts\V20140618\Mts;
use Darabonba\OpenApi\Models\Config;

use AlibabaCloud\Tea\Tea;
use AlibabaCloud\Tea\Utils\Utils;

class LeCommon
{

    const accessKeyId = 'LT*******mHs';
    const accessKeySecret = 'rki********P3J';
    const regionId = 'cn-hangzhou'; //地域id

    const PipelineId = '457cf7********2d77'; //管道ID

    const ossLocation = 'oss-cn-hangzhou';

    const bucket  = 'sh*****-1'; //oss bucket名称

      //此处为阿里云内置模板,转换1920全高清为m3u8+ts格式
    const templateId = "S00000001-100040"; #转码模板ID,按需配置
    const oss_input_object  = "test_input.mp4"; //oss上面的路径
    const oss_output_object  = "output_test"; //输出后的oss路径

    public static function createClient(){
        $config = new Config([]);
        $config->accessKeyId = self::accessKeyId;
        $config->accessKeySecret = self::accessKeySecret;
        $config->regionId = self::regionId;
        $config->protocol = "HTTPS";
        $config->endpoint = 'mts.cn-hangzhou.aliyuncs.com';
        return new Mts($config);
    }

    public static function test(){

        $client = self::createClient();

        $request = new SubmitJobsRequest([
            "input" => json_encode(array(
                'Location' => self::ossLocation,
                'Bucket' => self::bucket,
                'Object' => urlencode(self::oss_input_object))
            ),
            "outputBucket" => self::bucket,
            "outputLocation" => self::ossLocation,
            "pipelineId" => self::PipelineId,
            "outputs" => self::outputs(),
        ]);

        $response = $client->submitJobs($request);
        //Console::log();

        var_dump($response);
        var_dump(Utils::toJSONString(Tea::merge($response->body)));
    }

    public static function outputs() {
        $output = array('OutputObject' => urlencode(self::oss_output_object));
        $output['TemplateId'] = self::templateId;
        $outputs = array($output);
        return json_encode($outputs);
    }

}