可锐资源网

技术资源分享平台,提供编程学习、网站建设、脚本开发教程

php从远程URL获取(mp4 mp3)音视频的流媒体数据

 /**
     * 从远程URL中获取媒体(如 mp4 mp3)的内容
     * @param mixed $file_url
     * @param mixed $media_type
     * @param mixed $curl_time_out
     * @throws Exception
     * @return mixed
     */
    public static function getRemoteMediaContent($file_url = '', $media_type = "Content-Type: video/mp4", $curl_time_out = 600000)
    {

        if (empty($file_url)) {
            throw new Exception('请传入远程url地址', Response::PARAM_ERROR);
        }

        $parse_bool = parse_url($file_url);
        if ($parse_bool === false) {
            throw new Exception('请传入有效的远程url地址', Response::PARAM_ERROR);
        }

        ini_set('max_execution_time', 0);

        $useragent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36";

        //开一个ch  用来获取资源HTTP头信息(主要获取视频长度)
        $ch = curl_init();

        // TRUE 会输出所有的信息,写入到STDERR,或在CURLOPT_STDERR中指定的文件。
        curl_setopt($ch, CURLOPT_VERBOSE, 1);

        //允许 cURL 函数执行的最长秒数
        curl_setopt($ch, CURLOPT_TIMEOUT, $curl_time_out);

        //需要获取的 URL 地址,也可以在curl_init() 初始化会话的时候
        curl_setopt($ch, CURLOPT_URL, $file_url);

        //TRUE 时将会根据服务器返回 HTTP 头中的 "Location: " 重定向。
        //(注意:这是递归的,"Location: " 发送几次就重定向几次,除非设置了 CURLOPT_MAXREDIRS,限制最大重定向次数。)。
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        // 启用时会将头文件的信息作为数据流输出(注意这里第一步只需要获取资源HTTP头信息 主要是为了得到内容的长度)
        curl_setopt($ch, CURLOPT_HEADER, true);

        // TRUE 强制获取一个新的连接,而不是缓存中的连接
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);

        // FALSE 禁止 cURL 验证对等证书(peer'scertificate)。要验证的交换证书可以在 CURLOPT_CAINFO 选项中设置,或在 CURLOPT_CAPATH中设置证书目录
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

        //向服务器发送,包含了访问者系统引擎版本、浏览器信息的字段信息。
        //一般服务器识别出是爬虫请求,会拒绝访问。所以此时设置User-Agent,可以将爬虫伪装成用户通过浏览器访问。
        curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

        // TRUE 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 FALSE 时不会变成 GET
        curl_setopt($ch, CURLOPT_NOBODY, true);

        //TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出
        //这里我们不需要关心
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        //执行 cURL 会话  这里我们只关心头信息  所以不需要获取返回的内容
        curl_exec($ch);

        //获取一个cURL连接资源句柄的信息  这里主要用来读取长度
        //-- CURLINFO_CONTENT_LENGTH_DOWNLOAD   从Content-Length: field中读取的下载内容长度
        $filesize = $length = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);

        //发送请求的媒体头类型
        header($media_type);

        //------ 获取资源长度告一段落  以下用于获取媒体视频的二进制内容------

        //总共接收的数据大小
        header("Content-length: " . $filesize);

        //接收的数据类型是 字节类型 即二进制
        header('Accept-Ranges: bytes');

        $partialContent = false;
        $offset = 0; //读取数据的初始位置

        if (isset($_SERVER['HTTP_RANGE'])) {

            $partialContent = true;

            //获得初始位置和数据长度
            preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);
            $offset = intval($matches[1]);
            $length = $filesize - $offset - 1;

            /***
            断点续传: 就是从文件上次中断的地方开始重新下载或上传,当下载或上传文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会去重头下载,
            这样很浪费时间。所以断点续传的功能就应运而生了。要实现断点续传的功能,需要客户端记录下当前的下载或上传进度,
            并在需要续传的时候通知服务端本次需要下载或上传的内容片段。
            HTTP的请求上定义了断点续传相关的HTTP头Range字段和Content-Range字段。
            比如说客户端在Header中设置Range=bytes22223333- 表示文件从22223333字节开始传,前面的字节不用传了。
            服务器收到请求,返回206 Partial Content。 Content-Length=44445555,Content-Range=bytes22223333-44445554/44445555

             */
            //Chrome在对于MP3文件的访问,返回的都是206 Partial Content
            header('HTTP/1.1 206 Partial Content');

            //每次接收数据的的范围
            header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);
        }

        //重新开一个ch  用来获取内容
        $ch = curl_init();

        //如果支持分段发送数据
        if ($partialContent && isset($_SERVER['HTTP_RANGE'])) {

            //获取上次的范围
            preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);

            $offset = intval($matches[1]); //开始位置
            $length = $filesize - $offset - 1; //获取长度

            //发送带有Range的请求头
            $headers = ['Range: bytes=' . $offset . '-' . ($offset + $length) . ''];
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }

        curl_setopt($ch, CURLOPT_VERBOSE, 1);

        curl_setopt($ch, CURLOPT_TIMEOUT, $curl_time_out);

        curl_setopt($ch, CURLOPT_URL, $file_url);

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        // 启用时会将头文件的信息作为数据流输出(这里只需要获取内容 所以设置为false)
        curl_setopt($ch, CURLOPT_HEADER, false);

        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

        curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

        // TRUE 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 FALSE 时不会变成 GET  [ 这里我们不需要输出头信息]
        curl_setopt($ch, CURLOPT_NOBODY, false);

        // TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出
        //这里我们需要直接输出二进制数据
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);

        //执行 cURL 会话
        curl_exec($ch);
    }

十八.XSS跨站脚本攻击原理及代码攻防演示(一)

一.什么是XSS

1.XSS原理

跨网站脚本(Cross-site scripting,XSS) 又称为跨站脚本攻击,是一种经常出现在Web应用程序的安全漏洞攻击,也是代码注入的一种。XSS是由于Web应用程序对用户的输入过滤不足而产生的,攻击者利用网站漏洞把恶意的脚本代码注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害者用户可能采取Cookie窃取、会话劫持、钓鱼欺骗等各种攻击。这类攻击通常包含了HTML以及用户端脚本语言。

视频快速剪辑神器Avidemux上手记录

做视频的开始阶段,很多时间是花在选择素材上,特别是剪切有效的视频片段。本文介绍的是 Avidemux,这是一个跨平台(适用windows、苹果Mac、Linux),免费的软件。此工具的特点是,剪切视频后,导出文件速度极快。一般1G以内的文件,用时就几秒。十多G的视频文件,导出用时也就3-5分钟。


程序下载与安装

Avidemux的官网为: http://www.avidemux.org

PC网站建设免费咨询指南:掌握关键步骤与技术标准

企业或个人在网上展示形象和服务的关键平台是PC网站建设。借助免费咨询服务,我们可以深入掌握建设步骤和技术标准。现在,我来为大家详细阐述相关事宜。

免费咨询的意义

有PC网站建设需求的人可以通过免费咨询来获取信息。许多人对此不甚了解,不知如何开始。这样的咨询就好比一位向导,能帮助他们迅速掌握网站建设的基本知识。比如,他们可以了解不同网站的功能和特点,减少错误,提升效率。此外,通过咨询,他们还能感受到服务提供者的专业水平和态度,为未来的合作奠定基础。

[西门子] Win10在博途软件调试中Ping命令丢包严重异常处理

前言:ping命令常用参数

1.

【游戏攻略】:公会副本玩法讲解,内容介绍。

在《奇迹世界起源》手游中,公会副本是极具挑战性与团队协作性的核心玩法,

以下从玩法流程、核心机制、奖励内容及策略建议四个维度进行详细讲解:
一、玩法流程与机制
开启与备战
管理者操作:公会副本由管理者开启,进入24小时备战期。

期间可召集成员,集结后点击“开打”进入副本。
人数与进度:副本每日仅可通关一次,所有难度共享进度,需谨慎选择难度。

PHP框架(鸟哥php框架)

什么是框架?

框架就是功能的集合。

它有什么用?

框架可以加快开发进度为开发者节省大量的时间和精力。

网站后端开发源代码(网站后端开发工具)

成人网站在推动 Web 发展方面发挥的作用是不可否认的。从克服浏览器视频功能的限制到使用 WebSockets 推送广告(以防止广告拦截器拦截广告),您必须不断想出巧妙的方法,才能让自己处于 Web 技术创新的前沿。

最近,我有幸采访了大型成人网站Pornhub的一名Web开发工程师,了解了相关的开发技术,Web API的改进,以及成为一名成人网站开发工程师的感受。

注意:由于成人网站行业竞争激烈,有些问题他们无法回答我,这一点我理解。

成人网站需要显示大量图片内容。在开发过程中,您是否使用了大量图片和视频占位符?开发过程中的内容体验与最终产品之间是否存在很大差距?

[西门子PLC] 西门子200SMART与上位机WINCC如何通信

200SMART端的设置:

PC Access SMART是上位机与PLC的一个中间软件,组态王和WINCC都可以读取OPC中的数据。

要求200 smart的编程软件的版本在V2.0及以上,并采用以太网方式进行通讯连接。该OPC软件只能与200smart PLC通讯,不能够建立与200、1200、300、400、1500PLC的通讯连接。1台200samrt PLC同时允许连接8台OPC,同样,一台OPC允许最多连接8台200smart plc。

B端技术常识:MVC模式(mvc模式简介)

文章介绍了程序设计中最重要的MVC三层分层模型,与大家分享。

编程语言种类繁多,无论采用哪种语言进行程序设计,都要遵循经典的软件工程设计模式——MVC模式。

MVC是Modeling、View、Controller的缩写,代表软件设计的分层理念:Modeling指数据模型,View指前端交互视图,Controller指业务逻辑,MVC模式下的软件分层结构如下图所示。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言