Toybrick

RtspClient打开rtsp视频无数据回调

jackO

注册会员

积分
97
楼主
发表于 2019-6-28 17:32:04    查看: 32174|回复: 14 | [复制链接]    打印 | 只看该作者
问题描述如题,使用rtspClient获取rtsp视频流,在onRtspHandle函数里面接收回调,但是测试发现没有数据回调,rtsp视频流地址测试是正确的。

主要提示UDP_RTP receive timeout. 运行结果如下:

*************begin*********************
[2019/06/28 05:27:46] D/: listening rtp port 37558
[2019/06/28 05:27:46] D/: listening rtcp port 37559
[2019/06/28 05:27:46] D/: listening rtcp port 37549
[2019/06/28 05:27:46] D/: listening rtp port 37548
[2019/06/28 05:27:46] D/: curlto rtsp://admin:admin123@192.168.2.133:554/h264/ch1/main/av_stream , cli 37548:37558, tcp: 0
[2019/06/28 05:27:47] D/: # FOUND[0] media: video
[2019/06/28 05:27:47] D/: # FOUND[0] control: rtsp://admin:admin123@192.168.2. ... av_stream/trackID=1
[2019/06/28 05:27:47] D/: # FOUND[0] rtpmap: id:96 format:H264 bitrate:90000
[2019/06/28 05:27:47] D/: # TOTAL FOUND  1
[2019/06/28 05:27:47] D/: TRACK [0] : rtsp://admin:admin123@192.168.2. ... av_stream/trackID=1
[2019/06/28 05:27:47] D/: setup 37548 , 37549, uri: rtsp://admin:admin123@192.168.2. ... av_stream/trackID=1
[2019/06/28 05:27:52] W/: (threadRtpFunc in unit_rtsp_client.cpp:122): UDP-RTP receive timeout. rtsp://admin:admin123@192.168.2.133:554/h264/ch1/main/av_stream ; type = Audio
[2019/06/28 05:27:57] W/: (threadRtpFunc in unit_rtsp_client.cpp:122): UDP-RTP receive timeout. rtsp://admin:admin123@192.168.2.133:554/h264/ch1/main/av_stream ; type = Video
[2019/06/28 05:27:57] D/: close curl rtsp://admin:admin123@192.168.2.133:554/h264/ch1/main/av_stream
[2019/06/28 05:27:58] D/: destroying curl rtsp ...
[2019/06/28 05:27:58] D/: destroying curl rtsp ... done
[2019/06/28 05:27:58] D/: ReEnable rtsp client [1] rtsp://admin:admin123@192.168.2.133:554/h264/ch1/main/av_stream
[2019/06/28 05:27:58] D/: curlto rtsp://admin:admin123@192.168.2.133:554/h264/ch1/main/av_stream , cli 37548:37558, tcp: 0
[2019/06/28 05:27:58] W/: (threadRtpFunc in unit_rtsp_client.cpp:122): UDP-RTP receive timeout. rtsp://admin:admin123@192.168.2.133:554/h264/ch1/main/av_stream ; type = Audio
[2019/06/28 05:27:59] D/: # FOUND[0] media: video
[2019/06/28 05:27:59] D/: # FOUND[0] control: rtsp://admin:admin123@192.168.2. ... av_stream/trackID=1
[2019/06/28 05:27:59] D/: # FOUND[0] rtpmap: id:96 format:H264 bitrate:90000
[2019/06/28 05:27:59] D/: # TOTAL FOUND  1
[2019/06/28 05:27:59] D/: TRACK [0] : rtsp://admin:admin123@192.168.2. ... av_stream/trackID=1
[2019/06/28 05:27:59] D/: setup 37548 , 37549, uri: rtsp://admin:admin123@192.168.2. ... av_stream/trackID=1
[2019/06/28 05:28:04] W/: (threadRtpFunc in unit_rtsp_client.cpp:122): UDP-RTP receive timeout. rtsp://admin:admin123@192.168.2.133:554/h264/ch1/main/av_stream ; type = Audio
[2019/06/28 05:28:10] W/: (threadRtpFunc in unit_rtsp_client.cpp:122): UDP-RTP receive timeout. rtsp://admin:admin123@192.168.2.133:554/h264/ch1/main/av_stream ; type = Video
[2019/06/28 05:28:10] D/: close curl rtsp://admin:admin123@192.168.2.133:554/h264/ch1/main/av_stream
[2019/06/28 05:28:10] W/: (threadRtpFunc in unit_rtsp_client.cpp:122): UDP-RTP receive timeout. rtsp://admin:admin123@192.168.2.133:554/h264/ch1/main/av_stream ; type = Audio

测试代码如下所示:

#include <rockchip/rockchip_rtsp.h>
#include <stdio.h>
#include <unistd.h>

void onRtspHandle(unsigned char* buf, size_t len)
{
        printf("***************************recv***********************************\n");
}


int main()
{
        printf("*************begin*********************\n");
        RtspClient client("rtsp://admin:admin123@192.168.2.133:554/h264/ch1/main/av_stream", "admin", "admin123");
        client.setDataCallback(onRtspHandle);
        client.enable();
        usleep(100000000);
        return 0;
}

回复

使用道具 举报

jackO

注册会员

积分
97
沙发
 楼主| 发表于 2019-6-29 14:51:04 | 只看该作者
能否请版主回复一下?
回复

使用道具 举报

jefferyzhang

版主

积分
13578
板凳
发表于 2019-7-1 09:22:19 | 只看该作者
RtspClient client("rtsp://192.168.2.133:554/h264/ch1/main/av_stream", "admin", "admin123");
后面加了用户名密码了,前面地址不需要写用户名密码。
这个主要原因是摄像头没有数据过来,请问下是否有跨网段。
回复

使用道具 举报

jackO

注册会员

积分
97
地板
 楼主| 发表于 2019-7-1 10:30:59 | 只看该作者
jefferyzhang 发表于 2019-7-1 09:22
RtspClient client("rtsp://192.168.2.133:554/h264/ch1/main/av_stream", "admin", "admin123");
后面加 ...

修改成 RtspClient client("rtsp://192.168.2.133:554/h264/ch1/main/av_stream", "admin", "admin123"); 运行也是报同样的错。不存在跨网段的问题,网络肯定是通的。是否和板子固件版本有关呢。我板子烧的是1.3的固件。
回复

使用道具 举报

jefferyzhang

版主

积分
13578
5#
发表于 2019-7-1 10:54:40 | 只看该作者
试下用tcp链接,RtspClient client() 最后一个参数加上true
回复

使用道具 举报

jackO

注册会员

积分
97
6#
 楼主| 发表于 2019-7-1 14:18:38 | 只看该作者
本帖最后由 jackO 于 2019-7-1 14:29 编辑
jefferyzhang 发表于 2019-7-1 10:54
试下用tcp链接,RtspClient client() 最后一个参数加上true

重新烧了1.2版本的固件,刚刚那个程序可以运行了,但是接入librockchip_mpp库时,发现报其他错误,代码如下:
#include <rockchip/rockchip_rtsp.h>
#include <rockchip/rockchip_mpp.h>
#include <stdio.h>
#include <unistd.h>#include <cstring>

MppDecoder *dec;

void onRtspHandle(unsigned char* buf, size_t len)
{
        printf("***************************recv***********************************\n");        unsigned char * buffer = new unsigned char[len];
        memcpy(buffer, buf, len);
        dec->ops->enqueue(dec, buffer, len);
        DecFrame *frame = dec->ops->dequeue(dec);
        printf("************width:%d,height:%d,size:%d*************", frame->width, frame->height, frame->size);
        dec->ops->freeFrame(frame);
}


int main()
{
        printf("*************begin*********************\n");
        dec = MppDecoderCreate(DecodeType:ECODE_TYPE_H264);

        RtspClient client("rtsp://192.168.2.133:554/h264/ch1/main/av_stream", "admin", "admin123");
        client.setDataCallback(onRtspHandle);
        client.enable();
        usleep(100000000);
        return 0;
}

回调函数有数据,错误提示为:mppFrame point is NULL。

回复

使用道具 举报

jackO

注册会员

积分
97
7#
 楼主| 发表于 2019-7-1 14:45:32 | 只看该作者
版主能否回答一下呢?
回复

使用道具 举报

addy

超级版主

积分
609
8#
发表于 2019-7-1 15:05:19 | 只看该作者
并不是每一帧数据都可以解码的。你需要把输入和输出分开。
RTSP回调函数里一直dequeue数据,另外起一个线程来enqueue已经解码好的数据
回复

使用道具 举报

jackO

注册会员

积分
97
9#
 楼主| 发表于 2019-7-1 16:49:22 | 只看该作者
addy 发表于 2019-7-1 15:05
并不是每一帧数据都可以解码的。你需要把输入和输出分开。
RTSP回调函数里一直dequeue数据,另外起一个线程 ...

您好,现在我在不同线程中取数据,已经能够解码出数据了,取出的MppFrame数据应该如何显示出来呢,我是解码的H264的rtsp视频。
回复

使用道具 举报

jackO

注册会员

积分
97
10#
 楼主| 发表于 2019-7-1 17:06:43 | 只看该作者
版主能回答一下吗,谢谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表