jrtplib 发送ps
时间: 2024-02-15 22:58:33 浏览: 24
使用jrtplib发送PS流的步骤如下:
1. 初始化jrtplib库并创建一个RTPSession实例。
2. 设置RTPSession的传输协议类型为PS。
3. 设置RTPSession的传输模式为推送模式。
4. 设置RTPSession的远程地址和端口号。
5. 打开RTPSession。
6. 读取PS文件并将其分成小的NAL单元。
7. 将NAL单元打包成RTP包并发送到远程地址。
8. 关闭RTPSession。
代码示例:
```c++
#include <jrtplib3/rtpsession.h>
#include <jrtplib3/rtpudpv4transmitter.h>
#include <jrtplib3/rtpipv4address.h>
#include <jrtplib3/rtptimeutilities.h>
#include <iostream>
#include <fstream>
using namespace jrtplib;
using namespace std;
int main(int argc, char* argv[])
{
RTPSession session;
RTPUDPv4TransmissionParams transparams;
RTPSessionParams sessparams;
sessparams.SetOwnTimestampUnit(1.0/90000.0);
transparams.SetPortbase(8000);
int status = session.Create(sessparams,&transparams);
if (status < 0)
{
cerr << "ERROR: " << RTPGetErrorString(status) << endl;
return -1;
}
RTPIPv4Address addr("192.168.1.100", 9000);
status = session.AddDestination(addr);
if (status < 0)
{
cerr << "ERROR: " << RTPGetErrorString(status) << endl;
return -1;
}
session.SetDefaultPayloadType(96);
session.SetDefaultMark(false);
session.SetTimestampUnit(1.0/90000.0);
session.SetDefaultTimestampIncrement(3600);
status = session.InitSend();
if (status < 0)
{
cerr << "ERROR: " << RTPGetErrorString(status) << endl;
return -1;
}
ifstream fin("test.ps", ios::binary);
if (!fin.is_open())
{
cerr << "ERROR: cannot open file" << endl;
return -1; }
char nal[1024];
int nal_len = 0;
while (!fin.eof())
{
fin.read(nal + nal_len, 1024 - nal_len);
nal_len += fin.gcount();
char* p = nal;
while (nal_len > 0)
{
int len = 0;
while (len < nal_len && !(p[len] == 0x00 && p[len+1] == 0x00 && p[len+2] == 0x01))
len++;
if (len == nal_len)
{
break;
}
len += 3;
RTPTime delay(0.020);
session.SendPacket((void*)p, len, 96, false, delay);
p += len;
nal_len -= len;
}
}
fin.close();
session.BYEDestroy(RTPTime(10,0),0,0);
return 0;
}
```