(原)關於獲取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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM