亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

H264中的SPS、PPS提取與作用

2019-11-08 03:22:44
字體:
來源:轉載
供稿:網友

牛逼的視頻會議網站:http://wmnmtm.blog.163.com/blog/#m=0

++++++++++++++++++++++++++++++++++++++++++++++++++++

http://wmnmtm.blog.163.com/blog/static/38245714201192491746701/

使用RTP傳輸H264的時候,需要用到sdp協議描述,其中有兩項:Sequence Parameter Sets (SPS) 和Picture Parameter Set (PPS)需要用到,那么這兩項從哪里獲取呢?答案是從H264碼流中獲取.在H264碼流中,都是以"0x00 0x00 0x01"或者"0x00 0x00 0x00 0x01"為開始碼的,找到開始碼之后,使用開始碼之后的第一個字節的低5位判斷是否為7(sps)或者8(pps), 及data[4] & 0x1f == 7 || data[4] & 0x1f == 8.然后對獲取的nal去掉開始碼之后進行base64編碼,得到的信息就可以用于sdp.sps和pps需要用逗號分隔開來.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

如何解析SDP中包含的H.264的SPS和PPS串

http://www.pernet.tv.sixxs.org/thread-109-1-1.html

SDP中的H.264的SPS和PPS串,包含了初始化H.264解碼器所需要的信息參數,包括編碼所用的PRofile,level,圖像的寬和高,deblock濾波器等。由于SDP中的SPS和PPS都是BASE64編碼形式的,不容易理解,附件有一個工具軟件可以對SDP中的SPS和PPS進行解析。用法是在命令行中輸入:spsparser sps.txt pps.txt output.txt例如sps.txt中的內容為:Z0LgFNoFglE=pps.txt中的內容為:aM4wpIA=最終解析的到的結果為:Start dumping SPS:  profile_idc = 66  constrained_set0_flag = 1  constrained_set1_flag = 1  constrained_set2_flag = 1  constrained_set3_flag = 0  level_idc = 20  seq_parameter_set_id = 0  chroma_format_idc = 1  bit_depth_luma_minus8 = 0  bit_depth_chroma_minus8 = 0  seq_scaling_matrix_present_flag = 0  log2_max_frame_num_minus4 = 0  pic_order_cnt_type = 2  log2_max_pic_order_cnt_lsb_minus4 = 0  delta_pic_order_always_zero_flag = 0  offset_for_non_ref_pic = 0  offset_for_top_to_bottom_field = 0  num_ref_frames_in_pic_order_cnt_cycle = 0  num_ref_frames = 1  gaps_in_frame_num_value_allowed_flag = 0  pic_width_in_mbs_minus1 = 21  pic_height_in_mbs_minus1 = 17  frame_mbs_only_flag = 1  mb_adaptive_frame_field_flag = 0  direct_8x8_interence_flag = 0  frame_cropping_flag = 0  frame_cropping_rect_left_offset = 0  frame_cropping_rect_right_offset = 0  frame_cropping_rect_top_offset = 0  frame_cropping_rect_bottom_offset = 0  vui_parameters_present_flag = 0Start dumping PPS:  pic_parameter_set_id = 0  seq_parameter_set_id = 0  entropy_coding_mode_flag = 0  pic_order_present_flag = 0  num_slice_groups_minus1 = 0  slice_group_map_type = 0  num_ref_idx_l0_active_minus1 = 0  num_ref_idx_l1_active_minus1 = 0  weighted_pref_flag = 0  weighted_bipred_idc = 0  pic_init_qp_minus26 = 0  pic_init_qs_minus26 = 0  chroma_qp_index_offset = 10  deblocking_filter_control_present_flag = 1  constrained_intra_pred_flag = 0  redundant_pic_cnt_present_flag = 0  transform_8x8_mode_flag = 0  pic_scaling_matrix_present_flag = 0  second_chroma_qp_index_offset = 10/////////////////////////////////////////////////////////////////////////////////////////////////這里需要特別提一下這兩個參數pic_width_in_mbs_minus1 = 21  pic_height_in_mbs_minus1 = 17分別表示圖像的寬和高,以宏塊(16x16)為單位的值減1因此,實際的寬為 (21+1)*16 = 352 spsparser.rar

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

http://krdai.info.sixxs.org/blog/mp4-sps-pps-data.html

最近在做跟 h264 encode/decode 相關的研究,目標是希望可以從 Android 的 MediaRecorder 當中取出 h264 的資訊。目前問題是在於 SPS 以及 PPS 到底要怎樣得到。由於 MediaRecorder 是寫入 mp4 檔案中,所以不得已只好來去分析一下 mp4 的檔案格式,發現沒有想像中的困難. 主要是參照 ISO/IEC 14496-15 這部份. 在 mp4 的檔案之中, 找到 avcC 這個字串, 之後就是接上 AVCDecoderConfigurationRecord. AVCDecoderConfigurationRecord 的 format 如下:

[cpp] view plaincopyaligned(8) class AVCDecoderConfigurationRecord {     unsigned int(8) configurationVersion = 1;     unsigned int(8) AVCProfileIndication;     unsigned int(8) profile_compatibility;     unsigned int(8) AVCLevelIndication;    bit(6) reserved = '111111'b;     unsigned int(2) lengthSizeMinusOne;    bit(3) reserved = '111'b;     unsigned int(5) numOfSequenceParameterSets;    for (i=0; i< numOfSequenceParameterSets; i++) {        unsigned int(16) sequenceParameterSetLength ;        bit(8*sequenceParameterSetLength) sequenceParameterSetNALUnit;     }     unsigned int(8) numOfPictureParameterSets;     for (i=0; i< numOfPictureParameterSets; i++) {        unsigned int(16) pictureParameterSetLength;        bit(8*pictureParameterSetLength) pictureParameterSetNALUnit;     }  }  

對照一下這樣就可以找到 SPS 和 PPS

+++++++++++++++++++++++++++++++++++++++++++++vlc沒有收到pps和sps2010-10-08 16:16
問題 packetizer_h264 packetizer warning: waiting for SPS/PPS是因為解碼器只是在第一次執行編碼的時候,才編碼出 SPS、PPS、和I_Frame; 
h264 packetizer has set so, that it sends sps/pps only first keyframe, I'm trying to figure what breaks if that is changed so sps/pps is written in every keyframe. [出自| http://trac.videolan.org/vlc/ticket/1384]

解決辦法:

1、編碼器編碼出每個關鍵幀都加上SPS、PPS ,據說通常情況編碼器編出的 SPS、PPS是一樣的,所以這種方法耗費資源。

2、在服務器接收到客戶端請求時,發送第一個package 加上 SPS、PPS。

具體如下:

1、在 VideoOpenFileSource 添加一個變量 isFirstFrame;

2、構造時初始化 isFirstFrame = true;

3、在int VideoOpenFileSource::readFromBufferChain() 修改如下:

   1         if(isFirstFrame == true)   2         {   3                 memcpy(fTo, h264_header, sizeof(h264_header)); /* h264_header = pps +sps*/   4                 offset = sizeof(h264_header);   5                 framesize = BufferChain_get(fInput.video_bufs, fTo + offset);   6                 offset += framesize;   7                 isFirstFrame = false;   8                 printf("this is the first fime/n");   9                 sleep(1);  10         }  11         else  12         {  13                 framesize = BufferChain_get(fInput.video_bufs, fTo + offset);  14                 offset += framesize;  15         }  1
[http://topic.csdn.net/u/20100801/17/ef35e664-92ff-4144-a35f-3984dcf11da3.html| 參考] ========================================================================sdp 關于pps和sps的疑問:packetization-mode 主要是定義包的模式,單一 NALU單元模式(0);非交錯(non-interleaved)封包模式(1);交錯(interleaved)封包模式(2)sprop-parameter-sets 等于H.264 的序列參數集和圖像參數 NAL單元,base64轉換;(即= sps+pps)profile-level-id 這個參數用于指示 H.264 流的 profile 類型和級別。這知道這個是啥東東參考 黑暗長老 www.cppblog.com/czanyou/ffmpeg decode 關于pps sps問題:stackoverflow.com/questions/3493742/problem-to-decode-h264-video-over-rtp-with-ffmpeg-libavcodec/3500432#3500432

如何用C語言取出H.264ES文件里的nal(sps,pps)信息。比如width, height, profile等等請高手指點指點。。。 http://www.oschina.net/question/225813_35707

解析sps,pps的代碼在ffmpeg里面就有, 抄出來就行了, 我以前也自己寫過...ffmpeg的libavcodec/h264_parser.c,h264_ps.c函數ff_h264_decode_seq_parameter_setff_h264_decode_picture_parameter_set自己可以看代碼.

H264參數語法文檔: SPS、PPS、IDR http://blog.csdn.net/heanyu/article/details/6205390H.264碼流第一個 NALU 是 SPS(序列參數集Sequence Parameter Set)對應H264標準文檔 7.3.2.1 序列參數集的語法進行解析

關于H264通過RTP傳輸的打包方式  

|字號 訂閱

Q:現在小弟初次嘗試H264的編碼通過RTP方式傳輸,具體實驗環境的問題如下:環境:服務器端,H264的幀數據(可能超過64k),分成N個1460字節的包,然后加上RTP頭發送??蛻舳?,VLC播放器,通過RTSP協議建立連接,然后接收數據解碼播放。結果:VLC不能解碼接收到的數據,解碼出錯,VLC的信息中顯示不能解碼幀數據。我已經閱讀了一遍rfc3984的文檔,對里面的如何進行打包和用rtp傳輸不是非常理解,希望各位大蝦能夠幫小弟一把,告訴小弟這些和H264的幀該如何發送,該如何分包,該如何加頭信息等等。(其中看到FUs的方式好像適合分包發送,因為小弟的數據幀可能超過64k,所以忘大蝦們能夠仔細解釋一下對于小弟這種情況下的RTP傳輸)

A:我覺得所有的問題在 RFC3984 里面都已經說得很清楚了。不知道你有哪點不懂,請具體提出來。

Q:斑竹好,我這邊是用VLC和服務器端進行通訊的,他們是用RTSP協議建立 開始時的連接的,服務器返回DISCRIBERS請求的SDP和下面描述的相同,我使用的packetization-mode=1,即FU-As方式打 包,因為我這邊上來的數據幀可能超過64k數據。能否麻煩斑竹看看我這邊的SDP寫的是否正確。SDP:v=0o=- 1 1 IN IP4 127.0.0.1s=VStream Livea=type:broadcastt=0 0c=IN   IP4 0.0.0.0m=video 49170 RTP/AVP 99a=rtpmap:99 H264/90000a=fmtp:99 profile-level-id=42A01E; packetization-mode=1; sprop-parameter-ets=Z0IACpZTBYmI, aMljiA==a=control:trackID=0還有就是在RTP發送時,我打好包的數據方式如下面所示:上來的幀數據為:NALU頭+EBSP數據因為幀數據大于1460字節,所以我把數據分為N個不大于1460字節的包,每個包前面加上RTP頭發出去。其 中NALU頭的數值I幀為0x65,參數集為0x67和0x68,這個值是不是有點錯誤,我看RFC3984上面說的好像和我現在的有點不 同,RFC3984上面說FU-As方式打包類型值為28,我不知道這個是否十進制的,如果按照RFC3984上說的NALU頭應該是多少?還是用FU- As方式的FU indicator代替原來的NALU頭。還有這個FU-As方式的頭好像是有兩個值,一個是FU indicator,另外一個是FU header,這兩個值我應該填寫什么?按照我現在填寫的內容,VLC會出現解不出碼的情況,希望斑竹可以幫我回答的細致一點。謝謝了。

A:我覺得 RFC3984 上面說得非常清楚啊。首先你把一個 NALU 的 EBSP 根據需求拆分為多個包,例如 3 個,則:第一個 FU-A 包的 FU indicator 應該是:F = NALU 頭中的 F;NRI = NALU 頭中的 NRI;Type = 28。FU header 應該是:S = 1;E = 0;R = 0;Type = NALU 頭中的 Type。第二個 FU-A 包的 FU indicator 應該是:F = NALU 頭中的 F;NRI = NALU 頭中的 NRI;Type = 28。FU header 應該是:S = 0;E = 0;R = 0;Type = NALU 頭中的 Type。第三個 FU-A 包的 FU indicator 應該是:F = NALU 頭中的 F;NRI = NALU 頭中的 NRI;Type = 28。FU header 應該是:S = 0;E = 1;R = 0;Type = NALU 頭中的 Type。

Q:版主,我按照你的方式分好包發送了,發現VLC不會出現不能解幀的情況了, 但是,還是出不來圖像。我想可能是因為發送序列參數集和圖像參數集的方法不對,他們兩個的長度都很小,只要一個包就可以了,我現在將他們按照singal NALU的方式發送,就是直接在NALU包前加一個RTP的頭,然后發出去。是不是我這樣發參數集存在著問題,反正我這邊VLC是解不了這個參數集,因為參數集解不了,所以下面的幀肯定解不了,所以出不了圖像。麻煩版主再解釋一下如何發參數集。

A:今天剛接受了流媒體的相關培訓。懂得看你的   SDP 了。對 于你的問題,不知道 SPS、PPS 打包是否有問題。按照 RFC3984,而且感覺你打單一包的方式也是錯的。我希望你能通過自己學習的方式去把這個問題弄清楚,因為 RFC3984 里面說得很清楚,請你自己學習學習 RFC3984 吧。既然你在做這個工作,還是應該仔細學習一下 RFC3984。另外, SDP 中的 sprop-parameter-ets=Z0IACpZTBYmI 實際就是 SPS 和 PPS 的 BASE64 轉碼,你不用在碼流中再傳輸 SPS/PPS,直接從 SDP 就可以得到。

A2:1.SDP中已經包括SPS&PPS,碼流中完全可以不用傳輸SPS&PPS2. profile-level-id=42A01E,這是SPS的開頭幾個字節,剩下的在sprop-parameter- ets=Z0IACpZTBYmI, aMljiA==中,BASE64編碼,把“Z0IACpZTBYmI, aMljiA==”反BASE64轉換回去,應該剛好是SPS&PPS的內容3. 打包注意,要求H.264碼流不是byte stream格式的,即沒有0x000001分隔,也沒有插入0x03,具體如何生成,檢查你的編碼器選項。4. packetization-mode=1模式下,要求每個RTP中只有一個NAL單元,或者一個FU,不分段的NAL不做任何修改,直接作為RTP負 載;分段的NAL注意,NAL頭不傳輸,有效負載從NAL頭之后開始,根據NAL頭的信息生成FU的頭兩個字節(相當于NAL頭拆為兩部分),具體生成方 式版主已經講得很清楚。5. RTP的payload type要與SDP中一致,不然解的出才怪


上一篇:Pyhon變量賦值操作實例

下一篇:504. Base 7

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
热re91久久精品国99热蜜臀| 成人www视频在线观看| 91产国在线观看动作片喷水| 久99久在线视频| 久久久国产精品x99av| 亚洲天堂成人在线视频| 欧美中文在线视频| 91av视频在线| 日韩中文字幕国产精品| 国产91精品青草社区| 欧美最猛性xxxxx亚洲精品| 久久国产加勒比精品无码| 亚洲欧美日韩在线高清直播| 欧美视频中文在线看| 精品久久久久久中文字幕大豆网| 国产91露脸中文字幕在线| 黑人巨大精品欧美一区二区| 91久久久久久久久久久| 中文字幕精品网| 亚洲美女免费精品视频在线观看| 永久免费看mv网站入口亚洲| 国产精品丝袜久久久久久高清| 91国产一区在线| 精品久久久久久中文字幕大豆网| 亚洲综合成人婷婷小说| 日韩成人在线视频网站| 国内精品久久久久影院优| 97久久精品视频| 91啪国产在线| 欧美激情一级欧美精品| 福利视频第一区| 欧美老女人性生活| 欧美最顶级丰满的aⅴ艳星| 欧美一区二区影院| 午夜精品久久久久久久99热浪潮| 亚洲免费视频观看| 亚洲第一福利网| 国产视频久久久久| 亚洲黄一区二区| 福利视频第一区| 九九热视频这里只有精品| 成人午夜一级二级三级| 欧美体内谢she精2性欧美| 欧美精品在线第一页| 亚洲欧美成人一区二区在线电影| 4438全国亚洲精品在线观看视频| 日韩国产精品亚洲а∨天堂免| 亚洲欧美一区二区三区在线| 欧美日韩亚洲91| 国产精品成人免费电影| 欧美日韩国产成人在线| 日韩精品在线视频| 欧美日韩中文字幕综合视频| 在线观看成人黄色| 日韩欧美中文在线| 久久精品亚洲精品| 亚洲久久久久久久久久| 日韩av免费在线| 国产精品美女无圣光视频| 在线成人免费网站| 97人人爽人人喊人人模波多| 国产精品视频一区国模私拍| 97精品一区二区三区| 免费成人高清视频| 欧美国产精品人人做人人爱| 精品久久久久久国产| 成人午夜黄色影院| 日本欧美一二三区| 国产精品美腿一区在线看| 欧美国产精品va在线观看| 精品人伦一区二区三区蜜桃网站| 韩国19禁主播vip福利视频| 亚洲精品欧美日韩| 66m—66摸成人免费视频| 91精品国产乱码久久久久久久久| 欧美日韩激情小视频| 亚洲视频777| 色综合久久天天综线观看| 韩日欧美一区二区| 日韩电影中文字幕在线观看| 国产成人综合av| 亚洲成年网站在线观看| 国产精品欧美日韩一区二区| 操91在线视频| 97色伦亚洲国产| 人妖精品videosex性欧美| 久久久久国产精品www| 亚洲肉体裸体xxxx137| 午夜欧美大片免费观看| 色婷婷av一区二区三区在线观看| 国产日韩精品一区二区| 91影视免费在线观看| 亚洲欧美中文日韩在线v日本| 97超级碰碰人国产在线观看| 日韩在线观看免费全| 亚洲综合大片69999| 日韩视频永久免费观看| 亚洲精品国产拍免费91在线| 伊人伊成久久人综合网小说| 夜夜嗨av一区二区三区免费区| 久久久久久18| 日韩av网站在线| 一区二区亚洲精品国产| 亚洲一区二区在线| 亚洲精品v欧美精品v日韩精品| 国产精品久久二区| 亚洲淫片在线视频| 欧美另类老女人| 欧美插天视频在线播放| 尤物九九久久国产精品的特点| 91日本在线观看| 国模精品视频一区二区| 久久影视电视剧凤归四时歌| 18一19gay欧美视频网站| 亚洲国产另类 国产精品国产免费| 中文字幕欧美精品日韩中文字幕| 国产精品福利久久久| 美女扒开尿口让男人操亚洲视频网站| 久久精品国产一区二区电影| 亚洲精品久久久久久久久久久久| 亚洲欧美中文在线视频| 亚洲欧美国产一本综合首页| 成人精品视频99在线观看免费| 国产女精品视频网站免费| 亚洲精品一区av在线播放| 中文字幕日韩综合av| 成人精品一区二区三区电影黑人| 国产成人精品在线播放| 欧美性一区二区三区| 狠狠躁夜夜躁人人爽超碰91| 久久久久久69| 精品视频久久久久久| 亚洲iv一区二区三区| 国产综合视频在线观看| 国产精品女人久久久久久| 国产精品18久久久久久首页狼| 91亚洲精品久久久久久久久久久久| 久久精品久久久久| 欧美一区二区三区图| 国外成人免费在线播放| 日本成人免费在线| 成人av在线天堂| 日本亚洲欧美三级| 久久亚洲影音av资源网| 欧美性猛交xxxx乱大交蜜桃| 日韩av影院在线观看| 色中色综合影院手机版在线观看| 国产精品欧美亚洲777777| 91老司机在线| 国语自产精品视频在线看抢先版图片| 国产999精品久久久影片官网| 久久精品免费播放| 欧美激情久久久久久| 日韩av男人的天堂| 亚洲第一精品久久忘忧草社区| 欧美夫妻性视频| 国产精品热视频| 日本中文字幕久久看| 久久久噜久噜久久综合| 日韩欧美精品网站| 在线亚洲男人天堂| 日韩视频免费中文字幕| 日韩精品视频免费| 日本精品久久久久影院|