JPEG over RTP when resolution larger then 2040*2040

參考 rfc2435,當使用 RTP 傳送封包時,此處定義的長寬最大值為2040。那麼當超過 2040 時,應該如何實作呢?? 以下提供幾種作法當作參考。

一、參考 rfc5371,使用 JPEG2000 的作法
作法是在 SDP 內加以描述,範例如下:
m=video 49170/2 RTP/AVP 98
a=rtpmap:98 jpeg2000/90000
a=fmtp:98 sampling=YCbCr-4:2:0;width=128;height=128

二、參考 ONVIF-Streaming-Spec-v221.pdf 定義的 JPEG over RTP
作法是使用 rfc3550 定義的 RTP Extension,說明如下: 
如果 image size < 2040*2040,那麼使用原本 rfc2435 定義的欄位來放置 width, height。 
如果 image size 超出 rfc2435 限制(大於2040),那麼首先設定 RTP header 中的 X-bit(Extension),表示將使用 RTP 定義的 extension 功能。
接著新增 RTP extension header(ONVIF定義的extension使用0xFFD8當成識別碼),讓接收端了解此RTP會支援 ONVIF 定義的 JPEG over RTP。此部份請參考下圖。
將 rfc2435 所定義的 RTP/JPEG header 的 width, height 設定為 0。
將正確的 width, height 值設定在 JPEG spec 所定義的 SOF marker 中,並將此 marker 加入 RTP extension payload。
接收端若在 decode 時發現此封包已經設定 X-bit,而且width/height=0,便應該要知道需要去解開 extension payload 中的 SOF marker,並由此得知正確的 width/height.
需注意的是此處的 SOF marker 並非存在於 JPEG 中,而是應該存在於 RTP extension payload。實作時可以直接複製 JPEG 的 SOF marker,當成 RTP extension 即可。  

以下摘錄一個 SOF marker 的例子
FF C0 00 11 08 06 00 08 00 03 01 22 00 02 11 01 03 11 01
SOF marker其說明如下:
標記固定值為 0xFFCO
長度(包含長度本身,但不包含 FFC0)  0x0011=17
精度,每個顏色分量每個圖元的位元數 (bits per pixel per color component)  0x08
圖像高度 0x0600 = 1536
圖像寬度 0x0800 = 2048
顏色分量數(number of color components) 0x03
顏色分量信號(for each component) 01 22 00 02 11 01 03 11 01

三、自己訂
在 SDP中,加入 extension attribute,例如:"a=x-CompanyName-Width",

四、其他網路上的用法
透過 Google 大師,發現網路上慣用的用法有 "x-dimensions" 和 "cliprect",不過這部份不確定是參考哪份spec制定而成。

註1:H.264可以直接從 SPS 中取得取得 width/height (pic_width_in_mbs_minus1 與 pic_height_in_map_units_minus1),並不一定要從 RTP header中得知,因此並不會有上述 2040 上限的問題。

註2:"x-dimensions" 實作在 live555 的 MediaSession.cpp,摘錄 openRTSP 說明如下:
Alternatively, if the session's SDP description contains the media-level attribute "a=x-dimensions: ,", then these values will be used instead (in which case you won't need to use the "-w" and "-h" options). Similarly, if the session's SDP description contains the media-level attribute "a=x-framerate: ", then this value will be used instead (in which case you won't need to use the "-f" option).

參考資料

  1. RTP Payload Format for JPEG 2000 Video Streams (2008/10)
        http://tools.ietf.org/html/rfc5371
  2. RTP Payload Format for JPEG-compressed Video (1998/10)
        http://tools.ietf.org/html/rfc2435
  3. ONVIF ONVIF-Streaming-Spec-v221.pdf
        chapter 5.1.4 JPEG over RTP
  4. RTP: A Transport Protocol for Real-Time Applications
        http://www.ietf.org/rfc/rfc3550.txt
  5. http://en.wikipedia.org/wiki/JPEG
    f. http://el.mdu.edu.tw/datacos/09922312044A/JPEG002.pdf 

Referenced from:http://albert-oma.blogspot.com/2013/05/jpeg-extension-when-resolution-20402040.html

本文链接地址:https://const.net.cn/473.html

标签: mjpeg

添加新评论