m3u8格式转换mp4安卓
转换步骤如下:
一、手机上面找到m3u8格式文件的存储位置,在打开方式里边选择“HTML查看器”查看,此时将会看到索引文件指引的缓存视频文件存放路径。
二、如果手机上面的“HTML查看器”打不开m3u8格式文件,可以将此文件重命名成“.txt”文本格式的文件,然后再打开,之后将会看到缓存视频文件存放路径。
三、根据m3u8格式文件里边指引的路径找到缓存的视频文件,然后把这些缓存的视频文件复制到电脑上面。
四、在电脑上面新建一个文本文档,在文本文档里边输入“copy /b D:合成视频.ts+1.ts+2.ts my视频.ts”并保存。(要合成的视频顺序不能颠倒)
代码注释:“copy /b”表示把文件(0.ts、1.ts、2.ts)按二进制格式来合并,然后生成“my视频.ts”的新文件。
五、把文本文档重命名并将它的后缀名由“.txt”改成“.bat”,如:“新建文本文档.txt”改成“合成命令.bat”。
六、双击bat命令文件,之后在文件夹里边将会出现一个新的文件。
七、文件合成完成后,使用格式转换软件把合成的视频文件转换成mp4的格式。
八、还有一种比较便捷的方法,那就是直接把文件的后缀名改成mp4,如:“my视频.ts”改成“my视频.mp4”。
注:第八种方法不建议使用,这就需要播放器同时支持这两种格式才行,否则文件将没法播放。
安卓手机m3u8转为mp4格式100%有效的方法
首先推荐两款安卓手机上全网视频下载神器 X浏览器和QQ浏览器
虽然我平时用安卓手机的X浏览器(这款浏览器强烈推荐使用)的嗅探资源媒体功能就已经能下载90%的网络视频,但是还是有些视频格式比较奇葩(如斗鱼的m3u8格式),连X浏览器都嗅探不到,这是就需要配合QQ浏览器的下载功能了QQ浏览器的视频格式是html5格式,它支持很多视频的直接下载,但它的缺点是下载视频格式是m3u8格式,这种格式可以认为只是一种缓存,并不能像mp4格式那样方便移动,那么如何才能把m3u8格式转为mp4格式呢?安卓手机m3u8转为mp4方法如下
首先你需要安卓一个app m3u8合并, 下载地址传送门 提取码:khyr,或者百度直接搜这个app下载安装好然后我用QQ浏览器下载了一段m3u8格式的视频示范如何转换为mp4
查看QQ浏览器下载管理,发现视频已经下载好了
打开m3u8合并app
点自定义扫描,扫描自己手机上QQ浏览器视频缓存位置, 设置好自己输出mp4文件的保存位置,点击转码合并
提示合并完成
这是你原来的m3u8视频是在老地方的,只是多生成了一个mp4格式的视频
下面是我用MXplayer查看的视频原m3u8文件(显示的不是实际视频大小),可以看到还存在
转换的mp4格式视频
可以看到格式已经变成了mp4,且显示的视频实际大小
M3U8视频解析下载MP4合并,支持安卓苹果电脑手机
这里的两个游览器插件具备了解析加密视频的功能,可以下载的视频格式包括【m3u8,mp4,flv,mp3等等】,插件同时支持谷歌游览器,360游览器,火狐游览器,使用方法也很简单,你只需把下载好的插件鼠标拖动到游览器上面就会自动安装,安装成功后游览器右上角就会多了两个插件的图标,当你打开一个视频网页点击视频播放,插件就会自动解析视频链接并且生成视频下载地址,你只需点击下载就可以它会自动转换成MP4格式,至于这个电脑软件只能下载M3U8结尾的直链格式,需要配合下面的这款软件才能进行下载。
然后就是关于安卓手机下载M3U8视频的方法,这里需要用到下面这款APK软件,这个视频下载软件也是支持多种视频格式,里面包含两种下载方式,第一种就是网页下载,你复制网址输入后点击下载,它会自动提取视频链接,如果是M3U8视频链接它会自动下载合并并且转换成MP4格式,第二种就是M3U8视频直链下载,功能与上面的电脑下载软件类似,只能下载M3U8结尾的视频直链格式。
H5直播起航
一、视频流协议HLS与RTMP
1. HTTP Live Streaming
HTTP Live Streaming(简称 HLS)是一个基于 HTTP 的视频流协议,由 Apple 公司实现,Mac OS 上的 QuickTime、Safari 以及 iOS 上的 Safari 都能很好的支持 HLS,高版本 Android 也增加了对 HLS 的支持。一些常见的客户端如:MPlayerX、VLC 也都支持 HLS 协议。
HLS 协议基于 HTTP,而一个提供 HLS 的服务器需要做两件事:
编码:以 H.263 格式对图像进行编码,以 MP3 或者 HE-AAC 对声音进行编码,最终打包到 MPEG-2 TS(Transport Stream)容器之中;分割:把编码好的 TS 文件等长切分成后缀为 ts 的小文件,并生成一个 .m3u8 的纯文本索引文件;浏览器使用的是 m3u8 文件。m3u8 跟音频列表格式 m3u 很像,可以简单的认为 m3u8 就是包含多个 ts 文件的播放列表。播放器按顺序逐个播放,全部放完再请求一下 m3u8 文件,获得包含最新 ts 文件的播放列表继续播,周而复始。
整个直播过程就是依靠一个不断更新的 m3u8 和一堆小的 ts 文件组成,m3u8 必须动态更新,ts 可以走 CDN。一个典型的 m3u8 文件格式如下:
可以看到 HLS 协议本质还是一个个的 HTTP 请求 / 响应,所以适应性很好,不会受到防火墙影响。但它也有一个致命的弱点:延迟现象非常明显。如果每个 ts 按照 5 秒来切分,一个 m3u8 放 6 个 ts 索引,那么至少就会带来 30 秒的延迟。如果减少每个 ts 的长度,减少 m3u8 中的索引数,延时确实会减少,但会带来更频繁的缓冲,对服务端的请求压力也会成倍增加。所以只能根据实际情况找到一个折中的点。
对于支持 HLS 的浏览器来说,直接这样写就能播放了:
注意:HLS 在 PC 端仅支持safari浏览器,类似chrome浏览器使用HTML5 video标签无法播放 m3u8 格式,可直接采用网上一些比较成熟的方案,如:sewise-player、MediaElement、videojs-contrib-hls、jwplayer。
2. Real Time Messaging Protocol
Real Time Messaging Protocol(简称 RTMP)是 Macromedia 开发的一套视频直播协议,现在属于 Adobe。这套方案需要搭建专门的 RTMP 流媒体服务如 Adobe Media Server,并且在浏览器中只能使用 Flash 实现播放器。它的实时性非常好,延迟很小,但无法支持移动端 WEB 播放是它的硬伤。
虽然无法在iOS的H5页面播放,但是对于iOS原生应用是可以自己写解码去解析的, RTMP 延迟低、实时性较好。
浏览器端,HTML5 video标签无法播放 RTMP 协议的视频,可以通过 video.js 来实现。
3. 视频流协议HLS与RTMP对比
二、直播形式
目前直播展示形式,通常以YY直播、映客直播这种页面居多,可以看到其结构可以分成三层:① 背景视频层 ② 关注、评论模块 ③ 点赞动画
而现行H5类似直播页面,实现技术难点不大,其可以通过实现方式分为:① 底部视频背景使用video视频标签实现播放 ② 关注、评论模块利用 WebScoket 来实时发送和接收新的消息通过DOM 和 CSS3 实现 ③ 点赞利用 CSS3 动画
了解完直播形式之后,接下来整体了解直播流程。
三、直播整体流程
直播整体流程大致可分为:
视频采集端:可以是电脑上的音视频输入设备、或手机端的摄像头、或麦克风,目前以移动端手机视频为主。直播流视频服务端:一台Nginx服务器,采集视频录制端传输的视频流(H264/ACC编码),由服务器端进行解析编码,推送RTMP/HLS格式视频流至视频播放端。视频播放端:可以是电脑上的播放器(QuickTime Player、VLC),手机端的native播放器,还有就是 H5 的video标签等,目前还是以手机端的native播放器为主。
四、H5 录制视频
对于H5视频录制,可以使用强大的 webRTC (Web Real-Time Communication)是一个支持网页浏览器进行实时语音对话或视频对话的技术,缺点是只在 PC 的 Chrome 上支持较好,移动端支持不太理想。
1. 使用 webRTC 录制视频基本流程
① 调用 window.navigator.webkitGetUserMedia() 获取用户的PC摄像头视频数据。
② 将获取到视频流数据转换成 window.webkitRTCPeerConnection (一种视频流数据格式)。
③ 利用 WebScoket 将视频流数据传输到服务端。
注意:虽然Google一直在推WebRTC,目前已有不少成型的产品出现,但是大部分移动端的浏览器还不支持 webRTC(最新iOS 10.0也不支持),所以真正的视频录制还是要靠客户端(iOS,Android)来实现,效果会好一些。
WebRTC支持度
2. iOS原生应用调用摄像头录制视频流程
① 音视频的采集,利用AVCaptureSession和AVCaptureDevice可以采集到原始的音视频数据流。
② 对视频进行H264编码,对音频进行AAC编码,在iOS中分别有已经封装好的编码库(x264编码、faac编码、ffmpeg编码)来实现对音视频的编码。
③ 对编码后的音、视频数据进行组装封包。
④ 建立RTMP连接并上推到服务端。
五、搭建Nginx+Rtmp直播流服务
1. 安装nginx、nginx-rtmp-module
① 先clone nginx项目到本地:
② 执行安装nginx-rtmp-module
2. nginx.conf配置文件,配置RTMP、HLS
查找到nginx.conf配置文件(路径/usr/local/etc/nginx/nginx.conf),配置RTMP、HLS。
① 在http节点之前添加 rtmp 的配置内容:
② 在http中添加 hls 的配置
3. 重启nginx服务
重启nginx服务,浏览器中输入 http://localhost:8080,是否出现欢迎界面确定nginx重启成功。
六、直播流转换格式、编码推流
当服务器端接收到采集视频录制端传输过来的视频流时,需要对其进行解析编码,推送RTMP/HLS格式视频流至视频播放端。通常使用的常见编码库方案,如x264编码、faac编码、ffmpeg编码等。
鉴于 FFmpeg 工具集合了多种音频、视频格式编码,我们可以优先选用FFmpeg进行转换格式、编码推流。
1.安装 FFmpeg 工具
2.推流MP4文件
视频文件地址:/Users/gao/Desktop/video/test.mp4
推流拉流地址:rtmp://localhost:1935/rtmplive/home,rtmp://localhost:1935/rtmplive/home
注意: 当我们进行推流之后,可以安装VLC、ffplay(支持rtmp协议的视频播放器)本地拉流进行演示
3.FFmpeg推流命令
① 视频文件进行直播
② 推流摄像头+桌面+麦克风录制进行直播
更多命令,请参考:
FFmpeg处理RTMP流媒体的命令大全
FFmpeg常用推流命令七、H5 直播视频播放
移动端iOS和 Android 都天然支持HLS协议,做好视频采集端、视频流推流服务之后,便可以直接在H5页面配置 video 标签播放直播视频。
ps:① video标签添加webkit-playsinline属性(iOS支持)是保证视频在网页中内嵌播放。
② 针对微信浏览器,video标签层级最高的问题,需要申请添加白名单,请参照 http://bbs.mb.qq.com/thread-1242581-1-1.html?ptlang=2052。
八、总结
本文从视频采集上传,服务器处理视频推流,以及H5页面播放直播视频一整套流程,具体阐述了直播实现原理,实现过程中会遇到很多性能优化问题。
① H5 HLS 限制必须是H264+AAC编码。
② H5 HLS 播放卡顿问题,server 端可以做好分片策略,将 ts 文件放在 CDN 上,前端可尽量做到 DNS 缓存等。
③ H5 直播为了达到更好的实时互动,也可以采用RTMP协议,通过video.js实现播放。