海康威视-下载的录像视频浏览器播放问题

目录

1、播放异常比对

2、视频编码检查

2.1、正常视频解析

2.2、海康视频解析

2.3、比对工具

3、转码

3.1、maven依赖

3.2、实现代码

4、验证


在前面的文章(海康威视-按时间下载录像文件_海康威视 sdk 下载录像 大小0-CSDN博客)中,通过按时间段下载指定的录像视频。

在实际的播放中,VLC工具可以播放,而放到浏览器中则无法播放

1、播放异常比对

海康视频播放错误:

出现 206 返回码,则视频下载完成,无法播放

普通视频播放正常:

虽然出现206,但播放正常。

所以考虑到,可能是通过设备网络SDK下载的视频编码存在问题

2、视频编码检查

使用ffprobe工具进行视频的详细内容检查

复制代码
ffprobe.exe  -v quiet -print_format json -show_format -show_streams 3.mp4

2.1、正常视频解析

{

"streams": [

{

"index": 0,

"codec_name": "h264",

"codec_long_name":"H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",

"profile": "High",

"codec_type": "video",

"codec_tag_string": "avc1",

"codec_tag": "0x31637661",

"width": 960,

"height": 720,

"coded_width": 960,

"coded_height": 720,

"closed_captions": 0,

"film_grain": 0,

"has_b_frames": 2,

"sample_aspect_ratio": "1:1",

"display_aspect_ratio": "4:3",

"pix_fmt": "yuv420p",

"level": 31,

"color_range": "tv",

"color_space": "bt470bg",

"color_transfer": "smpte170m",

"color_primaries": "bt470bg",

"chroma_location": "left",

"field_order": "progressive",

"refs": 1,

"is_avc": "true",

"nal_length_size": "4",

"id": "0x1",

"r_frame_rate": "25/1",

"avg_frame_rate": "25/1",

"time_base": "1/90000",

"start_pts": 0,

"start_time": "0.000000",

"duration_ts": 22518000,

"duration": "250.200000",

"bit_rate": "645258",

"bits_per_raw_sample": "8",

"nb_frames": "6255",

"extradata_size": 48,

"disposition": {

"default": 1,

"dub": 0,

"original": 0,

"comment": 0,

"lyrics": 0,

"karaoke": 0,

"forced": 0,

"hearing_impaired": 0,

"visual_impaired": 0,

"clean_effects": 0,

"attached_pic": 0,

"timed_thumbnails": 0,

"captions": 0,

"descriptions": 0,

"metadata": 0,

"dependent": 0,

"still_image": 0

},

"tags": {

"language": "und",

"handler_name": "VideoHandler",

"vendor_id": "[0][0][0][0]",

"encoder": "Lavc58.134.100 libwz264"

}

},

{

"index": 1,

"codec_name": "aac",

"codec_long_name": "AAC (Advanced Audio Coding)",

"profile": "LC",

"codec_type": "audio",

"codec_tag_string": "mp4a",

"codec_tag": "0x6134706d",

"sample_fmt": "fltp",

"sample_rate": "44100",

"channels": 2,

"channel_layout": "stereo",

"bits_per_sample": 0,

"id": "0x2",

"r_frame_rate": "0/0",

"avg_frame_rate": "0/0",

"time_base": "1/44100",

"start_pts": 0,

"start_time": "0.000000",

"duration_ts": 11032761,

"duration": "250.175986",

"bit_rate": "128311",

"nb_frames": "10776",

"extradata_size": 2,

"disposition": {

"default": 1,

"dub": 0,

"original": 0,

"comment": 0,

"lyrics": 0,

"karaoke": 0,

"forced": 0,

"hearing_impaired": 0,

"visual_impaired": 0,

"clean_effects": 0,

"attached_pic": 0,

"timed_thumbnails": 0,

"captions": 0,

"descriptions": 0,

"metadata": 0,

"dependent": 0,

"still_image": 0

},

"tags": {

"language": "und",

"handler_name": "SoundHandler",

"vendor_id": "[0][0][0][0]"

}

}

],

"format": {

"filename": ".\\2319539678.mp4",

"nb_streams": 2,

"nb_programs": 0,

"format_name": "mov,mp4,m4a,3gp,3g2,mj2",

"format_long_name": "QuickTime / MOV",

"start_time": "0.000000",

"duration": "250.200000",

"size": "24396491",

"bit_rate": "780063",

"probe_score": 100,

"tags": {

"major_brand": "isom",

"minor_version": "512",

"compatible_brands": "isomiso2avc1mp41",

"encoder": "Lavf58.76.100",

"comment": "zy-libx264,vid:2319539678"

}

}

}

2.2、海康视频解析

{

"streams": [

{

"index": 0,

"codec_name": "hevc",

"codec_long_name":"H.265 / HEVC (High Efficiency Video Coding)",

"profile": "Main",

"codec_type": "video",

"codec_tag_string": "[0][0][0][0]",

"codec_tag": "0x0000",

"width": 2560,

"height": 1440,

"coded_width": 2560,

"coded_height": 1440,

"closed_captions": 0,

"film_grain": 0,

"has_b_frames": 0,

"pix_fmt": "yuv420p",

"level": 153,

"color_range": "tv",

"chroma_location": "left",

"refs": 1,

"id": "0x1e0",

"r_frame_rate": "25/1",

"avg_frame_rate": "25/1",

"time_base": "1/90000",

"start_pts": 7612160776,

"start_time": "84579.564178",

"duration_ts": 899820,

"duration": "9.998000",

"extradata_size": 88,

"disposition": {

"default": 0,

"dub": 0,

"original": 0,

"comment": 0,

"lyrics": 0,

"karaoke": 0,

"forced": 0,

"hearing_impaired": 0,

"visual_impaired": 0,

"clean_effects": 0,

"attached_pic": 0,

"timed_thumbnails": 0,

"captions": 0,

"descriptions": 0,

"metadata": 0,

"dependent": 0,

"still_image": 0

}

},

{

"index": 1,

"codec_name": "pcm_alaw",

"codec_long_name": "PCM A-law / G.711 A-law",

"codec_type": "audio",

"codec_tag_string": "[0][0][0][0]",

"codec_tag": "0x0000",

"sample_fmt": "s16",

"sample_rate": "8000",

"channels": 1,

"channel_layout": "mono",

"bits_per_sample": 8,

"id": "0x1c0",

"r_frame_rate": "0/0",

"avg_frame_rate": "0/0",

"time_base": "1/90000",

"start_pts": 7612153756,

"start_time": "84579.486178",

"duration_ts": 900000,

"duration": "10.000000",

"bit_rate": "64000",

"disposition": {

"default": 0,

"dub": 0,

"original": 0,

"comment": 0,

"lyrics": 0,

"karaoke": 0,

"forced": 0,

"hearing_impaired": 0,

"visual_impaired": 0,

"clean_effects": 0,

"attached_pic": 0,

"timed_thumbnails": 0,

"captions": 0,

"descriptions": 0,

"metadata": 0,

"dependent": 0,

"still_image": 0

}

}

],

"format": {

"filename": ".\\3.mp4",

"nb_streams": 2,

"nb_programs": 0,

"format_name": "mpeg",

"format_long_name": "MPEG-PS (MPEG-2 Program Stream)",

"start_time": "84579.486178",

"duration": "10.076000",

"size": "3798048",

"bit_rate": "3015520",

"probe_score": 52

}

}

2.3、比对工具

使用BCompare 比对工具,检查两个json的差异性。共有三处主要的不同

左边为正常视频、右边为海康视频

第一处:

海康转码后的格式 MPEG-H Part2/HEVC(H.265)(hevc)

第二处:

第三处:

3、转码

通过上图的对比,优先考虑将海康视频转码为H.264 格式

3.1、maven依赖

复制代码
<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-->

3.2、实现代码

复制代码
public static void convertH264() throws EncoderException {
        //源视频位置
        File file = new File("G:\\video\\ffmpeg\\3.mp4");
        //目标视频位置
        File file1 = new File("G:\\video\\ffmpeg\\4.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(1024*1024 * 2));
        //设置帧率
        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);
    }

根据实际需要设置转码中是否需要音频,

调整视频清晰度:通过设置 video.setBitRate 大小,实际测试值为1024*1024*4=4M大小较清晰。

但是转码时间较长,10秒的3.7M视频 需要7秒转换完成,最终大小4.3M

4、验证

转码后视频可以通过浏览器播放。对应的视频详情如下

{

"streams": [

{

"index": 0,

"codec_name": "h264",

"codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",

"profile": "Constrained Baseline",

"codec_type": "video",

"codec_tag_string": "avc1",

"codec_tag": "0x31637661",

"width": 2560,

"height": 1440,

"coded_width": 2560,

"coded_height": 1440,

"closed_captions": 0,

"film_grain": 0,

"has_b_frames": 0,

"pix_fmt": "yuv420p",

"level": 50,

"chroma_location": "left",

"field_order": "progressive",

"refs": 1,

"is_avc": "true",

"nal_length_size": "4",

"id": "0x1",

"r_frame_rate": "25/1",

"avg_frame_rate": "25/1",

"time_base": "1/12800",

"start_pts": 0,

"start_time": "0.000000",

"duration_ts": 128000,

"duration": "10.000000",

"bit_rate": "3599484",

"bits_per_raw_sample": "8",

"nb_frames": "250",

"extradata_size": 39,

"disposition": {

"default": 1,

"dub": 0,

"original": 0,

"comment": 0,

"lyrics": 0,

"karaoke": 0,

"forced": 0,

"hearing_impaired": 0,

"visual_impaired": 0,

"clean_effects": 0,

"attached_pic": 0,

"timed_thumbnails": 0,

"captions": 0,

"descriptions": 0,

"metadata": 0,

"dependent": 0,

"still_image": 0

},

"tags": {

"language": "und",

"handler_name": "VideoHandler",

"vendor_id": "[0][0][0][0]"

}

}

],

"format": {

"filename": ".\\4.mp4",

"nb_streams": 1,

"nb_programs": 0,

"format_name": "mov,mp4,m4a,3gp,3g2,mj2",

"format_long_name": "QuickTime / MOV",

"start_time": "0.000000",

"duration": "10.000000",

"size": "4501211",

"bit_rate": "3600968",

"probe_score": 100,

"tags": {

"major_brand": "isom",

"minor_version": "512",

"compatible_brands": "isomiso2avc1mp41",

"encoder": "Lavf58.20.100"

}

}

}

相关推荐
CHS_Lab5 天前
海康威视安防监控多盘位初始化后的恢复方法
数据恢复·安防监控·海康威视·安防恢复
包饭厅咸鱼10 天前
MV-CS200-10GM双相机启动异常占用问题----报错码0xffffffff80000203
c++·海康威视·相机占用
小柯博客16 天前
STM32MP1 没有硬件编解码,如何用 CPU 实现 H.264 编码支持 WebRTC?
c语言·stm32·嵌入式硬件·webrtc·h.264·h264·v4l2
广东数字化转型19 天前
JT808,JT1078 —— AAC编码 —— 部标机语音对讲Java实现
aac·h264·h265·g711a·部标机
Sam Xiao23 天前
JT808,JT1078 —— AAC编码 —— 部标机语音对讲Java实现
aac·h264·h265·g711a·metro·部标机
DogDaoDao1 个月前
OpenCV音视频编解码器详解
人工智能·opencv·音视频·视频编解码·h264·h265·音视频编解码
却道天凉_好个秋3 个月前
音视频学习(六十三):AVCC和HVCC
音视频·h264·h265·avcc·hvcc
kyle~3 个月前
海康摄像头开发---标准配置结构体(NET_DVR_STD_CONFIG)
运维·服务器·c++·算法·microsoft·海康威视
kyle~3 个月前
海康相机开发---HCNetSDK
开发语言·网络·c++·数码相机·海康威视
ccut 第一混4 个月前
c# winform 调用 海康威视工业相机(又全又细又简洁)
开发语言·c#·工业相机·海康威视