av_read_frame的过程



1.根据打开的流名称,找到相匹配的解码器结构.
  从全局的AVInputFormat链表中遍历查找.
  RTSP --> rtspdec.c 里面的AVInputFormat定义. 


2.调用AVInputFormat结构的接口read_header获取流信息.
  AVInputFormat定义了读取,播放,暂停等抽象接口.
  在上层调用read_header,会根据解码器结构的类型,回调其read_header的定义。
  以RTSP为例,调用的是rtspdec.c里的rtsp_read_header
  
3.调用ff_rtsp_connect
  连接的过程,会对私有数据结构RTSPState进行填充.
  这里的私有数据结构设计的很巧妙,不同的协议,处理的方式不太相同。
  把这些不同封装在私有结构里,分化到具体协议层里去实现,在上层调用时,不用考虑这些不同。


  调用ffurl_open创建协议为TCP的URLContext,主要进行信令协议控制.句柄存储在RTSPState中.


  URLProtocol定义了底层读取数据的抽象接口.
  创建URLContext句柄
  调用ff_rtsp_setup_input_streams发送DESCRIBE,获取SDP包,解析流的个数。
  调用ff_rtsp_make_setup_request发送Setup. 设置参数.
  调用ffurl_open创建协议为RTP的URLContext,主要进行流控制.句柄存储在RTSPStream中.
   


ffmpeg把协议封装成IO操作,以供上层调用


 上层调用read_packet回调到rtspdec.c中的rtsp_read_packet函数读取包数据.




read_frame_internal调用ff_read_packet读取包数据.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值