zoukankan      html  css  js  c++  java
  • (原)关于获取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

  • 相关阅读:
    java学习阶段一 方法和文档注释
    java学习阶段一 二维数组
    java学习阶段一 一维数组
    java学习阶段一 循环结构
    java学习阶段一 选择结构
    java学习阶段一 运算符
    oracle学习笔记:修改表空间文件位置
    oracle学习笔记:重建临时表空间
    oracle等待事件1:Failed Logon delay等待事件
    oracle数据库删除归档日志
  • 原文地址:https://www.cnblogs.com/lihaiping/p/6612511.html
Copyright © 2011-2022 走看看