码迷,mamicode.com
首页 > 其他好文 > 详细

RTPS流媒体简介

时间:2015-01-21 11:37:26      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

  RTSP数据流简介:
            RTSP_HEADER + RTP_HEADER + 1、视频:NALU_HEADER(type*) + FU_HEADER
            2、音频: + 音频数据;
 
            RTSP_HEADER payloadLen = RTSP_HEADER后的包长度;
            dollar = 36(0x24);

 

            RTP_HEADER payloadtype = 数据类型(H264 、G711_A、G711_U、MPEG.......);

timeStamp = 当前包的时间戳;

version = 2;

sequenceNumber = 包序号,递增+1;


            NALU_HEADER type(NAL_UNIT_TYPE) = 1、SEQ_PARAMETER_SET_RBSP(7):关键帧,取帧的高度和宽度;
            2、SLICE_LAYER_WITHOUT_PARTITIONING_RBSP至SINGLE_TIME_AGGREGATION_PACKET_A之间时,数据前需要加上RTP_START_CODE;
 

           FU_HEADER start_bit = 1、第一个包,需要加上RTP_START_CODE + (FU_HEADER.nri << 5) | (FU_HEADER.forbidden_zero_bit << 6) | FU_HEADER.type; 

           

  音频数据:每个包前加上RTP_AUDIO_CODE;

class RTSP_HEADER
{
public byte dollar; /* 8, $:dollar sign(24 decimal) */
public byte channelid; /* 8, channel id */
public short payloadLen; /* 16, payload length */

}


class RTP_HEADER
{
public byte csrccount;// 4位Bit;
public byte extension;// 1位Bit;
public byte padding;// 1位Bit;
public byte version;// 2位Bit;
public byte payloadtype;// 7位Bit;
public byte marker;// 1位Bit;
public short sequenceNumber;
public long timeStamp;
public int ssrc;

}


class NALU_HEADER
{
public byte type;// :5
位Bit;
public byte nri;// :2位Bit;
public byte forbidden_zero_bit;// :1位Bit;

}


class FU_HEADER
{
public byte type;// :5位Bit; //和原始数据中nalu中的type一样
public byte reserve_bit;// :1位Bit; //保留位,必须是0
public byte end_bit;// :1位Bit; //指示是不是这一帧的最后一个分片
public byte start_bit;// :1位Bit; //指示是不是这一帧的第一个分片

}


public final byte[] RTP_START_CODE = new byte[] { 0x00, 0x00, 0x00, 0x01 };
public final byte[] RTP_AUDIO_CODE = new byte[] { 0x00, 0x01, (byte) 0xA0, 0x00 };

RTPS流媒体简介

标签:

原文地址:http://blog.csdn.net/qingxing123/article/details/42965407

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!