问题背景:
最近在开发一套需要集成海康摄像头的系统,通过自研的系统(以下简称本系统),调用海康的NVR来调取存储在海康的历史视频文件,本系统页面集成的是西瓜播放器插件,版本3.x版本,经过实践证明,通过海康sdk直接下载的mp4文件,无法直接在西瓜视频播放。
经过排查得出:支持视频文件的格式是:编解码器:H264-MPEG-4 AVC (part 10)(avc1)
而实际海康的视频格式:编解码器: MPEG-H Part2/HEVC(H.265)(hevc)
之后,经过几天跟海康官方的技术人员联系,说海康支持转H.264格式,通过在页面上进行设置,如下图:
海康转码的格式为:编解码器: H264-MPEG-4 AVC(part 10)(h264),视频还是播放不了。
最终排查得出,西瓜视频插件支持的是:H264-MPEG-4 AVC (part 10)(avc1),不是H264-MPEG-4 AVC(part 10)(h264),后来,发现avc1和h264在编码上面还是存在细微差异。处理步骤如下:
1.先下载视频流处理的相关依赖
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-core</artifactId>
<version>2.4.5</version>
</dependency>
<!-- 核心包-->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-native-win64</artifactId>
<version>2.4.5</version>
</dependency>
<!-- 这个是在windows环境下的jar,使用不同的环境,会调用不同的jar文件-->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-native-linux64</artifactId>
<version>2.4.5</version>
</dependency>
<!-- 这个是在linux环境下的jar-->
2.编写转码文件
//源视频位置
File file = new File("F:\\xxx\\xxxx\\2024\\05\\0527\\xxxxx.mp4");
//目标视频位置
File file1 = new File("F:\\xxx\\xxxx\\2024\\05\\0527\\xxx_20240527080000_20240527081000.mp4");
// 创建转码器
AudioAttributes audio = new AudioAttributes();
//指定编码
audio.setCodec("aac");
audio.setBitRate(new Integer(128000));
//通道
audio.setChannels(new Integer(2));
audio.setSamplingRate(new Integer(44100));
VideoAttributes video = new VideoAttributes();
//设置编解码器
video.setCodec("h264");
video.setX264Profile(VideoAttributes.X264_PROFILE.BASELINE);
video.setBitRate(new Integer(400000));
//设置帧率
video.setFrameRate(new Integer(25));
//设置大小
video.setSize(new VideoSize(2560, 1440));
EncodingAttributes attrs = new EncodingAttributes();
//格式
attrs.setFormat("mp4");
attrs.setAudioAttributes(audio);
attrs.setVideoAttributes(video);
// 进行转码
Encoder encoder = new Encoder();
encoder.encode(new MultimediaObject(file), file1, attrs);
3.播放成功
觉得写的不错的朋友,请点点赞!❤❤❤❤❤❤❤❤