2,550
社区成员




// 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
grabber.setOption("rtsp_transport", "tcp");
使用tcp的方式进行传输,网上找的资料,结果使用了这个以后,直接读取到50帧后就一直返回Null了。
不知道什么原因了。个人初步分析会不会是grabber处理的太慢,而rtsp那边推流过来太快造成的?好乱。
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(rtspPath);
grabber.setOption("rtsp_transport", "tcp");
// 一直报错的原因!!!就是因为是 2560 * 1440的太大了。。
grabber.setImageHeight(480);
grabber.setImageWidth(860);
grabber.start();