RTP 发送PS流工具(已经开源)
rtp接收和发送
·
RTP接收和发送程序
实时传输协议一直在构建之中,此次听雨堂RTP程序增加了一个PS流发送,以便于GB28181 程序作为测试。
对RTP协议的理解越深,越想自己建立一个实时传输协议。
程序界面还是比较粗糙的,等我更新吧,如果做一个界面,可能还是使用QT,因为界面比较繁复,所以暂时没有做这个的打算,还是先使用MFC来做这个。
发送程序
接收程序
增加了几个选项,目前实现了ps流的发送。
代码地址
https://gitee.com/guanzhi0319/rtp。
ps流的发送
CString audio_device_id = audio_device_index_[cb_select_audio_.GetCurSel()];
CString video_device_id = video_device_index_[cb_select_video_.GetCurSel()];
CWnd *pWnd = GetDlgItem(IDC_VIDEO_PRIVIEW);
CRect rc;
pWnd->GetClientRect(&rc);
CString tmp_str;
edit_ip_.GetWindowText(tmp_str);
std::string ipaddress = CStringA(tmp_str).GetString();
edit_port_.GetWindowText(tmp_str);
int port = _ttoi(tmp_str);
live_ts_encoder_ = new LiveRTPUdpEncoder(audio_device_id, video_device_id, 640, 480,
(OAHWND)pWnd->GetSafeHwnd(), rc.right, rc.bottom, ipaddress,
port);
live_ts_encoder_->setStreamType(0);
live_ts_encoder_->Start();
其中setStreamType是最近修改的主要内容,可以设置成为以下几种方式发送,注意还没有写完,目前实现了rtp ovre udp , ps rtp over udp
typedef enum en_stream_type
{
en_rtp,
en_ts_over_rtp,
en_ps_over_rtp,
en_rtmp,
en_rtsp
}en_stream_type;
void LiveRTPUdpEncoder::OnCaptureVideoBuffer(uint8_t *data, int len, unsigned int timestamp, bool isKeyframe)
{
#define D(x) *(data+x)
if (SimpleThread::IsStop()) return;
#if 0
char buffer[32];
sprintf_s(buffer, "QB:%02x %02x %02x %02x %02x %02x",
D(0), D(1), D(2), D(3), D(4), D(5));
OutputDebugStringA(buffer);
return;
#endif
uint8_t* odata = NULL;
int olen = 0;
uint8_t n = D(4) & 0x1f;
int isIFrame = n == 0x07;
switch (v_stream_type)
{
case en_rtp:
odata = data;
olen = len;
break;
case en_ps_over_rtp:
uint8_t* odata;
int olen;
v_ps.packagingPs(isIFrame, timestamp, data, len, &odata, &olen);
break;
}
//timestamp = GetTimestamp();
{
Lock lock(this);
v_rtp.send_video(odata, olen, convertToRTPTimestamp(), isKeyframe);
if (!gVideoBegin)
gVideoBegin = true;
}
if (v_stream_type == en_ps_over_rtp)
delete[]odata;
}
需要修正的:
1 程序启动先把摄像头打开,可以直接显示
2 在没有摄像头的情况下,可以把窗口直播出去。
以上两点会在近期更新
需要增加的
1 需要增加rtmp发送和rtsp发送。
2 接收程序增加存储到磁盘IO的功能,以利于调试。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献3条内容
所有评论(0)