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

目录

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"

}

}

}

相关推荐
EasyDSS7 天前
RTMP推流平台EasyDSS在无人机推流直播安防监控中的创新应用
音视频·无人机·rtmp推流·视频转码
EasyDSS23 天前
音视频流媒体直播/点播系统EasyDSS互联网视频云平台介绍
音视频·无人机·视频转码·视频推流·视频推拉流
EasyDSS1 个月前
互联网视频推拉流EasyDSS视频直播点播平台视频转码有哪些技术特点和应用?
运维·服务器·音视频·rtmp推流·视频转码
从后端到QT2 个月前
RTP H264封包和解包分析
音视频·aac·h264·rtp
Neil_baby3 个月前
H264参考帧列表管理
h264·编解码
superconvert3 个月前
主流流媒体的综合性能大 PK ( smart_rtmpd, srs, zlm, nginx rtmp )
websocket·ffmpeg·webrtc·hevc·rtmp·h264·hls·dash·rtsp·srt·flv
EasyDSS3 个月前
跨界融合:EasyDSS+无人机视频直播推流技术助力行业多场景应用
音视频·无人机·视频转码·视频推流·视频推拉流
daqinzl4 个月前
利用javacv实现视频转h264
ffmpeg·h264·javacv·视频转换
IT_阿水4 个月前
基于FFMPEG读取摄像头图像编码为h264
ffmpeg·h264
火山上的企鹅4 个月前
QT Quick QML 添加海康威视SDK云台控制模块
开发语言·qt·qml·海康威视