PHP下载m3u8视频及解析下载ts资源文件

2 篇文章 0 订阅
1 篇文章 0 订阅

上一篇写了PHP生成合并ts脚本,后来又想直接下载m3u8里面的ts,又码了一段。

<?php
/*
 * PHP下载m3u8视频和及解析下载ts资源文件
 *
 * @file m3u8download.php
 *
 * @author RoadToTheExpert
 * @site https://blog.csdn.net/roadtotheexpert
 * @version 简单版
 */

function echon($s) {
	echo $s . PHP_EOL;
}

function m3u8download($m3u8_url, $ts_url_dir, $out_dir) {
	$m3u8_data = @file_get_contents($m3u8_url);
	if(empty($m3u8_data)) {
		echon('获取m3u8数据失败:' . $m3u8_url );
		return;
	}

	preg_match_all('/.*\.ts/', $m3u8_data, $matches);
	if(empty($matches)) {
		echon('获取ts数据失败');
		return;
	}

	if( !file_exists($out_dir) ) {
		if( !mkdir( $out_dir ) ) {
			echon('创建目录失败:'.$out_dir);
			return;
		}
	}

	$ts_url = '';
	$ts_save_to = $out_dir . '\big.ts';

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

		if( strpos($val, 'http') === 0 ) { //如果ts是http开始
			$ts_url = $val;
		} else if( $ts_url_dir == 'auto' ) { //等于auto则取m3u8的dirname
			$ts_url = dirname($m3u8_url) + '/' + $val;
		} else {
			//如果ts是basename,且与m3u8不在同一目录,你需要手动赋值$ts_url_dir
			$ts_url = $ts_url_dir + '/' + $val;
		}

		$ts_dat = @file_get_contents($ts_url);
		if( !empty($ts_dat) ) {
			//合成大ts文件,可能会报内存不足
			//file_put_contents($ts_save_to, $ts_dat, FILE_APPEND);

			$ts_save_to = $out_dir . '\\' . sprintf('%05d', $key) . '.ts';
			file_put_contents($ts_save_to, $ts_dat);

			echon( $val . ' [SaveTo] ' . $ts_save_to );
		} else {
			echon( 'Faile to fetch :  ' . $val );
		}
	}

}


//m3u8的url
$m3u8_url = 'https://vod.xxx.com/2021/1000kb/hls/index.m3u8';
//m3u8里面的ts地址是否需加前缀
$ts_url_dir = 'auto';
//已有目录。
$out_dir1 = 'E:\1';
//将要新建的目录。
$out_dir2 = '\ddr';

m3u8download($m3u8_url, $ts_url_dir, $out_dir1 . $out_dir2 );

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值