生活随笔
收集整理的這篇文章主要介紹了
Java的新项目学成在线笔记-day14(四)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.2.3.5 視頻處理生成m3u8
下邊是完整的視頻處理任務類代碼,包括了生成m3u8及生成mp4的代碼。
[mw_shl_code=applescript,true]@Component public class MediaProcessTask { private static final Logger LOGGER = LoggerFactory.getLogger(MediaProcessTask.class); //ffmpeg絕對路徑
@Value("${xc‐service‐manage‐media.ffmpeg‐path}") String ffmpeg_path;
//上傳文件根目錄 @Value("${xc‐service‐manage‐media.upload‐location}") String serverPath; @Autowired MediaFileRepository mediaFileRepository; @RabbitListener(queues = "${xc‐service‐manage‐media.mq.queue‐media‐processtask}") public void receiveMediaProcessTask(String msg) throws IOException { Map msgMap = JSON.parseObject(msg, Map.class); LOGGER.info("receive media process task msg :{} ",msgMap); //解析消息 //媒資文件id String mediaId = (String) msgMap.get("mediaId"); //獲取媒資文件信息 Optional<MediaFile> optional = mediaFileRepository.findById(fileMd5); if(!optional.isPresent()){ return ; } MediaFile mediaFile = optional.get(); //媒資文件類型 String fileType = mediaFile.getFileType(); if(fileType == null || !fileType.equals("avi")){//目前只處理avi文件 mediaFile.setProcessStatus("303004");//處理狀態為無需處理 mediaFileRepository.save(mediaFile); return ; }else{ mediaFile.setProcessStatus("303001");//處理狀態為未處理 mediaFileRepository.save(mediaFile); }
//生成mp4 String video_path = serverPath + mediaFile.getFilePath()+mediaFile.getFileName(); String mp4_name = mediaFile.getFileId()+".mp4"; String mp4folder_path = serverPath + mediaFile.getFilePath(); Mp4VideoUtil videoUtil = new Mp4VideoUtil(ffmpeg_path,video_path,mp4_name,mp4folder_path); String result = videoUtil.generateMp4();
if(result == null || !result.equals("success")){ //操作失敗寫入處理日志 mediaFile.setProcessStatus("303003");//處理狀態為處理失敗 MediaFileProcess_m3u8 mediaFileProcess_m3u8 = new MediaFileProcess_m3u8(); mediaFileProcess_m3u8.setErrormsg(result); mediaFile.setMediaFileProcess_m3u8(mediaFileProcess_m3u8); mediaFileRepository.save(mediaFile); return ; } //生成m3u8 video_path = serverPath + mediaFile.getFilePath()+mp4_name;//此地址為mp4的地址 String m3u8_name = mediaFile.getFileId()+".m3u8"; String m3u8folder_path = serverPath + mediaFile.getFilePath()+"hls/"; HlsVideoUtil hlsVideoUtil = new HlsVideoUtil(ffmpeg_path,video_path,m3u8_name,m3u8folder_path); result = hlsVideoUtil.generateM3u8(); if(result == null || !result.equals("success")){ //操作失敗寫入處理日志 mediaFile.setProcessStatus("303003");//處理狀態為處理失敗 MediaFileProcess_m3u8 mediaFileProcess_m3u8 = new MediaFileProcess_m3u8(); mediaFileProcess_m3u8.setErrormsg(result); mediaFile.setMediaFileProcess_m3u8(mediaFileProcess_m3u8); mediaFileRepository.save(mediaFile); return ; }
//獲取m3u8列表 List<String> ts_list = hlsVideoUtil.get_ts_list(); //更新處理狀態為成功 mediaFile.setProcessStatus("303002");//處理狀態為處理成功 MediaFileProcess_m3u8 mediaFileProcess_m3u8 = new MediaFileProcess_m3u8(); mediaFileProcess_m3u8.setTslist(ts_list); mediaFile.setMediaFileProcess_m3u8(mediaFileProcess_m3u8); //m3u8文件url mediaFile.setFileUrl(mediaFile.getFilePath()+"hls/"+m3u8_name); mediaFileRepository.save(mediaFile); } }
[/mw_shl_code]
說明:
mp4轉成m3u8如何判斷轉換成功?
第一、根據視頻時長來判斷,同mp4轉換成功的判斷方法。
第二、最后還要判斷m3u8文件內容是否完整。
轉載于:https://blog.51cto.com/13517854/2409098
總結
以上是生活随笔為你收集整理的Java的新项目学成在线笔记-day14(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。