php代理m3u8,PHP实现m3u8并发下载
直接上代码
//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并发下载相关推荐
- iOS m3u8本地缓存播放(控制下载并发、暂停恢复)
一m3u8缓存播放的整个流程 二控制媒体下载的并发数 三控制单个媒体的切片下载并发数 四下载的中断和恢复 总结下任务生命周期中的任务状态变化 五注意的问题与思路延伸 一.m3u8缓存播放的整个流程 1 ...
- 成品APP直播源码HLS直播(M3U8)回看和下载功能的实现
HLS下载流程 解码 解码这一步就做一件事情,拿到播放链接,读取M3U8索引文件,解析出每一个TS文件的下载地址和时长,封装到Model中,供后面使用. 解码器ZYLM3U8Handler.h文件 # ...
- HLS直播(M3U8)回看和下载功能的实现
流媒体始终是大众生活娱乐最为重要的一个部分,同时也是技术开发中比较有难度的,尤其是直播,不仅功能是点播无法替代的,开发难度也要比点播大,里约奥运会等重大体育赛事大家只能通过直播观看比赛,体会现场观看的 ...
- 网页M3U8视频Windows平台解析下载
一.所需工具 1 猫抓网页插件 :https://o2bmm.gitbook.io/cat-catch/docs/install 2 N_m3u8DL-CLI https://github.com/n ...
- iOS流媒体开发之三:HLS直播(M3U8)回看和下载功能的实现
1.概要 流媒体开发第一篇文章就说要把这些不是随便就可以百度到的知识献给"简书",拖了一个多月了,总算弄完了,深深松了口气,万幸没有食言,否则对不起小伙伴们. 流媒体始终是大众生活 ...
- m3u8简单教程之巨齿鲨下载
原文地址:m3u8简单教程之巨齿鲨下载 #MACOS系统一枚#MAC安装ffmpeg$brew install ffmpeg#下载eg:$ ffmpeg -i http://yong.yongjiu6 ...
- m3u8 视频提取工具(下载web中的ts文件)
m3u8 视频提取工具(下载web中的ts文件) 开发背景 m3u8视频格式简介(借用他人描述) m3u8视频格式原理:将完整的视频拆分成多个 .ts 视频碎片,.m3u8 文件详细记录每个视频片段的 ...
- python下载m3u8视频_使用python 下载m3u8格式视频,并使用ffmpeg 合成视频
使用python 下载m3u8格式视频,并合成 # -*- coding: utf-8 -*- # Created on 2018/07/26 import os import requests &q ...
- m3u8直播流视频实时下载小记-HLS(Http Live Streaming)录屏
最近由于发现自己想回看的直播会被剪镜头,所以下定决心以后要学会录屏.但一般的录屏软件满足不了我的需要,主要是: 会录出鼠标操作.网络卡顿.水印等影响观感的画面 由于显示器和录屏软件的和原视频帧数可能不 ...
- Linux视频切片m3u8,Rtmp转m3u8视频切片系统及方法
Rtmp转m3u8视频切片系统及方法 [技术领域] [0001]本发明涉及视频数据传输及播放技术领域,尤其涉及一种RTMP转M3U8视频切片系统及方法. [背景技术] [0002]传统的视频监控系统是 ...
最新文章
- webp-imageio 如何编译及使用
- margin和padding
- eclipse从数据库逆向生成Hibernate实体类
- invalid use of incomplete type ‘class UI::MainWindow‘解决方法
- 61 Celery Beat 任务调度
- Delphi指针大全
- linux下安装树梅派系统,优麒麟树莓派系统(优麒麟 for Raspberry Pi)的安装方法...
- linux管理之磁盘信息和进程管理
- windows2016安装.netFramework 3.5
- Thinking in AJAX(二) —— 基于AJAX的WEB设计
- linux 启动启动服务_更快地启动Linux
- 搜狗2011笔试题+答案解析
- FPGA实现FIR滤波器
- win10系统服务器不能创建对象,win10系统中activex部件不能创建对象怎么修复
- 交友约会APP源码大家有吗
- Android5.0系统下代码格式化sd卡方法
- python学习笔记之爬虫框架scrapy(十七)
- 以太坊客户端mist和geth加快区块同步速度的方法
- 夯实基础——P1830 轰炸III
- IPFS云服务器预售登录系统,北宁ipfs云算力预售,IPFS社区社区
热门文章
- java 队列复制_复制一个文件夹里的文件到另一个目录下 (使用队列的方法实现)...
- html5的交互标签,html5里交互元素的使用方法
- 做自适应网站专业乐云seo_什么叫网站优化-网站建设-SEO优化
- 连接linux工具Mtr,Linux常用网络工具:路由扫描之mtr
- 谷歌浏览器怎么查看网页源代码 Chrome浏览器网页源代码查看技巧分享
- 腾讯视频免费下载安装_怎样下载腾讯视频里的视频
- 电脑提示找不到宽带连接怎么办
- Mybatis源码分析开篇
- Spring boot自定义启动字符画(banner)
- 计算机系统结构结构相关实验报告,计算机系统结构实验报告.doc