zikwall / m3u-content-parser
此包最新版本(dev-master)没有可用的许可证信息。
dev-master
2022-04-06 12:35 UTC
Requires
- php: >=7.1.0
This package is auto-updated.
Last update: 2024-09-06 17:46:00 UTC
README
m3u 内容解析器
简洁、功能性强且易于使用的播放列表解析器
示例用法
use zikwall\m3ucontentparser\M3UContentParser; use zikwall\m3ucontentparser\M3UItem; $parser = new M3UContentParser('https://iptv-org.github.io/iptv/countries/ru.m3u'); $parser->parse(); foreach ($parser->limit(20)->all() as $item) { /** * @var $item M3UItem */ echo $item->getTvgName(), PHP_EOL, $item->getTvgLogo(), PHP_EOL, $item->getTvgUrl(), PHP_EOL, $item->getGroupTitle(), PHP_EOL, $item->getId(), PHP_EOL; $item->getGroupId(), PHP_EOL, $item->getLanguage(), PHP_EOL, $item->getCountry(); }
更多示例
// rewrite current m3u content foreach ($parser->all() as $item) { /** * @var $item M3UItem */ $item ->replaceTvgName('UNNAMED ITEM') ->replaceTvgLogo('NEW LOGO URL') ->replaceTvgUrl('CHANE NEW URL'); } echo $parser->rewriteM3UFile(); output example: #EXTM3U url-tvg="http://iptvx.one/epg/epg.xml.gz" #EXTINF:-1 group-title="Новости",UNNAMED ITEM CHANE NEW URL #EXTINF:-1 group-title="Новости",UNNAMED ITEM CHANE NEW URL
分段解析器
use zikwall\m3ucontentparser\SegmentM3U; $segmant = new SegmentM3U(); $fragment->attachSource('examples/segments/index.m3u8')->parse(); print_r($segment->getFragments()); print_r($segment->getSegments()); print_r($segment->getTime()); var_dump($segment->getIsEnding());
复杂示例
use zikwall\m3ucontentparser\M3UContentParser; use zikwall\m3ucontentparser\SegmentM3U; use zikwall\m3ucontentparser\M3UItem; use zikwall\m3ucontentparser\FragmentM3UItem; $parser = new M3UContentParser('https://iptv-org.github.io/iptv/countries/ru.m3u'); $parser->parse(); foreach ($parser->limit(10)->offset(10)->all() as $item) { /** * @var $item M3UItem */ $segment = new SegmentM3U(); $segment->attachSource($item->getTvgUrl())->parse(); if ($segment->getIsFragmentSource() === true) { /** * @var $fragment FragmentM3UItem */ echo $segment->getCleanSource(), PHP_EOL; foreach ($segment->getFragments() as $fragment) { $subSegment = new SegmentM3U(); $subSegment->attachSource($segment->getNewSource($fragment->fragment))->parse(); echo $segment->getNewSource($fragment->fragment), PHP_EOL; } continue; } // ... conventional segment processing foreach ($segment->getSegments() as $segmentItem) { /** * @var $segmentItem SegmentM3UItem */ echo $segment->getNewSource($segmentItem->segment), PHP_EOL; // display generated chunk links // http://xxxxx/stream8/stream2020_2_23_13_44_7-65006.ts // http://xxxxx/stream8/stream2020_2_23_13_44_18-65007.ts // http://xxxxx/stream8/stream2020_2_23_13_44_28-65008.ts // ... } }
看起来很复杂?其实更简单!
$segment = new SegmentM3U(); $segment->attachSource('http://mhd.xxxxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/variable.m3u8')->parse(); if ($segment->getIsFragmentSource() === true) { $segments = []; foreach ($segment->getFragments() as $fragment) { $subSegment = new SegmentM3U(); $subSegment->attachSource($segment->getNewSource($fragment->fragment))->parse(); echo $segment->getNewSource($fragment->fragment), PHP_EOL; /** * Get total duration */ echo sprintf('Duration is: %0.2f seconds', $subSegment->getDuration()), PHP_EOL; foreach ($subSegment->getSegments() as $sgmt) { echo $subSegment->getNewSource($sgmt->segment), PHP_EOL; } } /** * Original: http://mhd.xxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/variable.m3u8 * Cleaning: http://mhd.xxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vl2w/ * * Return stream links (FRAGMENTS): * - http://mhd.xxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vl2w/playlist.m3u8 // LOW * - http://mhd.xxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vm2w/playlist.m3u8 // MIDDLE * - http://mhd.xxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vh1w/playlist.m3u8 // HIGH */ /** * Each all fragments return SegmentM3UItem Object * http://mhd.xxxxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vh1w/playlist.m3u8 * * Array * ( * [0] => zikwall\m3ucontentparser\SegmentM3UItem Object * ( * [duration] => 6 * [segment] => segment-1582439833-08914115.ts * ) * [1] => zikwall\m3ucontentparser\SegmentM3UItem Object * ( * [duration] => 6 * [segment] => segment-1582439833-08914116.ts * ) * ... */ /** * Convert to valid links, example: * * http://mhd.xxxxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vh1w/segment-1582439833-08914207.ts * http://mhd.xxxxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vh1w/segment-1582439833-08914208.ts * http://mhd.xxxxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vh1w/segment-1582439833-08914209.ts * http://mhd.xxxxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vh1w/segment-1582439833-08914210.ts * http://mhd.xxxxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vh1w/segment-1582439833-08914211.ts * http://mhd.xxxxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vh1w/segment-1582439833-08914212.ts * http://mhd.xxxxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vh1w/segment-1582439833-08914213.ts * http://mhd.xxxxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vh1w/segment-1582439833-08914214.ts * http://mhd.xxxxxxx.tv/p/k5OqlMqeQONvANUJOq9GFQ,1582553567/streaming/ntvnn/324/vh1w/segment-1582439833-08914215.ts */ }
更简单
$segment = new SegmentM3U(); $segment->attachSource('http://hls.kinoplayer.co/hls/PaSSagir.iz.SanFranCissko.2O17.HDRip/playlist.m3u8')->parse(); foreach ($segment->getSegments() as $sgmt) { echo $segment->getNewSource($sgmt->segment), PHP_EOL; } echo sprintf('Duration is: %0.2f seconds', $segment->getDuration()), PHP_EOL;
更多分段解析器示例
您可以尝试不同的示例组合
API
- 解析器构造函数接受一个链接或文件路径
$parser = new M3UContentParser('https://iptv-org.github.io/iptv/countries/ru.m3u');
- 解析通过相同的方法调用
$parser->parse();
m3u 解析器中的方法
-
getCahce()
-
getResfresh()
-
getTvgUrl()
-
limit(int)
-
offset(int)
-
all()
-
getItems()
-
rewriteM3UFile()
m3u 项目对象中的方法
-
getId()
-
getTvgId()
-
getTvgName()
-
getTvgUrl()
-
getTvgLogo()
-
getTvgShift()
-
getGroupId()
-
getGroupTitle()
-
getExtGrp()
-
getCensored()
-
getLanguage()
-
getCountry()
-
getAudioTrack()
-
getAudioTrackNum()
-
getExtraAttributes()
API 分段
-
getFragments()
返回具有属性的轨道数组 -
getSegments()
返回轨道中的分段数组 -
getTime()
返回时间码数组:小时、分钟、秒和字符串格式 HH:MM:SS 及原始值 -
getDuration()
返回秒的浮点值持续时间 -
getIsEnding()
返回布尔值,指示流是否有结束 -
getIsFragmentSource()
-
getNewSource(string $sub_source)
-
getHashHeaders()
-
getDirtyItems()
安装
composer require zikwall/m3u-content-parser
开发模式
{ "minimum-stability": "dev", "repositories": [ { "type": "git", "url": "https://github.com/zikwall/m3u-content-parser.git" } ], "require": { "zikwall/m3u-content-parser": "dev-master" } }
有问题?
对于所有问题和建议 - 欢迎提交问题