您的位置:首页 > 编程语言 > Java开发

手机浏览器下载的m3u8格式的多个视频文件合并成一个视频(Java实现)

2018-03-14 20:59 302 查看
最近手机下载了几个视频,在浏览器上播放无异常,但是当我想把视频复制到电脑上时,发现该视频格式为m3u8,仔细一看,原来还有一个以“.”开头的隐藏文件夹,里面有好多大约10s的视频文件,如下图所示:



于是,我使用notpad++进入m3u8文件中查看,发现:



原来是播放器访问后缀为.m3u8的文件,该文件将视频指向了相应的文件夹,来实现分段播放视频而不卡顿的功能。
这种做法也是为了防止盗链,所以将文件做成多个文件碎片。

由于,急切地想看视频,我使用Java IO流来实现了文件拼接的操作,代码实现如下:package cn.dean.merge;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
* 合并视频文件
* @author fudin
*
*/
public class MergeVideos {

/**
* source为源地址,destination为合并之后的文件地址,videoName为合并后视频的名字,num为视频数量
* @param source
* @param destination
* @param num
* @throws IOException
*/
public static void MergeVideos(File source, File destination, String videoName, int num) throws IOException{
FileOutputStream out = new FileOutputStream(destination + "\\" + videoName);
FileInputStream in = null;
for(int i = 1 ; i <= num; i++){
String videoPath = source + "\\" + i;
File file = new File(videoPath);
in = new FileInputStream(file);
byte[] bytes = new byte[1024];
int len = 0;
while((len = in.read(bytes)) > 0){
out.write(bytes,0,len);
}
}
in.close();
out.close();
}

public static void main(String[] args) throws IOException{
MergeVideos(new File("E:\\videocache\\.三个代表重要思想.m3u8.d"),
new File("E:\\video"), "video", 209);
}
}待Java将视频碎片拼接结束后,视频就可以直接播放啦~

PS:Windows中批处理命令copy /b 也可以实现文件的拼接,只是在拼接中会出现顺序错乱,因为批处理命令中合并顺序为1-10-11-12...-19-2-20...,不是按照1-2-3...-10-11....的顺序合并的,由于Dean对Java比较了解,所以使用了Java进行读写拼接操作,有问题还望批评指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java IO流
相关文章推荐