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,只加了调试打印,其它没有做任何改动了。修改代码如下:
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[cur_chn].fp == NULL)
return -1;
#ifdef SAVE_FILE
char save_file_path[30] = "test_rtsp_";
char str[10] = {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[cur_chn].fp);
#endif
}
复制代码
执行程序:./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
2022-7-9 19:22 上传
点击文件名下载附件
下载积分: 灯泡 -1 , 经验 -1
10.7 KB, 下载次数: 1, 下载积分: 灯泡 -1 , 经验 -1
作者:
flamebox
时间:
2022-7-10 09:27
本帖最后由 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多帧就卡住了。
有人清楚原因吗?
欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/)
Powered by Discuz! X3.1