Steaming video using ESP32 CAM

Hi everyone,

I’m wondering if anyone’s had a success with streaming video from an ESP32 cam to Blynk?
I can stream it to an http address (http://IP address:81/stream) but couldn’t see it using Blynk.
It’s just buffering and then error…

Any idea? It’s possible?

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

const char* ssid = "*********";
const char* password = "*********";

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

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

Yes, probably is… but it is not a Blynk specific issue.

The video widget needs a streaming source URL, not the same as a HTTP web source URL. You need to find a way to setup a specific video streaming server, not a web server on the ESP32.

https://www.google.com/search?q=Steaming+video+using+ESP32+CAM

Although you might be able to see the HTTP Web URL with the WebPage Button Widget.

To clarify… since the Video Widget is not a web browser, you need a server stream designed to be picked up directly.

What program you have may work if you can also make adjustments to things like the bitrate, resolution, framerate, etc. Anything that might reduce the need for buffering… which may simply mean it (the widget) is seeing “too much too fast”.

Of course, you also need to be sure your phone is on the same WiFi network and not using it’s cell network.

And final observation… where did you determine the needed addition of port 81 and the sub path /stream? these things need to be specific to the video servers capabilities, not something guessed at.

Thanks a lot Gunner! I’ll read about it and will share if I’ll find a solution.

Regarding the port, the serial print gives you the IP address. When opening it, it sends you to a configuration page + the streaming together. When you copy the streaming link it gives you the address with the port that I shared where you can see only the video.

BTW, I did succeed in streaming video from a video streaming app to Blynk, and it works great, but it’s for another post :slightly_smiling_face:

2 Likes

Will you be able to create a tutorial for other people on how to stream a video from ESP32 eye to Blynk?

Thanks!

3 Likes

I am using blynk to pass temperature readings from my esp32 board to the cloud so I can read them with my smartphone anywhere in the world. Can I do the same thing using an esp32-CAM to stream video through Blynk to my smartphone anywhere in the world?
In other words, I want to use blank as a server to the cloud. Is this possible?

Yup, can you share the tutorial on how you success video streaming on blynk. Thanks

Viewing a video stream on Blynk is as simple as finding and entering the correct stream URL…

But generating the code and such to produce said URL with various camera hardware is where all the work is… and none of that has anything to do with Blynk itself.

But Google is full of ideas there :wink:

Hello there, would you mind to explain further on how you succeed to stream esp32 cam on blynk? Thank you :slight_smile: