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(四)相关推荐

  1. Java的新项目学成在线笔记-day10(三)

    1.4 测试CMS一键发布接口 1.4.1 配置虚拟主机 在nginx配置课程详情页面的虚拟主机,实现访问:www.xuecheng.com/course/detail/.....html. #静态资 ...

  2. Java的新项目学成在线笔记-day13(九)

    6.2.2 创建媒资服务工程 媒资管理的相关功能单独在媒资服务中开发,下边创建媒资服务工程(xc-service-manage-media). 媒资服务的配置与cms类似,导入 "资料&qu ...

  3. Java的新项目学成在线笔记-day12(九)

    3.1.4 搜索页面 创建搜索页面如下: 页面文件参考:"资料"-->"search"-->index_1.vue,重要代码如下: nuxt.js支 ...

  4. Java的新项目学成在线笔记-day7(一)

    1.1需求分析 课程添加完成后可通过我的课程进入课程修改页面,此页面显示我的课程列表,如下图所示,可分页查询. 注意:由于课程图片服务器没有搭建,这里在测试时图片暂时无法显示. 上边的查询要实现分页. ...

  5. Java的新项目学成在线笔记-day13(八)

    6 媒资管理 前边章节完成在线视频播放,如何实现点击课程计划播放视频呢,课程视频如何管理呢? 本节开始将对课程视频进行管理. 6.1需求分析 媒资管理系统是每个在线教育平台所必须具备的,百度百科对它的 ...

  6. Java的新项目学成在线笔记-day10(二)

    1.3 课程发布接口 1.3.1 Api接口 此Api接口由课程管理提供,由课程管理前端调用此Api接口,实现课程发布. 在api工程下课程管理包下定义接口: [mw_shl_code=applesc ...

  7. Java的新项目学成在线笔记-day7(二)

    1.3 前端页面说明 我的课程列表使用element 的card组件,如下: 页面布局代码如下: <template> <section> <el‐row >< ...

  8. Java的新项目学成在线笔记-day8(三)

    1.1.3.1 需求 上传图片界面如下图: 点击"加号"上传图片,图片上传成功自动显示:点击"删除"将删除图片. 1.1.3.2 页面 使用Element-UI ...

  9. Java的新项目学成在线笔记-day12(六)

    3.6 获取数据 3.6.1 asyncData 方法 Nuxt.js 扩展了 Vue.js,增加了一个叫 asyncData 的方法, asyncData 方法会在组件(限于页面组件)每次加载 之前 ...

最新文章

  1. 无法消除恐惧?Nature发现肠道菌与大脑间更多的神秘联系...
  2. Microsoft Azure部署MYSQL-MMM(3)配置MYSQL-MMM
  3. MATLAB小波工具箱
  4. VC++使用ADO连接SQL Server数据库
  5. PowerShell CLI 获取VM信息
  6. LeetCode--160--相交链表
  7. c java学哪个好_c语言和java学哪个好
  8. 谷歌开源代码评审规范:好坏代码应该这样来判断
  9. 在Windows上搭建Redis集群环境教程
  10. 1110 Complete Binary Tree (25 分)(搜索)
  11. php_eol为什么没有换行,PHP PHP_EOL 换行符
  12. vb.net oracle数据库,vb.net 如何与oracle数据库连接
  13. IDEA 当前项目jdk版本查看
  14. 三菱plc指令dediv_三菱plc指令tcmp的用法
  15. django tests 小结
  16. 工作,究竟意味着什么
  17. 什么是企业邮箱,如何申请企业邮箱,企业邮箱一年多少钱?
  18. 人工智能畅想ps海报教程_如何战胜鲁班人工智能做图?大战鲁班海报制作教程【PS教程】...
  19. 哈罗单车再获10亿融资,摩拜、ofo难合并!
  20. 【OpenGL学习笔记④】——纹理贴图【SOIL2的配置 + 绘制木板 + 纹理环绕】

热门文章

  1. SAwUML – UML-based, contractual software architectures and their formal analysis using SPIN
  2. 使用应用编排服务一键式部署,持续集成利器--jenkins
  3. 2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他...
  4. spring-quartz
  5. vs2015 行数统计
  6. 第九章 Redis过期策略
  7. 郝斌--数据结构---汉诺塔实现(c语言实现)
  8. easyUI parser的使用
  9. Android笔记(八) Android中的布局——相对布局
  10. 运用代码管理段来提升开发效率