Coder Social home page Coder Social logo

micro-rtsp's Introduction

Micro-RTSP

This is a small library which can be used to serve up RTSP streams from resource constrained MCUs. It lets you trivially make a $10 open source RTSP video stream camera.

Usage

This library works for ESP32/arduino targets but also for most any posixish platform.

Example arduino/ESP32 usage

This library will work standalone, but it is super easy to use if your app is platform.io based. Just "pio lib install Micro-RTSP" to pull the latest version from their library server. If you want to use the OV2640 camera support you'll need to be targeting the espressif32 platform in your project.

See the example platform.io app. It should build and run on virtually any of the $10 ESP32-CAM boards (such as M5CAM). The relevant bit of the code is included below. In short:

  1. Listen for a TCP connection on the RTSP port with accept()
  2. When a connection comes in, create a CRtspSession and OV2640Streamer camera streamer objects.
  3. While the connection remains, call session->handleRequests(0) to handle any incoming client requests.
  4. Every 100ms or so call session->broadcastCurrentFrame() to send new frames to any clients.
void loop()
{
    uint32_t msecPerFrame = 100;
    static uint32_t lastimage = millis();

    // If we have an active client connection, just service that until gone
    // (FIXME - support multiple simultaneous clients)
    if(session) {
        session->handleRequests(0); // we don't use a timeout here,
        // instead we send only if we have new enough frames

        uint32_t now = millis();
        if(now > lastimage + msecPerFrame || now < lastimage) { // handle clock rollover
            session->broadcastCurrentFrame(now);
            lastimage = now;

            // check if we are overrunning our max frame rate
            now = millis();
            if(now > lastimage + msecPerFrame)
                printf("warning exceeding max frame rate of %d ms\n", now - lastimage);
        }

        if(session->m_stopped) {
            delete session;
            delete streamer;
            session = NULL;
            streamer = NULL;
        }
    }
    else {
        client = rtspServer.accept();

        if(client) {
            //streamer = new SimStreamer(&client, true);             // our streamer for UDP/TCP based RTP transport
            streamer = new OV2640Streamer(&client, cam);             // our streamer for UDP/TCP based RTP transport

            session = new CRtspSession(&client, streamer); // our threads RTSP session and state
        }
    }
}

Example posix/linux usage

There is a small standalone example here. You can build it by following these directions. The usage of the two key classes (CRtspSession and SimStreamer) are very similar to to the ESP32 usage.

Supporting new camera devices

Supporting new camera devices is quite simple. See OV2640Streamer for an example and implement streamImage() by reading a frame from your camera.

Structure and design notes

Known Issues

Video is delayed

Most players do a buffering. For example VLC by default sets a cache to 1000ms, resulting in a noticable delay. If you want to remove the delay set the :network-caching=0 - in the UI it's hidden under Show more options.

Issues and sending pull requests

Please report issues and send pull requests. I'll happily reply. ;-)

Credits

The server code was initially based on a great 2013 tutorial by Medialan.

License

Copyright 2018 S. Kevin Hester-Chow, [email protected] (MIT License)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

micro-rtsp's People

Contributors

bartlomiejcieszkowski avatar freedreamer82 avatar geeksville avatar kadavris avatar urako avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

micro-rtsp's Issues

Timestamp overlay

Hi, is there a possibility to add the current timestamp to the streamed video?

Error: no matching function for call to 'OV2640Streamer::OV2640Streamer(OV2640&)'

streamer = new OV2640Streamer(cam); // our streamer for UDP/TCP based RTP transport

While trying to build this example using pio, I get the following error: error: no matching function for call to 'OV2640Streamer::OV2640Streamer(OV2640&)'
platformio.ini file contents I used:

[env:esp32cam]
platform = espressif32
board = esp32cam
framework = arduino
lib_deps = Micro-RTSP, ESP8266_SSD1306

It looks like there is no constructor defined that takes only one argument - the cam object.

Please advise on how to best get past this error.

Compilation fail with warnings.

Hi,

looks like Micro-RTSP is not compatible with the latest version of ESP32 Core.

c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\OV2640.cpp:37:1: warning: missing initializer for member 'camera_config_t::fb_location' [-Wmissing-field-initializers]
 };
 ^
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\OV2640.cpp:37:1: warning: missing initializer for member 'camera_config_t::grab_mode' [-Wmissing-field-initializers]
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\OV2640.cpp:37:1: warning: missing initializer for member 'camera_config_t::sccb_i2c_port' [-Wmissing-field-initializers]
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\OV2640.cpp:72:1: warning: missing initializer for member 'camera_config_t::fb_location' [-Wmissing-field-initializers]
 };
 ^
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\OV2640.cpp:72:1: warning: missing initializer for member 'camera_config_t::grab_mode' [-Wmissing-field-initializers]
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\OV2640.cpp:72:1: warning: missing initializer for member 'camera_config_t::sccb_i2c_port' [-Wmissing-field-initializers]
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\OV2640.cpp:102:1: warning: missing initializer for member 'camera_config_t::fb_location' [-Wmissing-field-initializers]
 };
 ^
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\OV2640.cpp:102:1: warning: missing initializer for member 'camera_config_t::grab_mode' [-Wmissing-field-initializers]
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\OV2640.cpp:102:1: warning: missing initializer for member 'camera_config_t::sccb_i2c_port' [-Wmissing-field-initializers]
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\CStreamer.cpp: In member function 'void CStreamer::addSession(WiFiClient&)':
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\CStreamer.cpp:41:19: warning: unused variable 'session' [-Wunused-variable]
     CRtspSession* session = new CRtspSession(aClient, this); // our threads RTSP session and state
                   ^~~~~~~
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\CRtspSession.cpp: In member function 'void CRtspSession::Handle_RtspDESCRIBE()':
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\CRtspSession.cpp:298:14: warning: '%s' directive output may be truncated writing up to 1023 bytes into a region of size between 784 and 983 [-Wformat-truncation=]
              "RTSP/1.0 200 OK\r\nCSeq: %s\r\n"
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              "%s\r\n"
              ~~~~~~~~
              "Content-Base: %s/\r\n"
              ~~~~~~~~~~~~~~~~~~~~~~~
              "Content-Type: application/sdp\r\n"
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              "Content-Length: %d\r\n\r\n"
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              "%s",
              ~~~~
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\CRtspSession.cpp:306:14:
              URLBuf,
              ~~~~~~
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\CRtspSession.cpp:298:14: note: directive argument in the range [0, 1023]
c:\Users\user\Documents\Arduino\libraries\Micro-RTSP-master\src\CRtspSession.cpp:297:13: note: 'snprintf' output 97 or more bytes (assuming 2345) into a destination of size 1024
     snprintf(Response,sizeof(Response),
     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
              "RTSP/1.0 200 OK\r\nCSeq: %s\r\n"
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              "%s\r\n"
              ~~~~~~~~
              "Content-Base: %s/\r\n"
              ~~~~~~~~~~~~~~~~~~~~~~~
              "Content-Type: application/sdp\r\n"
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              "Content-Length: %d\r\n\r\n"
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              "%s",
              ~~~~~
              m_CSeq,
              ~~~~~~~
              DateHeader(),
              ~~~~~~~~~~~~~
              URLBuf,
              ~~~~~~~
              (int) strlen(SDPBuf),
              ~~~~~~~~~~~~~~~~~~~~~
              SDPBuf);
              ~~~~~~~

Achievable framerate?

Hi, just installed an old version of Micro-RTSP from hacksterio, as I'm new to this, Arduino IDE seemed like the simple way to program directly to the usb port.
Http streams fine but rtsp have difficulties with fast movement, just wondering if you can achive VGA at 12.5 fps?
My module "M5Camera/b" has psram is that used with your code or can I fake it by using the ttgo config?

Esp32-cam as a virtual webcam using ffmpeg v4l2loopback

Hi, first of all, excellent work on the RTSP Library for the Esp32-cam.

I'm trying to use one of these wifi cameras as a virtual webcam,and for now the simplest option is to get the RTSP stream from the camera, use ffmpeg and v4l2loopback to create a virtual /dev/video1 device.

The module works great, I can see the RTSP feed in VLC using the address rtsp://192.168.1.201:8554/mjpeg/1 and with the :network-caching=0 in VLC it works like a charm.

but when I use ffmpeg to send the data through the virtual device it only works for 29 seconds

this is the command that i'm using:

ffmpeg -i rtsp://192.168.1.201:8554/mjpeg/1 -fflags low_delay -fflags nobuffer -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video1

and these is the last message before stop working
frame= 288 fps= 10 q=-0.0 Lsize=N/A time=00:00:29.08 bitrate=N/A speed=1.05x

I've tried with different camera resolutions but is always the same result. it dies at 29 seconds and speed =1.05

is there any way to make this work??

thanks.

esp-idf

Hello,

there is a way to compile this library using esp-idf?
Thanks

Error sending udp packet

Hi,

I receive lots of messages "error sending udp packet" in the console.
When I turned on 'Core debug level: Error' I started to receive an explanation:
[E][WiFiUdp.cpp:183] endPacket(): could not send data: 12
'12' in the errno.h means 'Out of memory'.

Frames are missing and there is constant 2 seconds delay all the time. The picture is not smooth.

CameraWebServer from Arduino examples works fine. Almost no delays. Stream is nice and smooth.
WEBSERVER also is really fast. No delay, no frames skipped.

What I have tried:

  1. I tried to connect to the camera from my desktop and from my phone, the result is the same.
  2. Also tried to comment out WEBSERVER part - it seams it doesn't influence on the memory usage.
  3. Use SOFTAP mode. The result is the same, so my network configuration is not a culprit.

Hardware: bought here https://www.aliexpress.com/item/32964004777.html
I use esp32cam_aithinker_config. Others don't work.
When I upload the program I use the following config:
ESP32 Wroover module
80MHz
Partition Scheeme: Huge APP (3MB no OTA)
Core debug level: Error

Any idea why this is happening and how to fix it?
Thanks.

RTSP Client

Hello. Tell me there is a similar library, but I need exactly the RTSP Client so that ESP can receive data from other IP cameras on my network ?

Library is dead ?

Hello, this library is dead ?
No more udpate 1 year and some bug, when installing not possible to use :/

Other functions while streaming

Hi,
I'm working with the Arduino IDE example on a TTGO T camera.
Once the streaming starts is it possible to run other functions on the device?
I want to use the PIR sensor on this board to wake the device and allow video to be viewed for 5 minutes and then the device to sleep until the next input from the PIR sensor.

Support resolutions higher than SVGA

From jii at hackaday:

So what exactly limits this to SVGA? The datasheet linked below says 1632×1232.

My comment:

ok - I poked around and figured out why the espressif example code used SVGA res. The size needed for the framebuffer grows too big for the 512KB ram on the ESP32 (and the three boards I've tried don't have the ESP-PSRAM32 chip - which their camera driver does support).

I'm just using their traditional DMA by line a (double) framebuffer. With the current code there is 255KB free after the two frame buffers (and the various DMA transfer buffers) are allocated. But if I bump up to the larger frame size, I can't allocate the second framebuffer.

That said, processing the images from the camera was mostly just made easier by having the frame buffer memory. Since the frames are being fired off via UDP in fragments about 1100 bytes at a time, it would be possible to just use the i2s layer directly (rather than the espressif camera driver) and as enough bytes arrive fire them off immediately. This would dramatically lower the memory needs (and allow full res use of the imager).

Alas though there are a few things in my queue (other hw projects) before I can do such surgery on this lib. I'm recording this as an issue in case someone else can get to it first. I'm happy to provide pointers / accept pull requests if anyone else wants to do this soon.

RTSP clients limit/supported?

Hi.

How many simultaneous RTSP clients are supported?

I currently can't get more then one client connected at the same time.

Is this a known limitation when running on ESP32-Cam?

Thx

rtsp url

what is the rtsp url i should use in order to connect to rtsp server

How to stream to YouTube?

Do you have any sample on how to stream the camera output to YouTube using a ESP32-CAM module?

rtmp://a.rtmp.youtube.com/live2/[your-secret-key-here]

Or is it impossible?

audio support

are there any plans to add audio to the stream for the esp32 camera boards with microphones?

Errors on boot

Hello after i flash the source without errors i get these errors on startup:

rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1100
load:0x40078000,len:9232
load:0x40080400,len:6412
entry 0x400806a8
ets Jun 8 2016 00:22:57

how can i fix?

mbed.h header file not found

I'm using an 'AI-thinker-esque' esp32-cam board. The cam works fine after having selected 'AI-thinker' as my board and trying the generic example for the aforementioned board. I can view the video in my web browser just fine.

I'm trying to get your code to compile after having installed the library and including the files within the Arduino IDE.

I'm getting this error when I try to compile:

In file included from C:\Users\Bueno\Documents\Arduino\myEsp32-camCameraWebServer1_0\myEsp32-camCameraWebServer1_0.ino:8:0:
C:\Users\Bueno\Documents\Arduino\libraries\Micro-RTSP-master\src/platglue-mbed.h:6:18: fatal error: mbed.h: No such file or directory
compilation terminated.
exit status 1
Error compiling for board AI Thinker ESP32-CAM.
Error downloading https://git.oschina.net/dfrobot/FireBeetle-ESP32/raw/master/package_esp32_index.json

Looking at the src code, I see there is no 'mbed.h' header file.

Thanks in advance for any help with which you can provide me !!! :)

Here's my src code in full:

`#include <CRtspSession.h>
#include <CStreamer.h>
#include <JPEGSamples.h>
#include <LinkedListElement.h>
#include <OV2640.h>
#include <OV2640Streamer.h>
#include <platglue-esp32.h>
#include <platglue-mbed.h>
#include <platglue-posix.h>
#include <platglue.h>
#include <SimStreamer.h>

#include "esp_camera.h"
#include <WiFi.h>

//
// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
// or another board which has PSRAM enabled
//

// Select camera model
//#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER

#include "camera_pins.h"

// thisIsMyStuff
const char* ssid = "purposelyOmitted";
const char* password = "purposelyOmitted";

//IPAddress local_IP(192, 168, 1, 251);
//IPAddress gateway(192, 168, 1 ,1);
//IPAddress subnet(255, 255, 255, 0);

// Following two settings are optional
//IPAddress primaryDNS(8, 8, 8, 8);
//IPAddress secondaryDNS(8, 8, 4, 4);

//Static IP Config*****/
//IPAddress ap_local_IP(192, 168, 1, 251);
//IPAddress ap_gateway(192,168,1,255);
//IPAddress ap_subnet(255,255,255,0);

// endOfMyStuff
void startCameraServer();

void setup() {
Serial.begin(115200);
Serial.setDebugOutput(true);
Serial.println();

camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
//init with high specs to pre-allocate larger buffers
if(psramFound()){
config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_count = 2;
} else {
config.frame_size = FRAMESIZE_SVGA;
config.jpeg_quality = 12;
config.fb_count = 1;
}

#if defined(CAMERA_MODEL_ESP_EYE)
pinMode(13, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
#endif

// camera init
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x", err);
return;
}

sensor_t * s = esp_camera_sensor_get();
//initial sensors are flipped vertically and colors are a bit saturated
if (s->id.PID == OV3660_PID) {
s->set_vflip(s, 1);//flip it back
s->set_brightness(s, 1);//up the blightness just a bit
s->set_saturation(s, -2);//lower the saturation
}
//drop down frame size for higher initial frame rate
s->set_framesize(s, FRAMESIZE_QVGA);

#if defined(CAMERA_MODEL_M5STACK_WIDE)
s->set_vflip(s, 1);
s->set_hmirror(s, 1);
#endif

// thisIsMyStuff
//const char* ssid = "purposelyOmitted";
//const char* password = "purposelyOmitted";

IPAddress local_IP(192, 168, 1, 251);
IPAddress gateway(192, 168, 1 ,1);
IPAddress subnet(255, 255, 255, 0);

// Following two settings are optional
//IPAddress primaryDNS(8, 8, 8, 8);
//IPAddress secondaryDNS(8, 8, 4, 4);

//Static IP Config*****/
//IPAddress ap_local_IP(192, 168, 1, 251);
//IPAddress ap_gateway(192,168,1,255);
//IPAddress ap_subnet(255,255,255,0);

// endOfMyStuff

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");

startCameraServer();

Serial.print("Camera Ready! Use 'http://");
Serial.print(WiFi.localIP());
Serial.println("' to connect");
}

void loop() {
// put your main code here, to run repeatedly:
delay(10000);
}`

Thanks again !!!

Support for Blue Iris

Hi
I am trying to make a rtsp connection from Blue Iris, but somehow Blue Iris is not able to read the stream. I guess it has something to do with the stream not being compatible....
Stream works fine in VLC...
Nice project by the way....

Compiling error in Arduino IDE

Hello I am using Arduino IDE and trying to build the project.

This error comes out:

C:\Users\User\Documents\Arduino\libraries\Micro-RTSP\examples\ESP32-devcam\ESP32-devcam.ino: In function 'void loop()':
C:\Users\User\Documents\Arduino\libraries\Micro-RTSP\examples\ESP32-devcam\ESP32-devcam.ino:220:40: error: no matching function for call to 'CStreamer::addSession(WiFiClient&)'
         streamer->addSession(rtspClient);
                                        ^
In file included from c:\Users\User\Documents\Arduino\libraries\Micro-RTSP\src/SimStreamer.h:4,
                 from C:\Users\User\Documents\Arduino\libraries\Micro-RTSP\examples\ESP32-devcam\ESP32-devcam.ino:6:
c:\Users\User\Documents\Arduino\libraries\Micro-RTSP\src/CStreamer.h:16:19: note: candidate: 'CRtspSession* CStreamer::addSession(SOCKET)'
     CRtspSession *addSession( SOCKET aClient );
                   ^~~~~~~~~~
c:\Users\User\Documents\Arduino\libraries\Micro-RTSP\src/CStreamer.h:16:19: note:   no known conversion for argument 1 from 'WiFiClient' to 'SOCKET' {aka 'WiFiClient*'}

exit status 1

Compilation error: no matching function for call to 'CStreamer::addSession(WiFiClient&)'

Would you be able to help?

Regards

Have some seconds delay.

Hi Kevin,

Nice work!
I had a chance to add this to ESP-Who project, just testing for the CAM streaming via UDP. I put the rstp request reading (on rstp port ) in a separate (freertos)task, and VLC plays well. One problem is that there's a 2 or 3 seconds delay, but the view is clear and smooth. I checked the overall time for one frame sending (actually rtsp.broadcastCurrentFrame()), about less than 100ms (about 60~80ms as I remember) in 640x480 res. I'm figuring out what's the root cause, because it should be no delay and better than the httpserver's TCP streaming example(in ESP-Who),which has no delay. Appreciate any help, thanks!

Mike

PlatformIO compiling error

When I try to compile your example, PlatformIO get always this error:

Executing task in folder ESP32_CAM_RTSP: pio run <

Processing esp32cam (board: esp32cam; platform: espressif32@>=1.6.0; framework: arduino)

Verbose mode can be enabled via -v, --verbose option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32cam.html
PLATFORM: Espressif 32 (3.0.0) > AI Thinker ESP32-CAM
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (esp-prog) External (esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:

  • framework-arduinoespressif32 3.10004.210126 (1.0.4)
  • tool-esptoolpy 1.30000.201119 (3.0.0)
  • toolchain-xtensa32 2.50200.80 (5.2.0)
    LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
    LDF Modes: Finder ~ chain, Compatibility ~ soft
    Found 27 compatible libraries
    Scanning dependencies...
    Dependency Graph
    |-- Micro-RTSP 0.1.6
    | |-- WiFi 1.0
    |-- WebServer 1.0
    | |-- WiFi 1.0
    | |-- FS 1.0
    |-- WiFi 1.0
    Building in release mode
    Compiling .pio/build/esp32cam/src/main.cpp.o
    In file included from .pio/libdeps/esp32cam/Micro-RTSP/src/platglue-posix.h:5:0,
    from src/main.cpp:14:
    /home/alex/.platformio/packages/framework-arduinoespressif32/tools/sdk/include/lwip/arpa/inet.h:18:49: fatal error: ../../../lwip/src/include/lwip/inet.h: No such file or directory
    compilation terminated.
    Archiving .pio/build/esp32cam/lib106/libWiFi.a
    Indexing .pio/build/esp32cam/lib106/libWiFi.a
    Compiling .pio/build/esp32cam/lib2a0/Micro-RTSP/CStreamer.cpp.o
    Compiling .pio/build/esp32cam/lib2a0/Micro-RTSP/JPEGSamples.cpp.o
    *** [.pio/build/esp32cam/src/main.cpp.o] Error 1
    ==================================================== [FAILED] Took 2.08 seconds ====================================================
    The terminal process "pio 'run'" terminated with exit code: 1.

Terminal will be reused by tasks, press any key to close it.

I also tried to change path from:
../../../lwip/src/include/lwip/inet.h on arpa/inet.h file
to
lwip/inet.h
but i just get more compilation errors !

Any suggestions ?
Thanks in advance to everyone.

Password protect stream

Does anyone know how I can protect the stream with an username and a password? That way I could make it safely accessible from outside my network.

typo in OV2640.h

In OV2640.h esp32_ttgocam_t_config should be esp32cam_ttgo_t_config

How to "broadcast" IP address?

How do commercial IP cams solve that you can add their IP cams to an app, and then that IP cam is accessible from anywhere in the world? I mean that the IP address to which network the IP cam is connected to can change, and also such IP cams don't require that you configure port forwarding on the router, etc. What is the trick? :) Thanks!

Advice

Hi,

Do you have any advice on how to use the wifi component for servo control? How can I use the header?

Thank you

Loic

Cannot build due to WiFiClient.h missing

Hello! I've been following since I saw this on HackADay and finally got my board, this is my first time using platformio and I wonder if I have something setup wrong

There's some weird things here, I think the Dependency graph should be showing WiFi at the very least

The WiFiClient.h is in the framework in my home .platformio directory:
~/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src/WiFiClient.h

The following log is from staging (just incase) but it's not finding the wifi lib

What fundamental thing have I missed here?

Processing m5stack-core-esp32 (platform: https://github.com/platformio/platform-espressif32.git#feature/stage; board: m5stack-core-esp32; framework: arduino)
--------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/m5stack-core-esp32.html
PLATFORM: Espressif 32 (Stage) > M5Stack Core ESP32
HARDWARE: ESP32 240MHz 320KB RAM (4MB Flash)
DEBUG: CURRENT(esp-prog) EXTERNAL(esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF MODES: FINDER(chain) COMPATIBILITY(soft)
Collected 27 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <Micro-RTSP> 0.1.6
Compiling .pioenvs/m5stack-core-esp32/lib3ba/Micro-RTSP_ID6071/CRtspSession.cpp.o
Compiling .pioenvs/m5stack-core-esp32/lib3ba/Micro-RTSP_ID6071/CStreamer.cpp.o
Compiling .pioenvs/m5stack-core-esp32/lib3ba/Micro-RTSP_ID6071/OV2640Streamer.cpp.o
Compiling .pioenvs/m5stack-core-esp32/lib3ba/Micro-RTSP_ID6071/SimStreamer.cpp.o
In file included from .piolibdeps/Micro-RTSP_ID6071/src/platglue.h:4:0,
from .piolibdeps/Micro-RTSP_ID6071/src/CStreamer.h:3,
from .piolibdeps/Micro-RTSP_ID6071/src/CRtspSession.h:3,
from .piolibdeps/Micro-RTSP_ID6071/src/CRtspSession.cpp:1:
.piolibdeps/Micro-RTSP_ID6071/src/platglue-esp32.h:4:24: fatal error: WiFiClient.h: No such file or directory

********************************************************************
* Looking for WiFiClient.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:WiFiClient.h"
* Web  > https://platformio.org/lib/search?query=header:WiFiClient.h
*
********************************************************************

compilation terminated.
In file included from .piolibdeps/Micro-RTSP_ID6071/src/platglue.h:4:0,
from .piolibdeps/Micro-RTSP_ID6071/src/CStreamer.h:3,
from .piolibdeps/Micro-RTSP_ID6071/src/CStreamer.cpp:1:
.piolibdeps/Micro-RTSP_ID6071/src/platglue-esp32.h:4:24: fatal error: WiFiClient.h: No such file or directory

********************************************************************
* Looking for WiFiClient.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:WiFiClient.h"
* Web  > https://platformio.org/lib/search?query=header:WiFiClient.h
*
********************************************************************

compilation terminated.
In file included from .piolibdeps/Micro-RTSP_ID6071/src/platglue.h:4:0,
from .piolibdeps/Micro-RTSP_ID6071/src/CStreamer.h:3,
from .piolibdeps/Micro-RTSP_ID6071/src/OV2640Streamer.h:3,
from .piolibdeps/Micro-RTSP_ID6071/src/OV2640Streamer.cpp:2:
.piolibdeps/Micro-RTSP_ID6071/src/platglue-esp32.h:4:24: fatal error: WiFiClient.h: No such file or directory

********************************************************************
* Looking for WiFiClient.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:WiFiClient.h"
* Web  > https://platformio.org/lib/search?query=header:WiFiClient.h
*
********************************************************************

compilation terminated.
In file included from .piolibdeps/Micro-RTSP_ID6071/src/platglue.h:4:0,
from .piolibdeps/Micro-RTSP_ID6071/src/CStreamer.h:3,
from .piolibdeps/Micro-RTSP_ID6071/src/SimStreamer.h:4,
from .piolibdeps/Micro-RTSP_ID6071/src/SimStreamer.cpp:2:
.piolibdeps/Micro-RTSP_ID6071/src/platglue-esp32.h:4:24: fatal error: WiFiClient.h: No such file or directory

********************************************************************
* Looking for WiFiClient.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:WiFiClient.h"
* Web  > https://platformio.org/lib/search?query=header:WiFiClient.h
*
********************************************************************

compilation terminated.
Compiling .pioenvs/m5stack-core-esp32/FrameworkArduino/Stream.cpp.o
Compiling .pioenvs/m5stack-core-esp32/FrameworkArduino/StreamString.cpp.o
Compiling .pioenvs/m5stack-core-esp32/FrameworkArduino/WMath.cpp.o
*** [.pioenvs/m5stack-core-esp32/lib3ba/Micro-RTSP_ID6071/CRtspSession.cpp.o] Error 1
Compiling .pioenvs/m5stack-core-esp32/FrameworkArduino/WString.cpp.o
*** [.pioenvs/m5stack-core-esp32/lib3ba/Micro-RTSP_ID6071/CStreamer.cpp.o] Error 1
*** [.pioenvs/m5stack-core-esp32/lib3ba/Micro-RTSP_ID6071/OV2640Streamer.cpp.o] Error 1
*** [.pioenvs/m5stack-core-esp32/lib3ba/Micro-RTSP_ID6071/SimStreamer.cpp.o] Error 1
========================== [ERROR] Took 1.26 seconds ==========================
doug@doug-y510p:~/projects/Micro-RTSP/examples$ 

why vlc can not open the mrl

I have successfully uploaded.
Serial Monitor say :
......WiFi connected

192.168.0.104
LinkedListElement (0x3fff7520)->(0x3fff7520)->(0x3fff7520)
Creating TSP streamer
Created streamer width=800, height=600

when i use vlc ,it said can not open the mrl
The Serial Monitor say :
LinkedListElement (0x3fff7550)->(0x3fff7fe8)->(0x3fff7550)
Creating RTSP session
client has closed the socket
client closed socket, exiting
closing TCP socket
~LinkedListElement(0x3fff7550)->(0x3fff7fe8)->(0x3fff7550)

i use wireshark . it show
287 22.093935 192.168.0.104 192.168.0.103 TCP 56 8554 → 57798 [RST, ACK] Seq=1 Ack=129 Win=5744 Len=0

how to solve this problem?

thanks

Stream to ip address

Hi,
How could we stream from esp32 to a ip address?

Like I want the esp32 cam to stream to myfeedvideo.io

How could IRTSP to a particular address?

esp_camera.h: No such file or director

Hi,

I try your TenDollarWebcam code and it gives me the following error message.

:0:16: warning: ISO C++11 requires whitespace after the macro name
In file included from ~/Projects/ESP_Projekte/TenDollarWebcam/src/ESP32-devcam.ino:1:0:
.piolibdeps/Micro-RTSP/src/OV2640.h:9:24: fatal error: esp_camera.h: No such file or directory

This seams to be an unsatisfied dependency to https://github.com/espressif/esp32-camera how can I solve it?

Cheers Christian

RTSP server on ESP32 as H.264 format for Echo Show

Hi, thanks for this bit of code to get it as RTSP format, works well. I'm trying to integrate this via monoclecam to allow the echo show to display the stream but I think it needs to be H.264 format. Is there anyway to get a version that sends in H.264 format? Thanks

gstreamer rtsp timeout

I'm trying to send video via rtsp through gstreamer but for some reason it's timing out. VLC and ffmpeg work fine.
I worked with gstreamer before and it still works fine with other cameras that support RTSP.
After a bit of debugging, the handshake is fine: OPTIONS and DESCRIBE commands work perfectly fine. When PLAY command comes from gstreamer, micro-rtsp responds correctly but then no data is transmitted and after pre-defined timeout gstreamer throws an error.

After adding some debugging linkes, this is the output from Micro-RTSP server:

...WiFi connected
192.168.0.23
LinkedListElement (0x3fff5008)-(0x3fff5008)-(0x3fff5008)
Creating TSP streamer
Created streamer width=800, height=600
client: 192.168.0.14
LinkedListElement (0x3fff5008)-(0x3fff56f4)-(0x3fff5008)
Creating RTSP session
==================================
OPTIONS rtsp://192.168.0.23:8554/mjpeg/1 RTSP/1.0
CSeq: 1
User-Agent: GStreamer/1.14.5
User-Agent: RealMedia Player Version 6.0.9.1235 (linux-2.0-libc6-i386-gcc2.95)
ClientChallenge: 9e26d33f2984236010ef6253fb1887f7
CompanyID: KnKV4M4I/B2FjJ1TToLycw==
GUID: 00000000-0000-0000-0000-000000000000
RegionData: 0
PlayerStarttime: [28/03/2003:22:50:23 00:00]
ClientID: Linux_2.4_6.0.9.1235_play32_RN01_EN_586
Date: Fri, 15 May 2020 14:11:08 GMT
==================================
RTSP received OPTIONS
==================================
RTSP/1.0 200 OK
CSeq: 1
Server: MyServer
Public: DESCRIBE, SETUP, TEARDOWN, PLAY
==================================
==================================
DESCRIBE rtsp://192.168.0.23:8554/mjpeg/1 RTSP/1.0
CSeq: 2
User-Agent: GStreamer/1.14.5
Accept: application/sdp
Date: Fri, 15 May 2020 14:11:09 GMT
==================================
RTSP received DESCRIBE
==================================
RTSP/1.0 200 OK
CSeq: 2
Server: MyServer
Date: Thu, Jan 01 1970 00:00:19 GMT
Content-Base: rtsp://192.168.0.23:8554/mjpeg/1/
Content-Type: application/sdp
Content-Length: 94
v=0
o=- 1481765933 1 IN IP4 192.168.0.23
s=
t=0 0
m=video 0 RTP/AVP 26
c=IN IP4 0.0.0.0
==================================
==================================
SETUP rtsp://192.168.0.23:8554/mjpeg/1/ RTSP/1.0
CSeq: 3
User-Agent: GStreamer/1.14.5
Transport: RTP/AVP;unicast;client_port=36808-36809
Date: Fri, 15 May 2020 14:11:10 GMT
==================================
RTSP received SETUP
==================================
RTSP/1.0 200 OK
CSeq: 3
Date: Thu, Jan 01 1970 00:00:20 GMT
Server: MyServer
Transport: RTP/AVP;unicast;destination=192.168.0.20;source=192.168.0.24;client_port=36808-36809;server_port=6970-6971;mode=play
Session: -2147429540
==================================
==================================
PLAY rtsp://192.168.0.23:8554/mjpeg/1/ RTSP/1.0
CSeq: 4
User-Agent: GStreamer/1.14.5
Range: npt=0-
Session: -2147429540
Date: Fri, 15 May 2020 14:11:11 GMT
==================================
RTSP received PLAY
==================================
RTSP/1.0 200 OK
CSeq: 4
Server: MyServer
Date: Thu, Jan 01 1970 00:00:21 GMT
Range: npt=0.000-
Session: -2147429540
RTP-Info: url=rtsp://192.168.0.24:8554/mjpeg/1/track1;seq=0
==================================
==================================
TEARDOWN rtsp://192.168.0.23:8554/mjpeg/1/ RTSP/1.0
CSeq: 5
User-Agent: GStreamer/1.14.5
Session: -2147429540
Date: Fri, 15 May 2020 14:11:17 GMT
==================================
RTSP received TEARDOWN
closing UDP socket
closing UDP socket
closing TCP socket
~LinkedListElement(0x3fff5008)-(0x3fff56f4)-(0x3fff5008)
client: 192.168.0.14
~LinkedListElement after: (0x3fff5008)-(0x3fff5008)LinkedListElement (0x3fff5008)-(0x3fff622c)-(0x3fff5008)
Creating RTSP session
==================================
TEARDOWN rtsp://192.168.0.23:8554/mjpeg/1/ RTSP/1.0
CSeq: 0
User-Agent: GStreamer/1.14.5
Session: -2147429540
Date: Fri, 15 May 2020 14:11:19 GMT
==================================
RTSP received TEARDOWN
closing TCP socket
~LinkedListElement(0x3fff5008)-(0x3fff622c)-(0x3fff5008)

And this is from gstreamer side:

Progress: (connect) Connecting to rtsp://192.168.0.23:8554/mjpeg/1
Progress: (open) Retrieving server options
Progress: (open) Retrieving media info
Progress: (request) SETUP stream 0
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: latency = 2000
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: ntp-sync = false
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: rfc7273-sync = false
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: ntp-time-source = NTP time based on realtime clock
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: drop-on-latency = false
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: max-rtcp-rtp-time-diff = 1000
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: max-ts-offset-adjustment = 0
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: buffer-mode = Slave receiver to sender clock
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: timeout = 5000000000
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: caps = application/x-rtp, media=(string)video, payload=(int)26, clock-rate=(int)90000
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc2: caps = application/x-rtcp
Progress: (open) Opened Stream
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: buffer-mode = Slave receiver to sender clock
Progress: (request) Sending PLAY request
Progress: (request) Sending PLAY request
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: caps = application/x-rtp, media=(string)video, payload=(int)26, clock-rate=(int)90000, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1.GstPad:src: caps = application/x-rtp, media=(string)video, payload=(int)26, clock-rate=(int)90000, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager.GstGhostPad:recv_rtp_sink_0.GstProxyPad:proxypad0: caps = application/x-rtp, media=(string)video, payload=(int)26, clock-rate=(int)90000, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
Progress: (request) Sent PLAY request
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager/GstFunnel:funnel0.GstFunnelPad:funnelpad0: caps = application/x-rtp, media=(string)video, payload=(int)26, clock-rate=(int)90000, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager.GstGhostPad:recv_rtp_sink_0: caps = application/x-rtp, media=(string)video, payload=(int)26, clock-rate=(int)90000, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc2.GstPad:src: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager.GstGhostPad:recv_rtcp_sink_0.GstProxyPad:proxypad1: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager/GstFunnel:funnel1.GstFunnelPad:funnelpad1: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager.GstGhostPad:recv_rtcp_sink_0: caps = application/x-rtcp
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager/GstFunnel:funnel0.GstFunnelPad:funnelpad0: caps = NULL
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager/GstFunnel:funnel1.GstFunnelPad:funnelpad1: caps = NULL
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager.GstGhostPad:recv_rtp_sink_0.GstProxyPad:proxypad0: caps = NULL
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager.GstGhostPad:recv_rtp_sink_0: caps = NULL
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager.GstGhostPad:recv_rtcp_sink_0.GstProxyPad:proxypad1: caps = NULL
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager.GstGhostPad:recv_rtcp_sink_0: caps = NULL
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1.GstPad:src: caps = NULL
/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc2.GstPad:src: caps = NULL
ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Could not write to resource.
Additional debug info:
gstrtspsrc.c(7671): gst_rtspsrc_close (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0:
Could not send message. (Received end-of-file)
Execution ended after 0:00:08.227758557
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

I know this is not gstreamer support but maybe you have any ideas.
Also after accessing rtsp stream twice in a row there is a kernel panic on esp32-cam right after PLAY command is issued:

Core 1 register dump:
PC      : 0x400d32ab  PS      : 0x00060f30  A0      : 0x800d351e  A1      : 0x3ffb1ea0  
A2      : 0x3fff4fec  A3      : 0x00000000  A4      : 0x00003740  A5      : 0x0000044c  
A6      : 0x000004e4  A7      : 0x3fff6378  A8      : 0x800d32a0  A9      : 0x3ffb1e80  
A10     : 0x3fff6678  A11     : 0x3ffb1ed8  A12     : 0x0000d09e  A13     : 0x3ffc875c  
A14     : 0xd4462500  A15     : 0xd4462500  SAR     : 0x00000018  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x00000000  LBEG    : 0x4000c2e0  LEND    : 0x4000c2f6  LCOUNT  : 0x00000000  

Backtrace: 0x400d32ab:0x3ffb1ea0 0x400d351b:0x3ffb1f00 0x400d370c:0x3ffb1f40 0x400d23db:0x3ffb1f60 0x400d9715:0x3ffb1fb0 0x4008d7c1:0x3ffb1fd0

Rebooting...

Crash on creating streamer

Im getting LoadProhibited Guru Meditation error when creating a streamer (code here, line 453). Research is telling me that im accessing ineligible memory? (new to C++, experienced C#, so can code but memory management is a new area for me)

Not sure what im doing wrong? Board is the ESP-EYE, arduino framework in PlatformIO VSCode IDE.
I know its the streamer creation because its printing "Accepting client", but not "Created streamer".

Thanks for any help!

Log below:

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:10044
load:0x40080400,len:5872
entry 0x400806ac
Soft AP Config Success
Mac ADDR: *******
[IP]
Setup Finished. Server Active at [ip]
Accepting client
Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x400d4733  PS      : 0x00060430  A0      : 0x800d47d8  A1      : 0x3ffb1f20  
A2      : 0x00000000  A3      : 0x400857a0  A4      : 0x00000000  A5      : 0x00000008  
A6      : 0x00000004  A7      : 0x3ffcbd7c  A8      : 0x800d4730  A9      : 0x3ffb1f00  
A10     : 0x3ffc11b8  A11     : 0x00000038  A12     : 0x00000010  A13     : 0x0000ff00  
A14     : 0x00ff0000  A15     : 0xff000000  SAR     : 0x0000000a  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x00000008  LBEG    : 0x400014fd  LEND    : 0x4000150d  LCOUNT  : 0xfffffffc

ELF file SHA256: 0000000000000000000000000000000000000000000000000000000000000000

Backtrace: 0x400d4733:0x3ffb1f20 0x400d47d5:0x3ffb1f40 0x400d1c15:0x3ffb1f60 0x400d9f15:0x3ffb1fb0 0x40090989:0x3ffb1fd0

Rebooting...
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:10044
load:0x40080400,len:5872
entry 0x400806ac
Soft AP Config Success
Mac ADDR: ******
[ip]
Setup Finished. Server Active at [ip]

Restream RSTP

I was wondering if there is any server that is able to receive the streaming coming out of the camera and restream it?

Video stops after some seconds

Hello there! I'm trying to use rtsp example with VLC (suing rtsp://ip:port/mjepg/1 but after some seconds the stream stops and in seral i ever get the warning message that says the frame is slow by some ms (average 100 ms)

Can this program run on Esp-IDF environment?

I downloaded your file(Micro RTSP) on GitHub recently.And I had some problems during using it.
Here is the problems:
1.Your program is base on Arduino IDE. Can this program run on Esp-IDF environment?
2.Will you write a ESP IDF version in the future?
I sent a email to you,too.
Thank you.

AIThinker ESP32-CAM

Hi,
I uploaded the code to AIThinker ESP32-CAM board, I'm getting following messages on serial monitor:

[E][camera.c:1049] camera_probe(): Detected camera not supported.
[E][camera.c:1249] esp_camera_init(): Camera probe failed with error 0x20004

The ESP32 Camera example sketch works fine with my board when I select CAMERA_MODEL_AI_THINKER.

Is this the camera used with AIThinker board supported by the library? if yes, what do i need to do to use it?

Thanks

Ameen

ONVIF

Can you add support for ONVIF protocol?
Thank you

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.