当我在使用ffmpeg的avformat_open_input()函数时发现,当我传入的url参数为一个0字节的mp4文件时,调用这个函数就会发生崩溃,并提示“Program terminated with signal 8, Arithmetic exception.”我改如何调用使用avformat_open_input()这个函数,以避免发生这样的错误?
时间: 2024-03-09 15:49:13 浏览: 130
当传入的url参数为一个0字节的mp4文件时,调用avformat_open_input()函数可能会导致程序崩溃的原因是因为0字节的mp4文件并不符合mp4文件的规范,导致ffmpeg无法正确解析该文件。为了避免这种错误,你可以在调用avformat_open_input()函数之前,先判断文件是否为空,如果文件为空,则不调用该函数。
例如,你可以使用以下代码进行判断:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
int main(int argc, char *argv[]) {
int fd;
struct stat st;
if (argc < 2) {
fprintf(stderr, "Usage: %s file\n", argv[0]);
exit(1);
}
if (stat(argv[1], &st) == -1) {
perror("stat");
exit(1);
}
if (S_ISREG(st.st_mode) && st.st_size == 0) {
printf("File is empty.\n");
exit(1);
}
// Call avformat_open_input() function here.
// ...
return 0;
}
```
这样,当文件为空时,就可以避免调用avformat_open_input()函数导致的程序崩溃。
阅读全文