ffmpeg中av_interleaved_write_frame函数的源码分析及其用法

fmpeg中av_interleaved_write_frame的源码。
  1. int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt){
  2.     AVStream *st= s->streams[ pkt->stream_index];
  3.     int ret;

  4.     //FIXME/XXX/HACK drop zero sized packets
  5.     if(st->codec->codec_type == AVMEDIA_TYPE_AUDIO && pkt->size==0)
  6.         return 0;

  7.     av_dlog(s, "av_interleaved_write_frame size:%d dts:%"PRId64" pts:%"PRId64"\n",
  8.             pkt->size, pkt->dts, pkt->pts);
  9.     if((ret = compute_pkt_fields2(s, st, pkt)) < 0 && !(s->oformat->flags & AVFMT_NOTIMESTAMPS))
  10.         return ret;

  11.     if(pkt->dts == AV_NOPTS_VALUE && !(s->oformat->flags & AVFMT_NOTIMESTAMPS))
  12.         return AVERROR(EINVAL);

  13.     for(;;){
  14.         AVPacket opkt;
  15.         int ret= interleave_packet(s, &opkt, pkt, 0);
  16.         if(ret<=0) //FIXME cleanup needed for ret<0 ?
  17.             return ret;

  18.         ret= s->oformat->write_packet(s, &opkt);
  19.         if (ret >= 0)
  20.             s->streams[opkt.stream_index]->nb_frames++;

  21.         av_free_packet(&opkt);
  22.         pkt= NULL;

  23.         if(ret<0)
  24.             return ret;
  25.         if(s->pb && s->pb->error)
  26.             return s->pb->error;
  27.     }
  28. }
复制代码


我在编码的时候采用如下的代码:
  1. AVPacket pkt;
  2.         av_init_packet(&pkt);

  3.         if(c->coded_frame->pts != AV_NOPTS_VALUE)
  4.                 {
  5.             pkt.pts = av_rescale_q(c->coded_frame->pts,c->time_base,en_info->video_st->time_base);
  6.                 }
  7.         if(c->coded_frame->key_frame)
  8.             pkt.flags |= AV_PKT_FLAG_KEY;
  9.         pkt.stream_index = en_info->video_st->index;
  10.         pkt.data = en_info->video_outbuf;
  11.         pkt.size = en_info->out_size;
  12.         ret = av_interleaved_write_frame( en_info->oc , &pkt );
复制代码
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值