(原)关于获取ffmpeg解析rtsp流sdp中带有sps,pps的情况

Posted lihaiping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(原)关于获取ffmpeg解析rtsp流sdp中带有sps,pps的情况相关的知识,希望对你有一定的参考价值。

 转载请注明出处:http://www.cnblogs.com/lihaiping/p/6612511.html

今天同事准备在android下使用ffmpeg来获取rtsp流,问我如何获取获取sps和pps的情况?
因为尽管使用ffmpeg做项目还算熟悉,但用ffmpeg作rtsp client我还真没用过,虽然知道ffmpeg支持rtsp,但一般rtsp client我还是选择自己实现。
使用ffmpeg做rtsp client的在这种情况下,如果rtsp的pps,sps在sdp中带有的话,我们应该从ffmpeg中的哪个字段中提取?
当我们打开一个文件或者流的时候,一般流程为:

//打开
err = avformat_open_input(&ic, is->filename, is->iformat, &format_opts);
//探测
err = avformat_find_stream_info(ic, opts);
//查找流
for (i = 0; i < ic->nb_streams; i++) {
AVStream *st = ic->streams[i];
enum AVMediaType type = st->codec->codec_type;
st->discard = AVDISCARD_ALL;
if (wanted_stream_spec[type] && st_index[type] == -1)
if (avformat_match_stream_specifier(ic, st, wanted_stream_spec[type]) > 0)
st_index[type] = i;
}

 

我们使用了avformat_open_input函数,这个函数的第一个参数为AVFormatContext**p,而我们很多信息都是从这个结构体中获取出来的。
具体的字段为:
ic->streams[i]->codeccontex->extradata
具体的代码为rtpdec_h264.c文件

整个线索分析流程为:rtsp.c
sdp_read_header
  ----ff_sdp_parse
    ----sdp_parse_line
      -----parse_fmtp
        ----parse_sdp_a_line------>parse_h264_sdp_line
                        --------ff_parse_fmtp

以上是关于(原)关于获取ffmpeg解析rtsp流sdp中带有sps,pps的情况的主要内容,如果未能解决你的问题,请参考以下文章

sdp 协议中的packetization-mode方式和三种流传输模式

如何在 wowza 上使用 rtsp 播放流?

JavaCV音视频开发宝典:rtsp转推到rtp(非TS流方式),及使用TS流发送解决sdp缺失问题

JavaCV音视频开发宝典:rtsp转推到rtp(非TS流方式),及使用TS流发送解决sdp缺失问题

JavaCV音视频开发宝典:rtsp转推到rtp(非TS流方式),及使用TS流发送解决sdp缺失问题

rtsp和sdp协议简介