JAVACV集成海康摄像头RTSP流时出现的丢包与无法解析的问题

leeking888 2017-08-24 10:58:43
目标:使用javacv的FFmpegFrameGrabber 读取 海康摄像头的 rtsp流,获取一帧帧的图片进行加工处理。
代码:

// main 方法中的代码,非常简单
String rtspPath = "rtsp://admin:123123@192.168.1.64:554/Streaming/Channels/1";
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(rtspPath );
// grabber.setOption("rtsp_transport", "tcp"); 使用tcp的方式进行传输,网上找的资料,结果使用了这个以后,直接读取到50帧后就一直返回Null了。。这里把它注释,因为默认是使用udp的方式接收。就会出现以下的错误。而且每次都是在30帧的时候就报这些错误,好奇怪。
grabber.start();
OpenCVFrameConverter.ToIplImage conveter = new OpenCVFrameConverter.ToIplImage();
for(int i=0 ; true; i++){
Frame frame = grabber.grabImage();
if(frame == null){
System.out.println("frame is null "+i);
continue ;
}
System.out.println(i +":"+grabber.getFormat()+ ":"+grabber.getFrameNumber());
cvSaveImage(imagesPath+i+".jpg", conveter.convertToIplImage(frame));
}


错误内容:

Input #0, rtsp, from 'rtsp://admin:123123@192.168.1.64:554/Streaming/Channels/1':
Metadata:
title : Media Presentation
Duration: N/A, start: 0.040000, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt709), 2560x1440, 25 fps, 25 tbr, 90k tbn
[swscaler @ 000000001be02720] deprecated pixel format used, make sure you did set range correctly
[rtsp @ 0000000000f8c9a0] max delay reached. need to consume packet
[rtsp @ 0000000000f8c9a0] RTP: missed 4188 packets
[rtsp @ 0000000000f8c9a0] RTP: PT=60: bad cseq 61ae expected=5152
[rtsp @ 0000000000f8c9a0] max delay reached. need to consume packet
[rtsp @ 0000000000f8c9a0] RTP: missed 4189 packets
[rtsp @ 0000000000f8c9a0] max delay reached. need to consume packet
[rtsp @ 0000000000f8c9a0] RTP: missed 96 packets
[h264 @ 000000001a9fbfe0] left block unavailable for requested intra mode
[h264 @ 000000001a9fbfe0] error while decoding MB 0 67, bytestream 23926
[h264 @ 000000001a9fbfe0] concealing 3729 DC, 3729 AC, 3729 MV errors in P frame
[swscaler @ 000000001be02720] deprecated pixel format used, make sure you did set range correctly
[rtsp @ 0000000000f8c9a0] max delay reached. need to consume packet
[rtsp @ 0000000000f8c9a0] RTP: missed 99 packets
...全文
6680 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdnHce 2020-10-26
  • 打赏
  • 举报
回复
引用 4 楼 m0_38138387 的回复:
解决了吗?
csdnHce 2020-10-26
  • 打赏
  • 举报
回复
解决了吗??
m0_38138387 2018-06-14
  • 打赏
  • 举报
回复
m0_38138387 2018-06-14
  • 打赏
  • 举报
回复
哥们我一直报[swscaler @ 000000000b570c80] deprecated pixel format used, make sure you did set range correctly这个错,根据你答案设置了像素,还是不行,视频还可以放,但延迟30秒以上,晕
leeking888 2017-08-24
  • 打赏
  • 举报
回复
grabber.setOption("rtsp_transport", "tcp");
使用tcp的方式进行传输,网上找的资料,结果使用了这个以后,直接读取到50帧后就一直返回Null了。 不知道什么原因了。个人初步分析会不会是grabber处理的太慢,而rtsp那边推流过来太快造成的?好乱。
leeking888 2017-08-24
  • 打赏
  • 举报
回复 3
终于知道是怎么一回事了,也把答案公开给大家吧。就是因为默认的尺寸是 2560 * 1440的太大了的原因。我把它改成640 * 480 就OK了。原因还真是不好说。

FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(rtspPath);
grabber.setOption("rtsp_transport", "tcp");
// 一直报错的原因!!!就是因为是 2560 * 1440的太大了。。
grabber.setImageHeight(480);
grabber.setImageWidth(860);
grabber.start();

2,542

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧