修改录制文件格式为浏览器支持的 fmp4(Fragmented MP4) 格式

This commit is contained in:
shikong 2023-09-11 14:10:13 +08:00
parent 6a86ab806f
commit 2e42490440
2 changed files with 5 additions and 4 deletions

View File

@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.*;
public class RecordController { public class RecordController {
private final RecordService recordService; private final RecordService recordService;
@Operation(summary = "返回文件下载 http 头信息",description = "禁止多线程下载, 默认文件名为 record.flv") @Operation(summary = "返回文件下载 http 头信息",description = "禁止多线程下载, 默认文件名为 record.mp4")
@RequestMapping(method = {RequestMethod.HEAD,RequestMethod.OPTIONS}) @RequestMapping(method = {RequestMethod.HEAD,RequestMethod.OPTIONS})
public void record(HttpServletResponse response){ public void record(HttpServletResponse response){
recordService.header(response); recordService.header(response);

View File

@ -30,10 +30,10 @@ public class RecordService {
* @param response HttpServletResponse 响应 * @param response HttpServletResponse 响应
*/ */
public void header(HttpServletResponse response) { public void header(HttpServletResponse response) {
response.setContentType("video/x-flv"); response.setContentType("video/mp4");
response.setHeader("Accept-Ranges", "none"); response.setHeader("Accept-Ranges", "none");
response.setHeader("Connection", "close"); response.setHeader("Connection", "close");
response.setHeader("Content-Disposition","attachment; filename=\"record.flv\""); response.setHeader("Content-Disposition","attachment; filename=\"record.mp4\"");
} }
/** /**
@ -82,6 +82,7 @@ public class RecordService {
recorder.setFrameRate(grabber.getFrameRate()); recorder.setFrameRate(grabber.getFrameRate());
recorder.setSampleRate(grabber.getSampleRate()); recorder.setSampleRate(grabber.getSampleRate());
recorder.setOption("flvflags", "no_duration_filesize"); recorder.setOption("flvflags", "no_duration_filesize");
recorder.setOption("movflags","frag_keyframe+empty_moov");
if (grabber.getAudioChannels() > 0) { if (grabber.getAudioChannels() > 0) {
recorder.setAudioChannels(grabber.getAudioChannels()); recorder.setAudioChannels(grabber.getAudioChannels());
recorder.setAudioBitrate(grabber.getAudioBitrate()); recorder.setAudioBitrate(grabber.getAudioBitrate());
@ -92,7 +93,7 @@ public class RecordService {
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P); // 视频源数据yuv recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P); // 视频源数据yuv
recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC); // 设置音频压缩方式 recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC); // 设置音频压缩方式
recorder.setFormat("flv"); recorder.setFormat("mp4");
recorder.setVideoOption("threads", String.valueOf(Runtime.getRuntime().availableProcessors())); // 解码线程数 recorder.setVideoOption("threads", String.valueOf(Runtime.getRuntime().availableProcessors())); // 解码线程数
recorder.start(grabber.getFormatContext()); recorder.start(grabber.getFormatContext());
log.info("开始录制 {}", url); log.info("开始录制 {}", url);