Java的新项目学成在线笔记-day14(三)

1.2.3 视频处理实现 1.2.3.1确定消息格式
MQ消息统一采用json格式,视频处理生产方会向MQ发送如下消息,视频处理消费方接收此消息后进行视频处 理:
{“mediaId”:XXX} 1.2.3.2处理流程
1)接收视频处理消息 2)判断媒体文件是否需要处理(本视频处理程序目前只接收avi视频的处理)
当前只有avi文件需要处理,其它文件需要更新处理状态为“无需处理”。
3)处理前初始化处理状态为“未处理”
4)处理失败需要在数据库记录处理日志,及处理状态为“处理失败”
5)处理成功记录处理状态为“处理成功” 1.2.3.3数据模型
在MediaFile类中添加mediaFileProcess_m3u8属性记录ts文件列表,代码如下:
[mw_shl_code=applescript,true]//处理状态 private String processStatus;
//hls处理 private MediaFileProcess_m3u8 mediaFileProcess_m3u8;[/mw_shl_code]br/>[mw_shl_code=applescript,true]@Data
@ToString public class MediaFileProcess_m3u8 extends MediaFileProcess {
//ts列表
private List<String> tslist; } [/mw_shl_code]
1.2.3.4 视频处理生成Mp4
1、创建Dao 视频处理结果需要保存到媒资数据库,创建dao如下:


[mw_shl_code=applescript,true]public interface MediaFileRepository extends MongoRepository<MediaFile,String> {  
}[/mw_shl_code]
2、在application.yml中配置ffmpeg的位置及视频目录的根目录:

[mw_shl_code=applescript,true]xc‐service‐manage‐media:  
video‐location: F:/develop/video/ 
  ffmpeg‐path: D:/Program Files/ffmpeg‐20180227‐fa0c9d6‐win64‐static/bin/ffmpeg.exe[/mw_shl_code]
3、处理任务类 在mq包下创建MediaProcessTask类,此类负责监听视频处理队列,并进行视频处理。
整个视频处理内容较多,这里分两部分实现:生成Mp4和生成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...   
      } }[/mw_shl_code]

说明:
1、原始视频转成mp4如何判断转换成功?

根据视频时长来判断,取原视频和转换成功视频的时长(时分秒),如果相等则相同。

转载于:https://blog.51cto.com/13517854/2409096

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值