从flv文件中提取h264码流(使用av_bsf_send_packet和av_bsf_receive_packet)

本文介绍了如何使用最新版本的FFmpeg API替换旧版,从FLV文件中提取H264视频流,重点讲解了`avcodec_parameters_from_context`在新API中的作用,并提供了一个修改后的代码示例,适合音视频开发初学者参考。
摘要由CSDN通过智能技术生成

最近在学习音视频开发,需要开发一个从flv文件中提取h264码流的demo。

具体的原理,在雷神的文章中写的很清楚了:
https://blog.csdn.net/leixiaohua1020/article/details/39767055
https://blog.csdn.net/leixiaohua1020/article/details/39802819

在这里致敬一下雷神,给我们这些小白入门音视频铺平了道路!

但是雷神在Demo中使用的API是旧版本的API,比如bitstream_filter相关的:
av_bitstream_filter_init()
av_bitstream_filter_filter()
等,这些API即将被弃用,我们需要使用新版本的API

但是网上并没有找到相关的实现,根据上面链接的方法也并不能正确解析出h264码流。

在分析bitstream_filter.c源码后我们发现,在调用av_bsf_init()前需要调用avcodec_parameters_from_context(),增加解码必要的一些参数。

修改后的demo如下,大家可以用来参考。因为我也是刚入门,所以欢迎大家批评指正~:

#include <stdio.h>
#include <libavformat/avformat.h>
#define FFMPEG_NEW

int main() {
   
    AVFormatContext *ifmt_ctx = NULL;
    AVPacket pkt;
    int ret, i;
    int videoindex = -1, audioindex = -1;
    const char *in_filename = "demo.flv";
    const char *out_filename_v = "ffmpeg_demo.h264";
    const char *out_filename_a = "ffmpeg_demo.mp3";

    //av_register_all(); 已废弃

    if ((ret = avformat_open_input(&ifmt_ctx, in_filename, 0, 0)) < 0) {
   
        printf("Could not open input file.");
        goto ERROR;
    }

    if ((ret = avformat_find_stream_info(ifmt_ctx, 0)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值