ngraziano / sharprtsp Goto Github PK
View Code? Open in Web Editor NEWA RTSP handling library
License: Other
A RTSP handling library
License: Other
Do not know how to handle : ANNOUNCE rtsp://1.2.3.34:554/live RTSP/1.0
can use this project for audio file with g711 format transfer?
I am finding a solution to live stream video from RTP/RSTP. How can we combine this with PushContentStream? So in Received_SPS_PPS, Received_NALs, ... instead of store binary to files, just convert to streamable binary and write it to http response?
Hello,
we encounter an issue when we use live555 proxy for RTSP.
when use it the rtp_marker is always at 0.
we try without using live555 proxy on the same camera and it send us 0 and 1 when it need, but this info is always at 0 when we use the proxy.
thank you for your time.
Samuel
Hi,
Do you plan to add any documentation or implementation example ?
Hello,
I am using ShartRTSP to create an RTSP server.
RtspCameraExample works out-of-the-box: it is nice and clear.
About encoders:
UDP Write Exception System.Net.Sockets.SocketException (0x80004005): A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself
Therefore I would like to use it with a lossy h264 encoder on Windows, but I don't know what to look for or how to do.
Any suggestions / examples / suggested libraries / Nugets / documents to read about?
Thank you
Just a quick thank you for making and maintaining such a great package! Code is so nice and easy to understand has helped me with countless experiments, thanks again!
Hi,
I build project RtspCameraExample success and then I open connect to rtsp://10.30.176.31:8554 via VLC
I think it will show live images YUV type - same video, that project generate from code.
However VLC nothing show any thing,
So could you help how to show streaming this images on VLC with RTSP.
Thanks and Best Regards!
SharpRTSP's CameraExample does not work with Janus. Every other stream i've tested works on Janus.
Is there anything non standard done in SharpRTSP with RTSP streams ? It does work with VLC, live555 RTSP Proxy, KMP, webrtc-streamer (this one transcode from H264 to VP8, Janus does not). I'm struggling with this since a few days, I thought the problem came from UDP (as Janus only support UDP).
Janus' Github: https://github.com/meetecho/janus-gateway
webrtc-streamer's Github: https://github.com/mpromonet/webrtc-streamer
Hi,
I've been trying to add a header extension in the CCTV RTSP camera and client example without any luck so far. Have anyone made a working example of this?
I'm trying to add custom metadata to the h264 stream.
First of all I would like to say great project...!
I have my own @ https://net7mma.codeplex.com/
Anyway in https://github.com/ngraziano/SharpRTSP/blob/master/RtspMultiplexer/TcpToUdpForwader.cs
You are sending TCP ALF frame headers to the UDP EndPoint...
if (e == null)
throw new ArgumentNullException("e");
Contract.EndContractBlock();
try
{
RtspData data = e.Message as RtspData;
if (data != null)
{
byte[] frame = data.Data;
if (data.Channel == this.SourceInterleavedVideo)
{
ForwardVUdpPort.BeginSend(frame, frame.Length, new AsyncCallback(EndSendVideo), frame);
}
}
}
catch (Exception error)
{
_logger.Warn("Error during frame forwarding", error);
}
Should be something like
if (e == null)
throw new ArgumentNullException("e");
Contract.EndContractBlock();
try
{
RtspData data = e.Message as RtspData;
if (data != null)
{
byte[] frame = data.Data;
if (data.Channel == this.SourceInterleavedVideo)
{
//Don't send TCP ALF to UDP EndPoints, Only skip when not sending a 'chunk' of a frame...
ForwardVUdpPort.BeginSend(frame, 4, frame.Length - 4, new AsyncCallback(EndSendVideo), frame);
}
}
}
catch (Exception error)
{
_logger.Warn("Error during frame forwarding", error);
}
You might also have to move the 'State' to the RtspData class so you would be able to check if it's part of a 'JUMBO' Frame or not... e.g. if you are Receiving 65535 and the chunk received is not complete and only has 65000 bytes of data you may have to combined it with the next chunk and not skip the ALF offset...
Viva la resistance~!
v//
if (rtp_transport == RTP_TRANSPORT.UDP)
{
video_udp_pair = new Rtsp.UDPSocket(40000, 41000); //video_udp_pair = new Rtsp.UDPSocket(50000, 51000);
video_udp_pair.DataReceived += Rtp_DataReceived;
video_udp_pair.Start(); // start listening for data on the UDP ports
audio_udp_pair = new Rtsp.UDPSocket(50000, 51000);
audio_udp_pair.DataReceived += Rtp_DataReceived;
audio_udp_pair.Start(); // start listening for data on the UDP ports
}
I tested with VLC Stream Server.
VLC Stream Server uses UDP Streaming, so I can find a bug in sample code.
The video_udp_pair Socket Port number is same as the audio_udp_pair Socket Port number.
Can you fix it?
The RTSP PLAY response does not include the RTP-Info header. This header includes the initial RTP time stamp and sequence number. It is important, the absence of this header can cause interop problems.
Also the Transport header in the SETUP response should include the ssrc parameter (which specifies the SSRC of the RTP packets.)
Thank you for sharing this ... i used with some changes in the test card so i can use different font style and characters
TestCard.zip
So, my idiots question. How can i play rtsp stream in MediaElement uwp?
If camera supportst only "Basic" authorisation, RtspClientExample does not work. You should check for "Basic" in Rtsp_MessageReceived (message looks like: "WWW-Authenticate: Basic realm="xxxxxxx"...). We could extend 'GenerateDigestAuthorisation' like this:
` // Generate Digest Authorization
public string GenerateDigestAuthorization(string username, string password,
string realm, string nonce, string url, string command, bool basic) {
if (username == null || username.Length == 0) return null;
if (password == null || password.Length == 0) return null;
if (realm == null || realm.Length == 0) return null;
if (basic == true) return ("Basic " + System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password)));`
Hi
This is a great project and has helped me begin to learn the concepts of Rtsp server especially around the messaging.
My colleague and I are both looking at using this project to see if we can host our external ffmpeg encoded h264 stream, and have 3rd party players also, to playback this stream.
We can playback our h264 stream using the RtspClientExample and using ffplay to play the output .264 file.
But we cannot playback PULL stream using 3rd party players such as VLC or ffmediaElement as we need to have a solution that allows any client including 3rd partys to playback the stream.
This is my ffmpeg code:
.\ffmpeg -protocol_whitelist file,udp,rtp -re -i camera99.sdp -vcodec copy -muxdelay 0.1 -threads 4 -sc_threshold 0 -rtsp_transport udp -f rtsp rtsp://127.0.0.1:8554/PUSH/myStream
I don't know how to playback this stream using 3rd party players such as VLC or ffmediaElement ??
I have camera taking pictures to directory that I would like to stream. How do I stream jpg files using your RTSP server implementation?
I like very much of your RTSP client and server library. Camera sample works nicely with VLC player.
Good afternoon!
How to create bitmap from an array byte?
I tried to get using this method from the project. No result.
// Output an array of NAL Units.
// One frame of video may encoded in 1 large NAL unit, or it may be encoded in several small NAL units.
// This function writes out all the NAL units that make one frame of video.
// This is done to make it easier to feed H264 decoders which may require all the NAL units for a frame of video at the same time.
// When writing to a .264 file we will add the Start Code 0x00 0x00 0x00 0x01 before each NAL unit
// when outputting data for H264 decoders, please note that some decoders require a 32 bit size length header before each NAL unit instead of the Start Code
private void Output_NAL(List<byte[]> nal_units)
{
if (fs == null) return; // check filestream initialised
int bytes_written = 0;
foreach (byte[] nal_unit in nal_units)
{
fs.Write(new byte[] { 0x00, 0x00, 0x00, 0x01 }, 0, 4); // Write Start Code
fs.Write(nal_unit, 0, nal_unit.Length); // Write NAL
bytes_written += (nal_unit.Length + 4);
}
fs.Flush(true);
}
i'm trying to resize video in RTSPCameraExample but it not working then i found that video size has send to rtsp client by sps and pps info, it seem to be too hard for me, please guide me how to resize video header in sps/pps info.
Thank & Best Regards
I'm using sharprtsp lib to build an application that consumes video from VLC RTSP server.
I cannot send a correct Receiver Report to VLC server to keep the connection alive more than one minute.
Please help me to solve it
Hi,
I am using SharpRTSP to create RTSP streams (using the example RtspCameraExample).
Sadly I need UDP support too, and I am looking where to add it.
I think what is missing is an implementation of IRTSPTransport, like RTSPTCPTransport but for UDP.
In the file RtspServer.cs, we got this :
private void AcceptConnection()
{
try
{
while (!_Stopping.WaitOne(0))
{
TcpClient oneClient = _RTSPServerListener.AcceptTcpClient();
Console.WriteLine("Connection from " + oneClient.Client.RemoteEndPoint.ToString());
var rtsp_socket = new RtspTcpTransport(oneClient);
RtspListener newListener = new RtspListener(rtsp_socket);
newListener.MessageReceived += RTSP_Message_Received;
//RTSPDispatcher.Instance.AddListener(newListener);
newListener.Start();
}
}
catch (SocketException error)
{
// _logger.Warn("Got an error listening, I have to handle the stopping which also throw an error", error);
}
catch (Exception error)
{
// _logger.Error("Got an error listening...", error);
throw;
}
}
This seems to be the code that accepts a newly connected client. From what I understood, it assumes that the client is using TCP before the RTSP message exchange.
Am I on the right way ? Do you have any additional informations that could be useful ?
Thanks
Hello we have an LTE connection, how do we connect and capture the stream
Hi Nicolas,
Thank you for sharing this great library!
It seems like there is a small error in the RtspClientExample . I have an AXIS IP camera which requires user/pwd authorization. The example code was giving me a 401 error after sending the PLAY request.
I added a "digest_authorization" string to the "play_message" header and now it works perfectly.
Is it an idea to support ONVIF?
Is it supports Backchannel audio sending to camera?.
It will be great if you could provide me code snippets or samples for the same.
Hi
in my camera setup I have an option "Enable RTSP connection without authentication" when enable this option program runs correctly but when disable DESCRIBE message return 401 code ("Unauthorized")
how can I set UserName and Password in commands?
Surprised this project doesn't have it, is there some reason?
I got a mjpeg rtsp stream. How can I extract and export the frame data?
the sdp data of the stream
v=0
o=- 11814266 1 IN IP4 192.168.1.169
s=RTSP/RTP stream from IPNC
i=mjpeg
t=0 0
a=tool:LIVE555 Streaming Media v2015.08.07
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:RTSP/RTP stream from IPNC
a=x-qt-text-inf:mjpeg
m=video 0 RTP/AVP 26
c=IN IP4 0.0.0.0
b=AS:12000
a=control:track1
Hi! Do you know a way to save each frame as image to disk?
I want to set up an RTSP redirect only so I can use a different url for the streams such as rtsp://streams.something.com:554/stream1 will redirect to rtsp://232.232.54.23/stream1. Does this library support such a scenario or can that be accomplished with a web server?
Looking at the RtspClientExample it shows a test url of:
// VLC Server Tests // String url = "rtsp://192.168.1.150:8554/test";
Could you let me know how you have VLC server configured at the command line to allow the connection please?
I need to stream usb camera over lan. How can i do that with this script? I'm too new for this.
Hi! Is it possibile, with this library, to publish rtsp stream to a RTSP server?
Hi, how can I calculate the amount of frame that has already been recorded in the physical file? Inside the event 'RTSPClient.Received_NALs_Delegate (c_Received_NALs)' and after having recorded X frames, close the connection with the camera?
tkx advanced!
So if i want to stream a video with a presentation inside is possible?
Hello,
I've two questions:
-How to stream a webcam source ?
-Is it possible to stream in a 1080p resolution for a production stage website ?
Thank you !
i see this in your code"send the whole NAL. With RTP over RTSP we do not need to Fragment the NAL (as we do with UDP packets or Multicast)",
and i do not quite understand, can you help me out please?thanks !
Hi @ngraziano. Thanks for this great library! I have the following use case and wondering where to start:
video
player.Is this possible with SharpRTSP? Thanks.
Hi Nicolas,
Thanks for sharing this useful library!
A quick question regarding using this library, could it save each frame into a still image instead of .264 file?
Process_RTP_Frame()
writes file stream as NAL, How can I extra the image from the raw bytes?
Thanks and regards,
Yong
Hi,
I try to send the stream of a local webcam. To do so, I converted every image from RGB to YUV an stored the resulting picture in a byte array. I used the resulting array to replace the suv_data byte array from the RTSPCameraExample to send this via the rtsp stream.
When I open the resulting stream the image doesn't seem to be the original image.
Is there any problem when converting rgb images and use them for the stream?
Hello.
I am using the RTSP Client Example to record the video of the network camera.
.264 file is generated, but the speed of the video is about 30 times.
Camera images are output at 1 fps, but in the generated file it is 25 to 30 fps.
Do you know what is wrong?
Are there any examples using this library of a single rtsp server providing multiple camera streams?
I'm sorry, my English is not good
Can add an exception handling
eg:
c.Received_Error += exception => {
// exception handling
}
Within describeResponse the SDP is read and parsed.
I see no way to get o not parsed information.
For example: I need the of
a=framerate:XX
because the fr is not always provided with the SPS
With this library, can I streamming a mp3 file to HTML5 player via rtp/rtsp protocol?
I'm using ShartRTSP to connect to HIPCAM camera by rtsp protocol.
The handshake of rtsp is so well and I receive packet from rtsp server. But around 1 or 2 minutes later SharpRTSP cannot get data from network.
I try to print out the debug message and see that the SharpRTSP send GET_PARAMETER every timeout / 2 interval. But without OK message response , SharpRTSP continue to send GET_PARAMETER again and this cause the problem.
Please take a look the debug message in the attached file.
rtspinfo.txt
I see in the RTSP Client Example
We can extend the following part
private void Rtsp_client_DataReceived(object sender, Rtsp.RtspChunkEventArgs e)
{
// RTP Packet Header
// 0 - Version, P, X, CC, M, PT and Sequence Number
//32 - Timestamp
//64 - SSRC
//96 - CSRCs (optional)
//nn - Extension ID and Length
//nn - Extension header
int rtp_version = (e.Message.Data[0] >> 6);
int rtp_padding = (e.Message.Data[0] >> 5) & 0x01;
int rtp_extension = (e.Message.Data[0] >> 4) & 0x01;
int rtp_csrc_count = (e.Message.Data[0] >> 0) & 0x0F;
int rtp_marker = (e.Message.Data[1] >> 7) & 0x01;
int rtp_payload_type = (e.Message.Data[1] >> 0) & 0x7F;
uint rtp_sequence_number = ((uint)e.Message.Data[2] << 8) + (uint)(e.Message.Data[3]);
uint rtp_timestamp = ((uint)e.Message.Data[4] <<24) + (uint)(e.Message.Data[5] << 16) + (uint)(e.Message.Data[6] << 8) + (uint)(e.Message.Data[7]);
uint rtp_ssrc = ((uint)e.Message.Data[8] << 24) + (uint)(e.Message.Data[9] << 16) + (uint)(e.Message.Data[10] << 8) + (uint)(e.Message.Data[11]);
int rtp_payload_start = 4 // V,P,M,SEQ
+ 4 // time stamp
+ 4 // ssrc
+ (4 * rtp_csrc_count); // zero or more csrcs
uint rtp_extension_id = 0;
uint rtp_extension_size = 0;
if (rtp_extension == 1)
{
rtp_extension_id = ((uint)e.Message.Data[rtp_payload_start + 0] << 8) + (uint)(e.Message.Data[rtp_payload_start + 1] << 0);
rtp_extension_size = ((uint)e.Message.Data[rtp_payload_start + 2] << 8) + (uint)(e.Message.Data[rtp_payload_start + 3] << 0);
rtp_payload_start += 4 + (int)rtp_extension_size; // extension header and extension payload
}
to get the eventId and endofEvent and such things.
Since you must be having better knowledge
What all you say?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.