小编ubi*_*bik的帖子

libavcodec,如何转换具有不同帧速率的视频?

我通过v4l从相机抓取视频帧,我需要用mpeg4格式对它们进行转码,然后通过RTP连续流式传输.

一切都"有效",但重新编码时我没有:输入流产生15fps,输出为25fps,每个输入帧都在一个视频对象序列中转换(我通过简单的检查验证了这一点)在输出比特流上).我猜接收器正在正确解析mpeg4比特流,但RTP分组化在某种程度上是错误的.我应该如何在一个或多个AVPacket中拆分编码比特流?也许我错过了明显的,我只需要寻找B/P帧标记,但我想我没有正确使用编码API.

以下是我的代码的摘录,它基于可用的ffmpeg示例:

// input frame
AVFrame *picture;
// input frame color-space converted
AVFrame *planar;
// input format context, video4linux2
AVFormatContext *iFmtCtx;
// output codec context, mpeg4
AVCodecContext *oCtx;
// [ init everything ]
// ...
oCtx->time_base.num = 1;
oCtx->time_base.den = 25;
oCtx->gop_size = 10;
oCtx->max_b_frames = 1;
oCtx->bit_rate = 384000;
oCtx->pix_fmt = PIX_FMT_YUV420P;

for(;;)
{
  // read frame
  rdRes = av_read_frame( iFmtCtx, &pkt );
  if ( rdRes >= 0 && pkt.size > 0 )
  {
    // decode it
    iCdcCtx->reordered_opaque …
Run Code Online (Sandbox Code Playgroud)

c c++ ffmpeg video-encoding libavcodec

5
推荐指数
1
解决办法
3316
查看次数

标签 统计

c ×1

c++ ×1

ffmpeg ×1

libavcodec ×1

video-encoding ×1