オンラインの研究 - 13日目 - 講義 - HLS 1オンラインオンライン学習ニーズ分析を学びます
設定ffmpegの
ビデオトランスコーディング
MP4フォーマット変換M3U8を回し始めるためにここに
どのような成功を切断生成M3U8
再び子としてピット、無HLSパスを埋めこのアドレスは、ビデオを見つけることができませんし、ピットもあり、書類を組み合わせてくださいというビデオがありませんのconfigure video.xuecheng、comのこの時点までホストであります
成功したドメイン名での成功の訪問を設定し
そして、一般的なコピーがコードがあるし、次にコードを貼り付け、説明では最終的には講師、本当にこのプロジェクトの水は水であると感じ
コードブロックのテストファイル
public void testChunk() throws IOException {
//源文件
File sourceFile = new File("D:\\video\\lucene.avi");
//块文件目录
String chunkFileFolder = "D:\\video\\chunks\\";
//先定义块文件大小
long chunkFileSize = 1 * 1024 * 1024;
//块数
long chunkFileNum = (long) Math.ceil(sourceFile.length() * 1.0 /chunkFileSize);
//创建读文件的对象
RandomAccessFile raf_read = new RandomAccessFile(sourceFile,"r");
//缓冲区
byte[] b = new byte[1024];
for(int i=0;i<chunkFileNum;i++){
//块文件
File chunkFile = new File(chunkFileFolder+i);
//创建向块文件的写对象
RandomAccessFile raf_write = new RandomAccessFile(chunkFile,"rw");
int len = -1;
while((len = raf_read.read(b))!=-1){
raf_write.write(b,0,len);
//如果块文件的大小达到 1M开始写下一块儿
if(chunkFile.length()>=chunkFileSize){
break;
}
}
raf_write.close();
}
raf_read.close();
}
//测试文件合并
@Test
public void testMergeFile() throws IOException {
//块文件目录
String chunkFileFolderPath = "D:\\video\\chunks\\";
//块文件目录对象
File chunkFileFolder = new File(chunkFileFolderPath);
//块文件列表
File[] files = chunkFileFolder.listFiles();
//将块文件排序,按名称升序
List<File> fileList = Arrays.asList(files);
Collections.sort(fileList, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
if(Integer.parseInt(o1.getName())>Integer.parseInt(o2.getName())){
return 1;
}
return -1;
}
});
//合并文件
File mergeFile = new File("D:\\video\\lucene_merge.avi");
//创建新文件
boolean newFile = mergeFile.createNewFile();
//创建写对象
RandomAccessFile raf_write = new RandomAccessFile(mergeFile,"rw");
byte[] b = new byte[1024];
for(File chunkFile:fileList){
//创建一个读块文件的对象
RandomAccessFile raf_read = new RandomAccessFile(chunkFile,"r");
int len = -1;
while((len = raf_read.read(b))!=-1){
raf_write.write(b,0,len);
}
raf_read.close();
}
raf_write.close();
}
ファイルのアップロード
//得到块文件所属目录路径
private String getChunkFileFolderPath(String fileMd5){
return upload_location + fileMd5.substring(0,1) + "/" + fileMd5.substring(1,2) + "/" + fileMd5 + "/chunk/";
}
/**
* 文件上传前的注册,检查文件是否存在
* 根据文件md5得到文件路径
* 规则:
* 一级目录:md5的第一个字符
* 二级目录:md5的第二个字符
* 三级目录:md5
* 文件名:md5+文件扩展名
* @param fileMd5 文件md5值
* @param fileExt 文件扩展名
* @return 文件路径
*/
public ResponseResult register(String fileMd5, String fileName, Long fileSize, String mimetype, String fileExt) {
//1 检查文件在磁盘上是否存在
//文件所属目录的路径
String fileFolderPath = this.getFileFolderPath(fileMd5);
//文件的路径
String filePath =this.getFilePath(fileMd5,fileExt);
File file = new File(filePath);
//文件是否存在
boolean exists = file.exists();
//2 检查文件信息在mongodb中是否存在
Optional<MediaFile> optional = mediaFileRepository.findById(fileMd5);
if(exists && optional.isPresent()){
//文件存在
ExceptionCast.cast(MediaCode.UPLOAD_FILE_REGISTER_EXIST);
}
//文件不存在时作一些准备工作,检查文件所在目录是否存在,如果不存在则创建
File fileFolder = new File(fileFolderPath);
if(!fileFolder.exists()){
fileFolder.mkdirs();
}
return new ResponseResult(CommonCode.SUCCESS);
}
完全にコードをコピーして、基本的に対処されたコードのいくつかのエピソードの背後に個人的な感情は、言葉の意味は、基本的なパスを書かれている表示されませんでした、意味がありません、それが推奨され、学生はコードを書くのが得意の外観を取る必要があります
\
ファイルストリーム操作の背後にあるこのコードは非常に困難である、それはコードをコピーし、直接推奨され、このプロジェクトは本当に意味がありません!!!