前段时间写了个测试程序,使用jrtplib,把h264打成标准的rtp数据包,并能通过vlc,mpalyer等播放器播放出来。这中间主要的难点是解析h264数据中的nal单元,并把nal单元打成rtp包,之后的事情都是jrtplib库做了。然后就可以通过播放器播放出来了。
使用播放器播放时使用以下命令:
mplayer player.sdp
或者
用vlc打开player.sdp
对于rtp打包不懂的同学,可以仔细看下这个包里面的文档和一个rtp打包的代码,这是我上传的资源。
http://download.csdn.net/detail/xyyangkun/6990313
主要的代码贴出来:
/*
* test_jrtp.cpp
*
* Created on: 2014-2-19
* Author: xy
*/
#include "rtpsession.h"
#include "rtpsessionparams.h"
#include "rtpudpv4transmitter.h"
#include "rtpipv4address.h"
#include "rtptimeutilities.h"
#include "rtppacket.h"
#include
#include
#include "h264.h"
#define SSRC 100
#define DEST_IP_STR "127.0.0.1"
#define DEST_PORT 9000
#define BASE_PORT 2222
using namespace jrtplib;
int main(int argc, char** argv)
{
RTPSession session;
RTPSessionParams sessionparams;
sessionparams.SetOwnTimestampUnit(1.0/90000.0);
RTPUDPv4TransmissionParams transparams;
transparams.SetPortbase(8000);
int status = session.Create(sessionparams,&transparams);
if (status < 0)
{
std::cerr << RTPGetErrorString(status) << std::endl;
exit(-1);
}
uint8_t localip[]={127,0,0,1};
RTPIPv4Address addr(localip,9000);
status = session.AddDestination(addr);
if (status < 0)
{
std::cerr << RTPGetErrorString(status) << std::endl;
exit(-1);
}
session.SetDefaultPayloadType(96);
session.SetDefaultMark(false);
session.SetDefaultTimestampIncrement(90000.0 /25.0);
RTPTime delay(0.040);
RTPTime starttime = RTPTime::CurrentTime();
NALU_HEADER*nalu_hdr;