语言:C / ENV:Linux
我正在开发一个流引擎,现在我可以启动、停止和暂停流,但是寻找是让我很头疼的操作,我之前已经在这里问过一个问题,并修复了代码中的一些问题答案。
使用lseek()函数,我将打开的流文件描述符作为第一个参数传递,另外我使用 UDP 进行传输,类似于以下代码:
transport_fd = open(tsfile, O_RDONLY);
int offset = 1024;
off_t offsetIndicator;
if ((offsetIndicator=lseek(transport_fd, offset, SEEK_CUR))<0) printf("Error seeking\n");
每当我在流式传输时尝试搜索时,流式传输停止并且图片挂起。
有什么我应该注意的吗?例如:例如在搜索文件后尝试sleep()或nanosleep()以使更改生效。
我找不到此类引擎中最佳实践的示例、论文或相关文章。
编辑:
经测试,文件似乎继续流,但网络上的接收设备不再捕获流连接,并计算减去查找时间后完成所需的时间,流似乎正常完成。
代码片段:
while (!completed)
{
while (/* Comparing conditions */ && !completed)
{
if (seekLck == 1) // seekLck is a semaphore to test seek signal from father process initiated by 0
{
int offset = 1024;
off_t offsetIndicator;
if ((offsetIndicator=lseek(transport_fd, offset, SEEK_CUR))<0)
printf("Error seeking\n");
nanosleep(&nano_sleep_packet, 0); //Try to sleep to see if it is still hanging, didn't work
seekLck = 0;
}
len = read(transport_fd, send_buf, packet_size);
if(len < 0) {
fprintf(stderr, "File read error \n");
completed = 1;
}
else if (len == 0)
{
fprintf(stderr, "Sent done\n");
completed = 1;
}
else
{
sent = sendto(sockfdstr, send_buf, len, 0, (struct sockaddr *)&addr, sizeof(struct sockaddr_in));
if(sent <= 0)
{
perror("send(): error ");
completed = 1;
}
}
}
nanosleep(&nano_sleep_packet, 0);
}
close(transport_fd);
close(sockfdstr);
free(send_buf);
printf("cleaning up\n");
return 0;
}