ZLMediaKit实现拉取摄像头(海康协议)编码为H265并使用flv.js播放时提示:FLV:Unsupported codec in video frame:12

发布时间 2023-08-23 16:53:50作者: 霸道流氓

场景

开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130136245

按照上面流程进行拉取摄像头的rtsp流并转流使用flv.js播放时提示:

DemuxException: type - CodeUnsupported,info - Flv: Unsupported codec in video fram:12

 

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

1、这里拉取的是海康威视的摄像头的rtsp流。

海康威视rtsp流格式为:

rtsp://admin:123456@ip:554/h264/ch1/main/av_stream

这里admin是账户,123456是密码,修改Ip和端口,这里拉取h264编码格式的主流。

这里一开始未考虑摄像头编码是H265的情况导致出现问题。

但是这里使用

rtsp://admin:123456@ip:554/h264/ch1/main/av_stream

以及

rtsp://admin:123456@ip:554/h265/ch1/main/av_stream

都能使用vlc等软件播放。

但是在使用flv.js进行播放时提示如上。

2、在仔细核对了ZLMEediaKit的流程和接口以后,发现拉流接口等均返回正常

 

但是使用对应的flv的地址进行播放时失败,在vlc中提示:

VLC无法判别此音频或视频解码器

 

3、为了解决该问题,首先使用ffmpeg模拟出来一个海康协议的rtsp流

Windows上使用FFmpeg实现本地视频推送模拟海康协议rtsp视频流:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/132317435

然后使用模拟的rtsp流地址

执行以上流程,发现能正常播放。

所以大概率是摄像头本身的问题。

查看官方flv.js的说明,发现其特征为:

FLV container with H.264 + AAC / MP3 codec playback
Multipart segmented video playback
HTTP FLV low latency live stream playback
FLV over WebSocket live stream playback
Compatible with Chrome, FireFox, Safari 10, IE11 and Edge
Extremely low overhead, and hardware accelerated by your browser!

 

 4、于是登录该海康威视摄像头,查看其编码格式

配置-视音频-视频-视频编码,果然为H265

 

将其修改为H264之后,播放正常