保存ffmpeg的AVPacket *pkt的demo
时间: 2023-07-08 20:51:00 浏览: 127
下面是一个简单的保存AVPacket *pkt的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <libavformat/avformat.h>
int main(int argc, char *argv[]) {
AVFormatContext *input_ctx = NULL;
AVPacket pkt;
int ret;
// 打开输入文件并读取格式
if ((ret = avformat_open_input(&input_ctx, argv[1], NULL, NULL)) < 0) {
fprintf(stderr, "Could not open input file '%s': %s\n", argv[1], av_err2str(ret));
return 1;
}
// 查找流信息
if ((ret = avformat_find_stream_info(input_ctx, NULL)) < 0) {
fprintf(stderr, "Could not find stream information: %s\n", av_err2str(ret));
return 1;
}
// 循环读取每个数据包并保存
while (1) {
ret = av_read_frame(input_ctx, &pkt);
if (ret < 0) {
if (ret == AVERROR_EOF) {
// 读取完毕
break;
} else {
fprintf(stderr, "Error while reading packet: %s\n", av_err2str(ret));
return 1;
}
}
// 保存pkt到文件中
FILE *fp = fopen("packet.bin", "ab");
if (!fp) {
fprintf(stderr, "Could not open output file\n");
return 1;
}
fwrite(&pkt, sizeof(pkt), 1, fp);
fclose(fp);
// 释放pkt的资源
av_packet_unref(&pkt);
}
// 关闭输入文件
avformat_close_input(&input_ctx);
return 0;
}
```
这个程序会读取输入文件中的每个数据包,并将其保存到名为"packet.bin"的二进制文件中。保存时使用了"ab"模式,这意味着每个数据包都会被追加到文件末尾。如果要覆盖文件,请使用"w"模式。
阅读全文