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

最近手机下载了几个视频,在浏览器上播放无异常,但是当我想把视频复制到电脑上时,发现该视频格式为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流,Java)