ffmpeg学习之点点滴滴——打开文件并获取文件流信息

本文介绍ffmpeg.c中的read_ffserver_streams函数,该函数用于打开指定文件并将其音视频流信息绑定到AVFormatContext结构体。通过av_open_input_file打开文件,然后复制流信息到输出结构体,并初始化编解码器上下文。最后,使用av_close_input_file关闭文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是ffmpeg.c里的一段代码,功能是打开文件并绑定音视频流信息到AVFormatContext 这个结构体

  1. static int read_ffserver_streams(AVFormatContext *s, const char *filename)
  2. {
  3.     int i, err;
  4.     AVFormatContext *ic;
  5.     /*打开文件,并将文件相关的信息存到ic中,filename为文件的完整路径*/
  6.     err = av_open_input_file(&ic, filename, NULL, FFM_PACKET_SIZE, NULL);
  7.     if (err < 0)
  8.         return err;
  9.     /*复制文件里的流信息到输出的AVFormatContext结构体中,一般情况有2个流即nb_streams=2,

        s->streams[0]为 视频流,s->streams[1]为音频流*/

  10.     s->nb_streams = ic->nb_streams;
  11.     for(i=0;i<ic->nb_streams;i++) {
  12.         AVStream *st;
  13.         /*修正:需要一个更优化的解决方案*/
  14.         st = av_mallocz(sizeof(AVStream));
  15.         memcpy(st, ic->streams[i], sizeof(AVStream));
  16.         /*初始化编解码器结构体,将文件所用的编码格式存储到用于输出的AVFormatContext结构体中*/
  17.         st->codec = avcodec_alloc_context();
  18.         memcpy(st->codec, ic->streams[i]->codec, sizeof(AVCodecContext));
  19.         s->streams[i] = st;
  20.     }
  21.     /*打开文件后需要关闭*/
  22.     av_close_input_file(ic);
  23.     return 0;
  24. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值