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文件内容是否完整。