Firefly开源社区

标题: 使用ffrtsp拉流卡死问题 [打印本页]

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

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

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


tchip_askquestions

log.zip

10.7 KB, 下载次数: 1, 下载积分: 灯泡 -1 , 经验 -1


作者: flamebox    时间: 2022-7-10 09:27
本帖最后由 flamebox 于 2022-7-10 10:00 编辑

不推流的原因找到了,sdk中的代码由
  1. static void *rtsppushbuff(void *data)
  2. {
  3.   switch (((struct RTSP_PUSH_INFO *)data)->type)
  4.   {
  5.   case RK_CODEC_TYPE_H264:
  6.     ((struct RTSP_PUSH_INFO *)data)->type = RTSP_CODEC_H264;
  7.     break;
  8.   case RK_CODEC_TYPE_H265:
  9.     ((struct RTSP_PUSH_INFO *)data)->type = RTSP_CODEC_H265;
  10.     break;
  11.   default:
  12.     printf("error: video codec not support.\n");
  13.     break;
  14.   }
  15.   ffrtsph264Push((struct RTSP_PUSH_INFO *)data);
  16. }
复制代码
改成
  1. static void *rtsppushbuff(void *data)
  2. {
  3.   switch (((struct RTSP_PUSH_INFO *)data)->type)
  4.   {
  5.   case RK_CODEC_TYPE_H264:
  6.     ((struct RTSP_PUSH_INFO *)data)->type = RTSP_CODEC_H264;
  7.     break;
  8.   case RK_CODEC_TYPE_H265:
  9.     ((struct RTSP_PUSH_INFO *)data)->type = RTSP_CODEC_H265;
  10.     break;
  11.   default:
  12.     printf("error: video codec not support.\n");
  13.     break;
  14.   }
  15.   ffrtspPush((struct RTSP_PUSH_INFO *)data);
  16. }
复制代码




就可以了。。。
但是取流还是会取一段时间就卡死。试过不同的源卡死的时间点不一样,但大多不超过5000多帧就卡住了。
有人清楚原因吗?





欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1