直接上代码<?php //php下载m3u8文件$url = $argv['1'];if(!file_exists('./tmp/')) {    if(!mkdir('./tmp/')) {        die('请手动在当前目录创建tmp目录');

}

}

$indexPage = file_get_contents($url);

preg_match_all('/.*\.ts/', $indexPage, $matches);if(empty($matches)) {    die('m3u8 文件格式错误');

}

go(function() use($matches) {

$chan = new chan(100); //最大并发数

foreach($matches['0'] as $key => $value) {        if(file_exists('./tmp/'.$key.'.ts')) {            continue;

}

$chan->push('xx');

go(function() use($key, $value, $chan) {

echo "\nAdd task:".$key;            while(1) {

$rs = co_curl($value);                if(strlen($rs) > 0) {

file_put_contents('./tmp/'.$key.'.ts', $rs);                    break;

}

}            echo "\nTask ok:".$key;

$chan->pop();

});

}    //确保所有下载已经完成

for($i = 0; $i

$chan->push('over');

}    //合并文件

foreach ($matches['0'] as $key => $value) {

file_put_contents('out.mp4', file_get_contents('./tmp/'.$key.'.ts'), FILE_APPEND);

unlink('./tmp/'.$key.'.ts');

}    echo "\n 下载完成,转换成功 (out.mp4)";

});function co_curl($url, $cookies = '', $data = array(), $userHeaders = array(), $retJson = 0){    while(1) {

$urlInfo  = parse_url($url);

$domain   = $urlInfo['host'];        if($urlInfo['scheme'] == 'https') {

$port = 443;

$ssl = true;

} else {

$port = isset($urlInfo['port']) ? $urlInfo['port'] : 80;

$ssl = false;

}

$filename = $urlInfo['path'];

$filename .= isset($urlInfo['query']) ? '?' . $urlInfo['query'] : '';

$cli     = new Swoole\Coroutine\Http\Client($domain, $port, $ssl);

$headers = [            'Host'            => $domain,            "User-Agent"      => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',            'Accept'          => 'text/html,application/xhtml+xml,application/xml',            'Accept-Encoding' => 'gzip',

];        if ($userHeaders) {

$headers = array_merge($headers, $userHeaders);

$headers = $userHeaders;

}        if ($cookies) {

$headers['Cookie'] = $cookies;

}

$cli->setHeaders($headers);

$cli->set(['timeout' => 60]);        if ($data) {            if($data == 'post') {

$data = '';

}

$cli->post($filename, $data);

} else {

$cli->get($filename);

}

$body = $cli->body;

$cli->close();

if($cli->statusCode statusCode;

// echo "\n body: ".$body;

// echo "\n retry...";

} else {            return $body;

}

}

}

使用方法php index.php https://doubanzyv1.tyswmp.com/2018/07/30/LSn7hSBfY0LxpKX2/playlist.m3u8

输出文件路径

当前目录的out.mp4

作者:Dorm_Script

链接:https://www.jianshu.com/p/2b576ada4df5

php配置支持m3u8,PHP实现m3u8并发下载相关推荐

  1. iOS m3u8本地缓存播放(控制下载并发、暂停恢复)

    一m3u8缓存播放的整个流程 二控制媒体下载的并发数 三控制单个媒体的切片下载并发数 四下载的中断和恢复 总结下任务生命周期中的任务状态变化 五注意的问题与思路延伸 一.m3u8缓存播放的整个流程 1 ...

  2. 网页M3U8视频Windows平台解析下载

    一.所需工具 1 猫抓网页插件 :https://o2bmm.gitbook.io/cat-catch/docs/install 2 N_m3u8DL-CLI https://github.com/n ...

  3. nginx配置支持http2

    遇到问题:开发提出需求,某站点的访问需要支持http2 解决问题:配置nginx支持http2 http2 的支持需要nginx版本>1.9.5 .请参考升级nginx版本http://meng ...

  4. Linux视频切片m3u8,Rtmp转m3u8视频切片系统及方法

    Rtmp转m3u8视频切片系统及方法 [技术领域] [0001]本发明涉及视频数据传输及播放技术领域,尤其涉及一种RTMP转M3U8视频切片系统及方法. [背景技术] [0002]传统的视频监控系统是 ...

  5. m3u8 视频提取工具(下载web中的ts文件)

    m3u8 视频提取工具(下载web中的ts文件) 开发背景 m3u8视频格式简介(借用他人描述) m3u8视频格式原理:将完整的视频拆分成多个 .ts 视频碎片,.m3u8 文件详细记录每个视频片段的 ...

  6. HLS直播(M3U8)回看和下载功能的实现

    流媒体始终是大众生活娱乐最为重要的一个部分,同时也是技术开发中比较有难度的,尤其是直播,不仅功能是点播无法替代的,开发难度也要比点播大,里约奥运会等重大体育赛事大家只能通过直播观看比赛,体会现场观看的 ...

  7. 小雉配置--支持向上向下兼容的 配置文件 兼容性 设计

    概述 软件的开发离不开配置,传统的软件设计包括前端.后台和数据库3部分,三者是密切配合的统一整体,在实际项目中往往遇到以下问题: 因项目需求不明而增加.修改.删除参数导致配置结构调整后难以同已有数据兼 ...

  8. iOS流媒体开发之三:HLS直播(M3U8)回看和下载功能的实现

    1.概要 流媒体开发第一篇文章就说要把这些不是随便就可以百度到的知识献给"简书",拖了一个多月了,总算弄完了,深深松了口气,万幸没有食言,否则对不起小伙伴们. 流媒体始终是大众生活 ...

  9. m3u8直播流视频实时下载小记-HLS(Http Live Streaming)录屏

    最近由于发现自己想回看的直播会被剪镜头,所以下定决心以后要学会录屏.但一般的录屏软件满足不了我的需要,主要是: 会录出鼠标操作.网络卡顿.水印等影响观感的画面 由于显示器和录屏软件的和原视频帧数可能不 ...

  10. python 打包 .app 运行 控制台窗口_Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法...

    windows系统下安装Pyinstaller cmd下输入指令 pip install PyInstaller Pyinstaller的使用 进入需要打包的目录下,执行打包命令 Pyinstalle ...

最新文章

  1. 在.NET 2.0正式版中开发无刷新页面
  2. VS2010中使用正则表达式替换时无法使用回车符的解决方法
  3. Java虚拟机和Dalvik(android)虚拟机的区别
  4. 高压特种作业考试易错总结
  5. 掌握后可为孩子收藏的MySQL入门全套
  6. mysql5.7安装完成后密码是多少_安装了mysql5.7后,如何进行配置(密码等)初始化...
  7. resin端口错误问题
  8. redhat rpm 卸载mysql_Linux下卸载MySQL rpm包出现error: specifies multiple packages 解决
  9. [总结]RTMP流媒体技术零基础学习方法
  10. Sharepoint 2010 对话框框架
  11. <数据结构> 顺序表
  12. .net开通exchange邮箱
  13. 自动化运维脚本模块-stmplib,emai模块
  14. jpa+hibernate整合达梦数据库(附源码)
  15. 浅淡 Apache Kylin 与 ClickHouse 的对比
  16. Ubuntu16.04装拼音/Sogou遇到的问题(卸载/重装 Fcitx / Fcitx Configuration、卸载/重装Sogou)
  17. 定时器-----每天定时删除临时文件
  18. 数据分析AB测试实战项目
  19. 线性规划第一阶段入基变量和出基变量选择的细节讨论
  20. 兴趣爱好页面.html,兴趣筛选页面.html

热门文章

  1. 软件设计师——多媒体技术常见考点总结
  2. 安川机器人报错_安川机器人报错代码:报警历史和I/O 信息历史
  3. android 日历 周显示,按周显示的日历和按月显示的日历,你需要吗
  4. 三菱PLC与第三方设备TCP通讯_【原创干货】一台威纶通触摸屏与多台三菱PLC通讯案例,欢迎收藏!...
  5. 读书 | 可复制的领导力(内含思维导图)
  6. windows cmd curl 中文乱码
  7. 有约束条件的优化问题求解推导
  8. 关于在vs2012中提示.NET 4.5未在web服务器上注册的解决方案
  9. centos查询 硬盘序列号查询_CentOS 查看硬件信息
  10. flashbuilder4.7 打断点调试flash