手机浏览器下载的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进行读写拼接操作,有问题还望批评指正。
于是,我使用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进行读写拼接操作,有问题还望批评指正。
相关文章推荐
- 关于ffmpeg 的总结(一个linux下集屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- [转]关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- 用java实现将一个项目中所有的.java文件合并输出至某文件
- Opencv中的Bug(实现读入一个彩色视频文件并以灰度格式输出这个视频文件,学习opencv例2-10)
- 用Java实现的一个本地文件浏览器
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- 2多线程断点下载一个文件(普通的java工程:java实现)
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- 1 多线程下载一个文件(普通的java工程:java实现)
- java 实现文件下载的时候,避免浏览器自动打开文件,而是出现另存为对话框
- 一个java实现的简单文件下载程序
- java后台创建压缩包&使用浏览器下载文件(批量下载实现)
- 实现读入一个彩色视频文件并以灰度格式输出这个视频文件,学习opencv例2-10
- 使用java IO实现指定后缀的文件合并为一个文件
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- 用Java实现的一个本地文件浏览器
- [转]关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- java实现下载任意格式文件
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)