FFmpeg libavformat协议框架代码分析

本文介绍了如何在ffmpeg中替换原有的网络协议,以使用自研网络库。主要方法是新增自定义的live协议,详细解析了libavformat协议框架,包括相关文件、URLProtocol接口及协议注册过程。通过配置和实现特定的函数,成功将原有url替换为使用live协议。
摘要由CSDN通过智能技术生成

背景

ffmpeg有自己的一套网络IO代码,但是相对比较简单,现在需要使用自研的网络库接管ffmpeg的网络IO功能。方法有两种:

  1. 在原本的url前面加127.0.0.1的方式,走本地代理的方式
  2. 新增自己的协议,替换原本的http协议 第一种方法比较简单,本文主要介绍第二种方法。
    首先介绍下libavformat协议框架,然后在介绍下如何在ffmpeg中新增一个自定义的协议。

libavformat协议框架

相关文件

libavformat/protocol_list.c
libavformat/protocols.c
libavformat/avio.c

protocol_list.c是在执行 ./configure 根据参数而动态生成的代码。默认参数生成的代码如下:

static const URLProtocol *url_protocols[] = {
    ...
    &ff_hls_protocol,
    &ff_http_protocol,
    &ff_httpproxy_protocol,
    &ff_rtmp_protocol,
    &ff_rtmpt_protocol,
    &ff_rtp_protocol,
    &ff_srtp_protocol,
    &ff_tcp_protocol,
    &ff_udp_protocol,
    &ff_unix_protocol,
    NULL };

url_protocols是一个静态数组,存储了http,tcp,udp,rtmp等常用协议的实现。
做一个与本文无关的友情链接 ffmpeg支持的所有协议说明

关键的URLProtocol现在出场

typedef struct URLProtocol {
    const char *name;
    int     (*url_open2)(URLContext *h, const char *url, int flags, AVDictionary **options);
    int     (*url_read)( URLContext
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值