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

1.2.3.5 视频处理生成m3u8 
下边是完整的视频处理任务类代码,包括了生成m3u8及生成mp4的代码。

[AppleScript] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

扫描二维码关注公众号,回复: 6455776 查看本文章

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

@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);     

   } }


说明:
mp4转成m3u8如何判断转换成功?
第一、根据视频时长来判断,同mp4转换成功的判断方法。
第二、最后还要判断m3u8文件内容是否完整。 

猜你喜欢

转载自blog.csdn.net/czbkzmj/article/details/91802727
今日推荐