MainForm.CS类
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using jn.isos.socket;
using jn.isos.socket.client;
using jn.isos.socket.common;
namespace jn.isos.video
{
public partial class MainForm : Form
{
private RtspClient m_client;
private string m_sessionID="";
private int m_seq;
public MainForm()
{
InitializeComponent();
m_client = new RtspClient();
m_client.ReceiveDataEventHandler += ReceiveDataEventHand;
}
private void btnLink_Click(object sender, EventArgs e)
{
m_client.Open("127.0.0.1", 554);
}
private void btnOptions_Click(object sender, EventArgs e)
{
string msg = "OPTIONS " + "rtsp://192.168.43.102/videodevice " + " RTSP/1.0\r\n";
msg += "CSeq: "+m_seq++ +" \r\n";
msg += "User-Agent: shawn RTSP options\r\n";
msg += "\r\n";
m_client.SendData(msg);
}
void ReceiveDataEventHand(string id, string data)
{
BeginInvoke(new ReceiveDataCallBack(handleReceiveData), id, data);
}
void handleReceiveData(string id, string data)
{
txtInfo.Text = data + "\r\n";
//解析m_sessionID
int index = txtInfo.Text.IndexOf("Session");
if (-1 != index)
{
String tem = txtInfo.Text.Substring(index, 30);
int start = tem.IndexOf(' ');
int end = tem.IndexOf('\r');
m_sessionID = tem.Substring(start, end - start);
}
}
delegate void ReceiveDataCallBack(string id, string data);
private void btnDescrib_Click(object sender, EventArgs e)
{
string msg = "DESCRIBE rtsp://192.168.43.102/videodevice RTSP/1.0\r\n";
msg += "CSeq: " + m_seq++ + "\r\n";
msg += "Accept: application/sdp\r\n";
msg += "User-Agent: Lavf59.27.100\r\n";
msg += "\r\n";
m_client.SendData(msg);
}
private void btnSetup_Click(object sender, EventArgs e)
{
string msg = "SETUP rtsp://192.168.43.102:554/videodevice/realvideo RTSP/1.0\r\n";
msg += "Transport: RTP/AVP/TCP;unicast;interleaved=0-1\r\n";
msg += "CSeq: " + m_seq++ + "\r\n";
msg += "User-Agent: Lavf59.27.100\r\n";
msg += "Session: " + m_sessionID + "\r\n";
msg += "\r\n";
m_client.SendData(msg);
}
private void btnPlay_Click(object sender, EventArgs e)
{
string msg = "PLAY rtsp://192.168.43.102/videodevice RTSP/1.0\r\n";
msg += "CSeq: " + m_seq++ + "\r\n";
msg += "Session: "+m_sessionID+"\r\n";
msg += "Range: npt=0.000-\r\n";
msg += "x-dynamic-rate: 1\r\n";
msg += "User-Agent: QuickTime/7.7.1 (qtver=7.7.1;os=Windows NT 5.1Service Pack 3)\r\n";
msg += "\r\n";
m_client.SendData(msg);
}
private void btnTeardown_Click(object sender, EventArgs e)
{
string msg = "TEARDOWN rtsp://192.168.43.102/videodevice RTSP/1.0\r\n";
msg += "CSeq: " + m_seq++ + "\r\n";
msg += "Session: " + m_sessionID + "\r\n";
msg += "\r\n";
m_client.SendData(msg);
}
}
}
RtspClient.cs类
using jn.isos.socket.common;
using System;
namespace jn.isos.video
{
public class RtspClient
{
private AsynSocket m_socket;
public delegate void ReceiveDataEventHand(string id, string data);
public ReceiveDataEventHand ReceiveDataEventHandler;
public void Open(string ip, int port)
{
try
{
m_socket = new AsynSocket();
m_socket.Role = Role.Client;
m_socket.Open();
m_socket.LinkObject.Connect(ip, port);
m_socket.OnReceive += new AsynSocket.ReceiveStringDataEventHandler(m_socket_OnReceive);
m_socket.SetKeepAlive(ref m_socket, 5000, 1000);
m_socket.Receive();
}
catch (Exception e)
{
}
}
void m_socket_OnReceive(string id, string data)
{
if(ReceiveDataEventHandler != null)
{
ReceiveDataEventHandler(id, data);
}
}
public void SendData(string msg)
{
m_socket.Send2(msg);
}
}
}