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(四)相关推荐
- Java的新项目学成在线笔记-day10(三)
1.4 测试CMS一键发布接口 1.4.1 配置虚拟主机 在nginx配置课程详情页面的虚拟主机,实现访问:www.xuecheng.com/course/detail/.....html. #静态资 ...
- Java的新项目学成在线笔记-day13(九)
6.2.2 创建媒资服务工程 媒资管理的相关功能单独在媒资服务中开发,下边创建媒资服务工程(xc-service-manage-media). 媒资服务的配置与cms类似,导入 "资料&qu ...
- Java的新项目学成在线笔记-day12(九)
3.1.4 搜索页面 创建搜索页面如下: 页面文件参考:"资料"-->"search"-->index_1.vue,重要代码如下: nuxt.js支 ...
- Java的新项目学成在线笔记-day7(一)
1.1需求分析 课程添加完成后可通过我的课程进入课程修改页面,此页面显示我的课程列表,如下图所示,可分页查询. 注意:由于课程图片服务器没有搭建,这里在测试时图片暂时无法显示. 上边的查询要实现分页. ...
- Java的新项目学成在线笔记-day13(八)
6 媒资管理 前边章节完成在线视频播放,如何实现点击课程计划播放视频呢,课程视频如何管理呢? 本节开始将对课程视频进行管理. 6.1需求分析 媒资管理系统是每个在线教育平台所必须具备的,百度百科对它的 ...
- Java的新项目学成在线笔记-day10(二)
1.3 课程发布接口 1.3.1 Api接口 此Api接口由课程管理提供,由课程管理前端调用此Api接口,实现课程发布. 在api工程下课程管理包下定义接口: [mw_shl_code=applesc ...
- Java的新项目学成在线笔记-day7(二)
1.3 前端页面说明 我的课程列表使用element 的card组件,如下: 页面布局代码如下: <template> <section> <el‐row >< ...
- Java的新项目学成在线笔记-day8(三)
1.1.3.1 需求 上传图片界面如下图: 点击"加号"上传图片,图片上传成功自动显示:点击"删除"将删除图片. 1.1.3.2 页面 使用Element-UI ...
- Java的新项目学成在线笔记-day12(六)
3.6 获取数据 3.6.1 asyncData 方法 Nuxt.js 扩展了 Vue.js,增加了一个叫 asyncData 的方法, asyncData 方法会在组件(限于页面组件)每次加载 之前 ...
最新文章
- 无法消除恐惧?Nature发现肠道菌与大脑间更多的神秘联系...
- Microsoft Azure部署MYSQL-MMM(3)配置MYSQL-MMM
- MATLAB小波工具箱
- VC++使用ADO连接SQL Server数据库
- PowerShell CLI 获取VM信息
- LeetCode--160--相交链表
- c java学哪个好_c语言和java学哪个好
- 谷歌开源代码评审规范:好坏代码应该这样来判断
- 在Windows上搭建Redis集群环境教程
- 1110 Complete Binary Tree (25 分)(搜索)
- php_eol为什么没有换行,PHP PHP_EOL 换行符
- vb.net oracle数据库,vb.net 如何与oracle数据库连接
- IDEA 当前项目jdk版本查看
- 三菱plc指令dediv_三菱plc指令tcmp的用法
- django tests 小结
- 工作,究竟意味着什么
- 什么是企业邮箱,如何申请企业邮箱,企业邮箱一年多少钱?
- 人工智能畅想ps海报教程_如何战胜鲁班人工智能做图?大战鲁班海报制作教程【PS教程】...
- 哈罗单车再获10亿融资,摩拜、ofo难合并!
- 【OpenGL学习笔记④】——纹理贴图【SOIL2的配置 + 绘制木板 + 纹理环绕】
热门文章
- SAwUML – UML-based, contractual software architectures and their formal analysis using SPIN
- 使用应用编排服务一键式部署,持续集成利器--jenkins
- 2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他...
- spring-quartz
- vs2015 行数统计
- 第九章 Redis过期策略
- 郝斌--数据结构---汉诺塔实现(c语言实现)
- easyUI parser的使用
- Android笔记(八) Android中的布局——相对布局
- 运用代码管理段来提升开发效率