直接上代码

//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 "

Add task:".$key;

while(1) {

$rs = co_curl($value);

if(strlen($rs) > 0) {

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

break;

}

}

echo "

Task ok:".$key;

$chan->pop();

});

}

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

for($i = 0; $i < 100; $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 "

下载完成,转换成功 (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 SwooleCoroutineHttpClient($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 < 1 || ($retJson && empty(json_decode($body, true)))) {

// echo "

status code:" . $cli->statusCode;

// echo "

body: ".$body;

// echo "

retry...";

} else {

return $body;

}

}

}

php代理m3u8,PHP实现m3u8并发下载相关推荐

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

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

  2. 成品APP直播源码HLS直播(M3U8)回看和下载功能的实现

    HLS下载流程 解码 解码这一步就做一件事情,拿到播放链接,读取M3U8索引文件,解析出每一个TS文件的下载地址和时长,封装到Model中,供后面使用. 解码器ZYLM3U8Handler.h文件 # ...

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

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

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

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

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

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

  6. m3u8简单教程之巨齿鲨下载

    原文地址:m3u8简单教程之巨齿鲨下载 #MACOS系统一枚#MAC安装ffmpeg$brew install ffmpeg#下载eg:$ ffmpeg -i http://yong.yongjiu6 ...

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

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

  8. python下载m3u8视频_使用python 下载m3u8格式视频,并使用ffmpeg 合成视频

    使用python 下载m3u8格式视频,并合成 # -*- coding: utf-8 -*- # Created on 2018/07/26 import os import requests &q ...

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

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

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

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

最新文章

  1. 127.0.0.1和0.0.0.0地址的区别
  2. 使用Python+OpenCV预测年龄与性别
  3. 在linux系统安装R及rstudio
  4. 个人管理:简单,我微博中的一句话,总有你喜欢的
  5. leetcode 刷题之路 64 Construct Binary Tree from Inorder and Postorder Traversal
  6. android字符显示流程图,Android应用层View绘制流程与源码分析
  7. js解析json字符串数组
  8. iptables删除所有规则_如何解决iptables删除命令中遇到的问题
  9. 各大厂抢招WPF,小米这回是下了血本啊...
  10. P2863 [USACO06JAN]牛的舞会The Cow Prom
  11. python的变量对大小写并不敏感_Python编程基础02:Python基本语法
  12. Python 学习笔记——文件对象和操作
  13. 台式机黑苹果独显驱动
  14. 笔记本电脑设置WiFi共享
  15. 标准C语言程序设计第七版pdf,C语言程序设计 201607.pdf
  16. c语言 派生,继承和派生
  17. ON_NOTIFY用法
  18. 数字IC设计工程师的知识结构
  19. 经典励志名言100余句
  20. 什么是工程师文化?-陈皓

热门文章

  1. python远程登录并执行命令_Python - 远程SSH执行命令
  2. 南京理工大学计算机学院教师信息网,南京理工大学教师信息
  3. python在末尾加关闭程序_廖雪峰的Python教程教程-02
  4. 为什么仿宋字体打印出楷体_win7缺少仿宋_GB2312和楷体_GB2312字体,造成word字体显示不正常...
  5. k3 审核流程图_3-金蝶K3操作流程图详解
  6. python入门小游戏之跳一跳_从零基础开始,用python手把手教你玩跳一跳小游戏,直接打出高分...
  7. access如何保存小数点后_如何把示波器当记录仪用
  8. python图像数独_Python图像识别+KNN求解数独的实现
  9. linux mint 18.3浏览器,在Linux Mint 19/Ubuntu 18.04中安装Tor Browser浏览器的方法
  10. acer电脑设置u盘启动方法