ESP32 Cam Blynk video streaming

hello, i managed to get the local IP"http://192.168.1.29/mjpeg/1" for my ESP32Cam and its working properly on WEB, but when i try to put it in the url for the video streaming widget, i get black screen or cannot playback video, what else should i do to make it work, im on local network.
help paleeeeeeeeez

You should read this…

Pete.

hello, thanks for the response

i read it and partially understood it, but still cant figure out how to do it exactly, i tried to use forwarding but i think i didnt do it the right way.
could u help on that?
im just trying to use it locally so i dont need there is a need for DDNS

That’s an incorrect assumption.

Not without significantly more information.

Pete.

ok sry
here is what i tried:
1-http://192.168.1.29 got this ip from arduino IDE after setting up the CAM and its working properly
2- tried to do router forwarding as follows:

3- tried to put http://82.213.myip.myip:85 and it indeed translated to the desired ip address
4- tried to put the same into my widget url, but it gives black screen or cannot play video, tried to insert /stream at the end, same result
any idea ?

Why are you mapping port 85 to port 80?

Pete.

just a test, what should i do instead? and is that really the problem?

i changed it to 80

i changed it to map from 80 to 80, its stuck on the pause button, any idea why?

What port is your ESP32 cam streaming the video on, and what format is the video in?
Is it one of the formats that is supported by the app?

Pete.

i guess since im using the mjpeg method, its not a video, its a stream of images that makes a video, so i guess the app is receiving fast images that makes it look like a video

Video Streaming

Simple widget that allows you to display any live or video stream. Widget supports RTSP (RP, SDP), HTTP/S progressive streaming, HTTP/S live streaming.

Pete.

Its streaming on port 80

also why is it so complex to do live streaming on the new app version?
i see it was soo simple to do in old blynk app, which is good for home project

You’d need to ask Blynk that question.

Pete.

hello everyone, if someone managed to video stream on blynk using ESP32 cam generating the 192.168.1.x/mjpeg/1 link, could u please drop clear steps for it?
i bought blynk plus exactly for this, and its not working, need help.

i finally managed to stream esp32Cam on blynk using port forwarding ngrok.
there is only 1 problem, on blynk app its tooooooooooo slow, actually too slow
on web its very good, but on blynk its like 10 second delay or something which is very unacceptable, can someone help reduce it please?

@Khalid_Badawi please don’t keep creating new topics about the same basic issue.

Anyone viewing your latest post would want to see the additional information that’s been covered previously in your discussions about video streaming from the ESP32 CAM, so having everything on one place is the sensible approach.

I have no idea what this actually means in reality…

and neither will anyone else reading this. If you want assistance you need to explain your setup in far more detail.

Pete.

ok bro
i will go through the experience in details:
1- i have ESPCam module that i want to stream on mobile application using blynk.
2- used arduino sketch to generate mjpeg/1 local url
3- succeeded at that and got the local ip:192.168.1.16/mjpeg/1
4- then knew that blynk needs port forwarding and public url to actually stream.
5- used ngrok to port forward, and got the link https://blabla.free.app/mjpeg/1
6- i put the link in the blynk app and got the camera to work and the stream is working, but its in very delayed slow motion
7- it works very fast on web even using the ngrok link, only in mobile app, its too tooo toooooo toooooooo delayed.

any idea why?

here is the arduino sketch used:
/*

  This is a simple MJPEG streaming webserver implemented for AI-Thinker ESP32-CAM and

  ESP32-EYE modules.

  This is tested to work with VLC and Blynk video widget.

  Inspired by and based on this Instructable: $9 RTSP Video Streamer Using the ESP32-CAM Board

  (https://www.instructables.com/id/9-RTSP-Video-Streamer-Using-the-ESP32-CAM-Board/)

  Board: AI-Thinker ESP32-CAM

*/

#include "src/OV2640.h"

#include <WiFi.h>

#include <WebServer.h>

#include <WiFiClient.h>

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

#define SSID1 "Bassam"

#define PWD1 "24777742@"

OV2640 cam;

WebServer server(80);

const char HEADER[] = "HTTP/1.1 200 OK\r\n" \

                      "Access-Control-Allow-Origin: *\r\n" \

                      "Content-Type: multipart/x-mixed-replace; boundary=123456789000000000000987654321\r\n";

const char BOUNDARY[] = "\r\n--123456789000000000000987654321\r\n";

const char CTNTTYPE[] = "Content-Type: image/jpeg\r\nContent-Length: ";

const int hdrLen = strlen(HEADER);

const int bdrLen = strlen(BOUNDARY);

const int cntLen = strlen(CTNTTYPE);

void handle_jpg_stream(void)

{

  char buf[32];

  int s;

  WiFiClient client = server.client();

  client.write(HEADER, hdrLen);

  client.write(BOUNDARY, bdrLen);

  while (true)

  {

    if (!client.connected()) break;

    cam.run();

    s = cam.getSize();

    client.write(CTNTTYPE, cntLen);

    sprintf( buf, "%d\r\n\r\n", s );

    client.write(buf, strlen(buf));

    client.write((char *)cam.getfb(), s);

    client.write(BOUNDARY, bdrLen);

  }

}

const char JHEADER[] = "HTTP/1.1 200 OK\r\n" \

                       "Content-disposition: inline; filename=capture.jpg\r\n" \

                       "Content-type: image/jpeg\r\n\r\n";

const int jhdLen = strlen(JHEADER);

void handle_jpg(void)

{

  WiFiClient client = server.client();

  cam.run();

  if (!client.connected()) return;

  client.write(JHEADER, jhdLen);

  client.write((char *)cam.getfb(), cam.getSize());

}

void handleNotFound()

{

  String message = "Server is running!\n\n";

  message += "URI: ";

  message += server.uri();

  message += "\nMethod: ";

  message += (server.method() == HTTP_GET) ? "GET" : "POST";

  message += "\nArguments: ";

  message += server.args();

  message += "\n";

  server.send(200, "text / plain", message);

}

void setup()

{

  Serial.begin(115200);

  //while (!Serial);            //wait for serial connection.

  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;

  // Frame parameters

  //  config.frame_size = FRAMESIZE_UXGA;

  config.frame_size = FRAMESIZE_QVGA;

  config.jpeg_quality = 12;

  config.fb_count = 2;

#if defined(CAMERA_MODEL_ESP_EYE)

  pinMode(13, INPUT_PULLUP);

  pinMode(14, INPUT_PULLUP);

#endif

  cam.init(config);

  IPAddress ip;

  WiFi.mode(WIFI_STA);

  WiFi.begin(SSID1, PWD1);

  while (WiFi.status() != WL_CONNECTED)

  {

    delay(500);

    Serial.print(F("."));

  }

  ip = WiFi.localIP();

  Serial.println(F("WiFi connected"));

  Serial.println("");

  Serial.println(ip);

  Serial.print("Stream Link: http://");

  Serial.print(ip);

  Serial.println("/mjpeg/1");

  server.on("/mjpeg/1", HTTP_GET, handle_jpg_stream);

  server.on("/jpg", HTTP_GET, handle_jpg);

  server.onNotFound(handleNotFound);

  server.begin();

}

void loop()

{

  server.handleClient();

}

@Khalid_Badawi Please edit your post, using the pencil icon at the bottom, and add triple backticks at the beginning and end of your code so that it displays correctly.
Triple backticks look like this:
```

Copy and paste these if you can’t find the correct symbol on your keyboard.

Pete.