flamebox 发表于 2022-7-9 19:22:47

使用ffrtsp拉流卡死问题

使用ffrtsp拉流时,发现拉到第5626帧时程序就卡住不走了,没有任何报错。同时也发现推流从一开始就失败了,没有推出。请问是怎么回事?
sdk我使用了.repo/repo/repo sync -c --no-tags 确保是最新的,也切换到了firefly分支。
测试程序是直接编译sdk中的ffrtsp_demo_test.cc,只加了调试打印,其它没有做任何改动了。修改代码如下:
int FFRTSP_Send(u_int8_t *framebuff, unsigned framesize, bool *quit, int cur_chn)
{
    static int my_packet_cnt = 0;
    my_packet_cnt++;
    printf("Got one frame from rtsp [%d]\n", my_packet_cnt);
    if (ffrtsp_push.fp == NULL)
      return -1;
#ifdef SAVE_FILE
    char save_file_path = "test_rtsp_";
    char str = {0};
    sprintf(str, "%d", cur_chn);
    strcat(save_file_path, str);
    FILE *fp = fopen(save_file_path, "a+b");
    fwrite(framebuff, framesize, 1, fp);
    fclose(fp);
    fp = NULL;
#else
    printf("Write framebuff to ffrtsp_push!\n");
    fwrite(framebuff, framesize, 1, ffrtsp_push.fp);
#endif
}执行程序:./ffrtsp_demo_test rtsp://192.168.3.231:8554/stream后,打印会在
“Got one frame from rtsp ”
卡死,同时也没有一句“Write framebuff to ffrtsp_push!”的信息,证明在判断if (ffrtsp_push.fp == NULL)一句时回调函数就退出了。

ffrtsp库走不通,我后面改用ROCKCHIP_RTSP_LIB的官方库,走VI(usb摄像头)——RKNN(yolov5)——VENC——RTSP推流是一点问题也没有的~~~

我在翻查论坛帖子里面也发现有人反映使用你们的ffrtsp库不出流,证明这个问题不是我个例,希望官方技术支持能回复,谢谢。


flamebox 发表于 2022-7-10 09:27:58

本帖最后由 flamebox 于 2022-7-10 10:00 编辑

不推流的原因找到了,sdk中的代码由
static void *rtsppushbuff(void *data)
{
switch (((struct RTSP_PUSH_INFO *)data)->type)
{
case RK_CODEC_TYPE_H264:
    ((struct RTSP_PUSH_INFO *)data)->type = RTSP_CODEC_H264;
    break;
case RK_CODEC_TYPE_H265:
    ((struct RTSP_PUSH_INFO *)data)->type = RTSP_CODEC_H265;
    break;
default:
    printf("error: video codec not support.\n");
    break;
}
ffrtsph264Push((struct RTSP_PUSH_INFO *)data);
}改成
static void *rtsppushbuff(void *data)
{
switch (((struct RTSP_PUSH_INFO *)data)->type)
{
case RK_CODEC_TYPE_H264:
    ((struct RTSP_PUSH_INFO *)data)->type = RTSP_CODEC_H264;
    break;
case RK_CODEC_TYPE_H265:
    ((struct RTSP_PUSH_INFO *)data)->type = RTSP_CODEC_H265;
    break;
default:
    printf("error: video codec not support.\n");
    break;
}
ffrtspPush((struct RTSP_PUSH_INFO *)data);
}



就可以了。。。
但是取流还是会取一段时间就卡死。试过不同的源卡死的时间点不一样,但大多不超过5000多帧就卡住了。
有人清楚原因吗?
页: [1]
查看完整版本: 使用ffrtsp拉流卡死问题