{"id":13907505,"url":"https://github.com/xyqjay/m3u8ToMP4","last_synced_at":"2025-07-18T05:32:04.774Z","repository":{"id":188376589,"uuid":"50426345","full_name":"xyqjay/m3u8ToMP4","owner":"xyqjay","description":"iOS demo,avplayer play m3u8 .ts file","archived":false,"fork":false,"pushed_at":"2019-11-21T08:23:52.000Z","size":30171,"stargazers_count":25,"open_issues_count":1,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-08-07T23:52:08.120Z","etag":null,"topics":["avplayer","m3u8","swift5"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xyqjay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2016-01-26T12:08:52.000Z","updated_at":"2024-02-06T09:30:05.000Z","dependencies_parsed_at":"2023-08-15T04:29:01.847Z","dependency_job_id":null,"html_url":"https://github.com/xyqjay/m3u8ToMP4","commit_stats":null,"previous_names":["xyqjay/m3u8tomp4"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xyqjay%2Fm3u8ToMP4","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xyqjay%2Fm3u8ToMP4/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xyqjay%2Fm3u8ToMP4/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xyqjay%2Fm3u8ToMP4/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xyqjay","download_url":"https://codeload.github.com/xyqjay/m3u8ToMP4/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226353715,"owners_count":17611751,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["avplayer","m3u8","swift5"],"created_at":"2024-08-06T23:01:58.206Z","updated_at":"2024-11-25T15:32:02.353Z","avatar_url":"https://github.com/xyqjay.png","language":"Swift","funding_links":[],"categories":["HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"# m3u8ToMP4\n![Swift 5.1](https://img.shields.io/badge/Swift-5.1-orange.svg)\n[GitHub地址](https://github.com/xyqjay/m3u8ToMP4)\n\n* ~~这个Demo暂时~~ DEMO里第一个Controller是简单的使用AVFoundation.FrameWork拼接视频\n* 第二个Controller里是AVPlayerItem无缝切换播放两段视频 2016-01-29 11:00:19\n* 第三个controller是本地起个轻量级服务器来播放m3u8视频 2016-01-29 11:00:37\n\n\n###最近在研究m3u8的播放和缓存,所以工程名称是m3u8ToMP4\n\nM3U8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件，打开它时播放软件并不是播放它，而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。\n\n在线播放这块,视频格式被支持的话 AVPlayer是可以直接播放的。\n\n缓存这块，只能拿到索引，把音视频一个一个下载下来，并且把索引也保存起来。但是下载后的视频（传个本地m3u8 URL）是无法播放的，对于播放缓存视频，这里我想到了三种解决方案：\n####1、视频拼接\n把下载下来的视频片段拼接起来，这个Demo就是MP4的拼接。\n####2、本地搭建服务器\n使用[CocoaHTTPServer](https://github.com/robbiehanson/CocoaHTTPServer)在本地搭建个服务器，把M3U8内的视频索引换为本地相对路径。~~这个Demo还没有出，以后有空实验下。~~\n这个已经测试成功，在Demo里的第三个Controller。2016-01-29 11:01:45\n####3、拿到本地缓存的视频片段挨个播放\nAVPlayerItem，一个视频对应一个item同时创建两个item来回切换着播放，[AVQueuePlayer insertItem:afterItem:]这样应该可以做无缝切换视频,~~还没有试验。Demo暂时还没~~ \n刚刚测试，这样切换播放两段视频可以无缝切换,请看Demo里第二个Controller 2016-01-27 18:32:10\n这样方案1、2都没有多大必要了。方案1的好处是可以拼接一个完整的视频出来。\n\n\n```\nAVFoundation.FrameWork非常强大,除了音视频播放外，\n还有音频、视频的拼接、剪切功能，视频的音频提取等功能，\n有兴趣的可以深入研究。\n```\n\n这里有一个高端的视频拼接方案\n拥有多种视频拼接方法： 上下拼接，左右拼接， 上上下下/左左右右式拼接。\n感兴趣的自己看 [Github地址](https://github.com/xujingzhou/VideoSplice)\n\n\n###最近在土豆上看到了一个非常棒的纪录片\n在用土豆APP缓存视频的时候产生了一个想法：\n\n```\n把这个缓存的视频提取出来，做收藏用。\n```\n\n但是用iTools把资源导出来后我傻眼了，它缓存的是m3u8文件，每一个视频段都是.ts结尾的，每段10s左右，一集有200多个ts文件，在Mac上使用QuickTime能正常使用，我就想是不是iOS也支持，写个Demo把他们拼接起来。\n\n之前做过的项目有音频拼接，**最近**正好在学习swift，就干脆动手，用swift写一个视频拼接的Demo。\n\n```\nPS. 最近好忙。。。“最近”好忙\n（*\u003e.\u003c*）。到底是“最近”好忙，还是我好忙，这是个问题( ＊＿＊ ) \n```\n后来写Demo时发现iOS的AVPlayer不支持这个ts，也没法拼接视频文件(ps.既然QuickTime支持，可以考虑移植到Mac上试试。pps.我对音视频格式也没有过多的研究所以不知道原因。)\n\n但是，Demo都写了，得让我验证下行不行啊，我在腾讯视频上下了一集芈月传，发现腾讯视频缓存下来的是mp4格式的视频段，每段有5分钟，正和我意。于是放到工程里做测试用。\n\n```\n当然，除了试试osx平台行不行，我还需要找找其他渠道有没有视频供我下载\n```\n###这么好的视频当然要分享出来了 传送门：[宇宙：时空之旅](http://www.tudou.com/plcover/3PSPjRMccHc/)\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxyqjay%2Fm3u8ToMP4","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxyqjay%2Fm3u8ToMP4","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxyqjay%2Fm3u8ToMP4/lists"}