没有合适的资源?快使用搜索试试~ 我知道了~
学成在线-第14天-讲义-媒资管理 v1.21
需积分: 0 1 下载量 39 浏览量
2022-08-03
19:14:10
上传
评论
收藏 877KB PDF 举报
温馨提示
试读
30页
1、用户上传视频成功 2、系统对上传成功的视频自动开始编码处理 3、用户查看视频处理结果,没有处理成功的视频用户可在管理界面再次触发处理 4、视频处理完成将视频
资源详情
资源评论
资源推荐
学成在线
-第14天-讲义-媒资管理
1
视频处理
1.1
需求分析
原始视频通常需要经过编码处理,生成m3u8和ts文件方可基于HLS协议播放视频。通常用户上传原始视频,系统
自动处理成标准格式,系统对用户上传的视频自动编码、转换,最终生成m3u8文件和ts文件,处理流程如下:
1、用户上传视频成功
2、系统对上传成功的视频自动开始编码处理
3、用户查看视频处理结果,没有处理成功的视频用户可在管理界面再次触发处理
4、视频处理完成将视频地址及处理结果保存到数据库
视频处理流程如下:
视频处理进程的任务是接收视频处理消息进行视频处理,业务流程如下:
1、监听MQ,接收视频处理消息。
2、进行视频处理。
3、向数据库写入视频处理结果。
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
RabbitMQ
配置如下:
在application.yml中配置队列名称及routingkey
@Configuration
publicclassRabbitMQConfig{
publicstaticfinalStringEX_MEDIA_PROCESSTASK="ex_media_processor";
//视频处理队列
@Value("${xc‐service‐manage‐media.mq.queue‐media‐video‐processor}")
publicStringqueue_media_video_processtask;
//视频处理路由
@Value("${xc‐service‐manage‐media.mq.routingkey‐media‐video}")
publicStringroutingkey_media_video;
/**
*交换机配置
*@returntheexchange
*/
@Bean(EX_MEDIA_PROCESSTASK)
publicExchangeEX_MEDIA_VIDEOTASK(){
returnExchangeBuilder.directExchange(EX_MEDIA_PROCESSTASK).durable(true).build();
}
//声明队列
@Bean("queue_media_video_processtask")
publicQueueQUEUE_PROCESSTASK(){
Queuequeue=newQueue(queue_media_video_processtask,true,false,true);
returnqueue;
}
/**
*绑定队列到交换机.
*@paramqueuethequeue
*@paramexchangetheexchange
*@returnthebinding
*/
@Bean
publicBindingbinding_queue_media_processtask(@Qualifier("queue_media_video_processtask")
Queuequeue,@Qualifier(EX_MEDIA_PROCESSTASK)Exchangeexchange){
returnBindingBuilder.bind(queue).to(exchange).with(routingkey_media_video).noargs();
}
}
xc‐service‐manage‐media:
mq:
queue‐media‐video‐processor:queue_media_video_processor
routingkey‐media‐video:routingkey_media_video
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
1.2.2 视频处理技术方案
如何通过程序进行视频处理?
ffmpeg是一个可行的视频处理程序,可以通过Java调用ffmpeg.exe完成视频处理。
在java中可以使用Runtime类和Process Builder类两种方式来执行外部程序,工作中至少掌握一种。
本项目使用Process Builder的方式来调用ffmpeg完成视频处理。
关于Process Builder的测试如下:
@Test
publicvoidtestProcessBuilder(){
ProcessBuilderprocessBuilder=newProcessBuilder();
//processBuilder.command("ping","127.0.0.1");
processBuilder.command("ipconfig");
//将标准输入流和错误输入流合并,通过标准输入流读取信息
processBuilder.redirectErrorStream(true);
try{
//启动进程
Processstart=processBuilder.start();
//获取输入流
InputStreaminputStream=start.getInputStream();
//转成字符输入流
InputStreamReaderinputStreamReader=newInputStreamReader(inputStream,"gbk");
intlen=‐1;
char[]c=newchar[1024];
StringBufferoutputString=newStringBuffer();
//读取进程输入流中的内容
while((len=inputStreamReader.read(c))!=‐1){
Strings=newString(c,0,len);
outputString.append(s);
System.out.print(s);
}
inputStream.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
@Test
publicvoidtestFFmpeg(){
ProcessBuilderprocessBuilder=newProcessBuilder();
//定义命令内容
List<String>command=newArrayList<>();
command.add("D:\\ProgramFiles\\ffmpeg‐20180227‐fa0c9d6‐win64‐static\\bin\\ffmpeg.exe");
command.add("‐i");
command.add("E:\\ffmpeg_test\\1.avi");
command.add("‐y");//覆盖输出文件
command.add("‐c:v");
command.add("libx264");
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
上边的代码已经封装成工具类,参见:
上边的工具类中:
Mp4VideoUtil.java完成avi转mp4
command.add("‐s");
command.add("1280x720");
command.add("‐pix_fmt");
command.add("yuv420p");
command.add("‐b:a");
command.add("63k");
command.add("‐b:v");
command.add("753k");
command.add("‐r");
command.add("18");
command.add("E:\\ffmpeg_test\\1.mp4");
processBuilder.command(command);
//将标准输入流和错误输入流合并,通过标准输入流读取信息
processBuilder.redirectErrorStream(true);
try{
//启动进程
Processstart=processBuilder.start();
//获取输入流
InputStreaminputStream=start.getInputStream();
//转成字符输入流
InputStreamReaderinputStreamReader=newInputStreamReader(inputStream,"gbk");
intlen=‐1;
char[]c=newchar[1024];
StringBufferoutputString=newStringBuffer();
//读取进程输入流中的内容
while((len=inputStreamReader.read(c))!=‐1){
Strings=newString(c,0,len);
outputString.append(s);
System.out.print(s);
}
inputStream.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
剩余29页未读,继续阅读
开眼旅行精选
- 粉丝: 12
- 资源: 327
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0