Giter VIP home page Giter VIP logo

sharprtsp's Issues

webapi2 PushContentStream

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?

rtp_marker is missing when using proxy live555

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

Documentation ?

Hi,
Do you plan to add any documentation or implementation example ?

(Not issue) Suggestion to use different h264 encoder

Hello,
I am using ShartRTSP to create an RTSP server.
RtspCameraExample works out-of-the-box: it is nice and clear.

About encoders:

  • Tiny: resolution limited to 192x128
  • Simple: lossless and seems to create too large UDP dataframe with higher resolution, so it fails.
    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

Thanks!

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!

how to show streaming this images on VLC with RTSP.

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 not working with Janus Gateway

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

Add RTP Header extension

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.

TcpToUdpForwarder

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//

RtspClientExample/RTSPClient.cs UDP Socket Port Number Problem

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?

RTP-Info header is missing

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.)

MediaPlayer

So, my idiots question. How can i play rtsp stream in MediaElement uwp?

FFMpeg => RtspMultiplexer return 400 bad request

1、 Start RtspMultiplexer

2、 Use Command: ffmpeg -i CollectionMercy.flv -vcodec copy -acodec copy -
rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554

Server Console:
Image of RtspMultiplexer Console

FFMpeg Console:
Image of Cmd FFMpeg Console

Image of Cmd FFMpeg Console

Could you tell me how to use? Thank you!

Rtsp Basic authorisation

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)));`

Unable to playback rtsp streams using 3rd party players

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 ??

RTSP server streaming pictures

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.

How to get frame from RTSP stream?

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);
    }

how to resize video size(width, height) in sps header?

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

UDP Support implementation

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

Play message in RtspClientExample is missing authorization

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.

Authentication problem

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?

NuGet Support?

Surprised this project doesn't have it, is there some reason?

How to handle mjpeg RTSP stream?

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

RTSP Redirect

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?

VLC Server Test

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?

Publish stream

Hi! Is it possibile, with this library, to publish rtsp stream to a RTSP server?

Stop record at X frames

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!

Stream webcam in HD

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 !

Authorization and setup

Hi @ngraziano. Thanks for this great library! I have the following use case and wondering where to start:

  1. User selects a CCTV RTSP video stream.
  2. We authenticate against that camera with username/password.
  3. Return stream to the user's browser via WebAPI.
  4. User can play the stream in an HTML5 video player.

Is this possible with SharpRTSP? Thanks.

Save each frame into a still image instead of h264 file

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

Sending RGB images

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?

The frame rate of the recorded video becomes high.

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?

exception handling

I'm sorry, my English is not good
Can add an exception handling

eg:
c.Received_Error += exception => {
// exception handling
}

make "describeResponse" available as member

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

Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.

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

Can you help me in extending to get the eventId,endOfEvent,reserved,volume,eventduration fields

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?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.