JRTPLIB3.5.0中文简要翻译(一)
JRTPLIB3.5.0中文简要翻译(一)
版权声明:
THE SOFTWARE IS PROVIDED ”AS IS”, WITHOUT WARRANTY OF ANYKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
本文介绍了如何使用JRtpLib3.5.0库中的函数和类对象。
1、RTP
1.1、初始化
生成RTPSession对象:RTPSession Session
初始化RTPSession:Session.Create(RTPSessionParams, RTPUDPv4TransmissionParams ),RTPSessionParams的关键作用就是设置时间戳,形式如下:
RTPSessionParams SessionParams;
SessionParams.SetOwnTimestampUnit(1.0/8000.0)(1/8000表示:当RTP会话传输8000HZ数据的时间戳)
RTPUDPv4TransmissionParams表示传输协议采用UDP、IP采用IPV4时端口参数设置。形式如下:
RTPUDPv4TransmissionParams t ransparams ;
t ransparams . Se tPortbas e ( 8 0 0 0 ) ;(8000表示端口号)。
注意:Create一个重载函数,有多种形式。而第二个参数的形式根据传输协议和IP地址版本来定。
Session对象创建示例:
RTPSession session; int Status = session.Create(SessionParams,ransparams ); if(Status < 0) { std::err<<RTPGetErrorString(Status)<<std::endl; exit(-1); } |
u _i n t 8 _t l o c a l i p [ ]={1 2 7 , 0 , 0 , 1 }; s td : : c e r r << RTPGetErrorString ( s t a t u s ) << s td : : endl ; |
2、数据发送
初始化后,接下来可以调用 RTPSession 类的数据发送函数 SendPacket(),向所有目的地址发送流媒体数据。这是一个重载函数,具有多种调用形式(参看 RTPSession 类对该函数的定义),例如在下面的调用形式:
int SendPacket(void *data,int len,unsigned char pt,bool mark,unsigned long timestampinc);
其中第一个参数是待发送的数据缓冲区地址,第二个参数是待发送数据的长度,后面依次是 RTP 负载类型、标识和时基增量。
对于同一个 RTP 会话双方,负载类型、标识和时戳增量相同,可以对它们提前设置,调用 RTPSession 类的 SetDefaultPayloadType()、SetDefaultMark()和SetDefaultTimeStampIncrement()函数就可实现。在设会话双方,负载类型、标识和时戳增量,就可以使用SendPacket的简化类型:SendParket(void *data, int len)。
3、数据接收
接收实时流媒体数据,通过调用 RTPSession 类的 PollData()函数来接收收到的 RTP 或RTCP 数据报。同 一个RTP 会话中允许有多个参与者( 源),通 过调用GotoFirstSourceWithData()和 GotoNextSourceWithData()函数来实现源的遍历,通过 GetNextPacket()函数提取 RTP 数据包。数据包接受以RTPSession的成员函数BeginDataAccess开始、EndDataAccess结束示例:
sess.BeginDataAccess(); if (sess.GotoFirstSourceWithData()) { printf("Got packet !\n"); delete pack; delete pack; } } sess.EndDataAccess(); |
4、数据传输结束,释放资源
RTPTime(10.0);//释放资源最多等待十秒
sess.BYEDestroy(delay, Time' s up,9);//释放占有的