查看: 1101|回复: 9

ESP32-CAM 推流直播【分享】

[复制链接]

该用户从未签到

发表于 2021-5-12 20:24 | 显示全部楼层 |阅读模式
本帖最后由 John777 于 2021-5-12 20:31 编辑

# ESP32-CAM 推流直播

> 使用esp32-cam进行实时录像,然后通过obs推流到虎牙直播。

## 效果展示

esp32cam-1

esp32cam-1


## 设备运行情况图


esp32cam-12

esp32cam-12


> ps:我的虎牙直播间是24685048,欢迎来点个订阅,虽然没用,哈哈。

## 一、适用人群及软硬件准备

### 1.适用人群

> 本文适合对esp32/8266等有过开发经验的童鞋,作为一个好玩的idea去分享。

### 2.软硬件准备

- esp32-cam开发板
- OBS Studio软件(目前环境:window系统)
- 虎牙直播软件

## 二、烧写代码

### 1.使用esp32-cam的示例代码

> 我是大自然的搬运工,嘿咻...

esp32cam-11

esp32cam-11


### 2.改一下WIFI信息和定义摄像头模块

> 改成你自己的wifi,模块选择安信可的

### 3.烧写调试

打开浏览器输入串口中打印出的地址即可看到一个界面,如下:

esp32cam-10

esp32cam-10


## 三、获取视频流

正常我们打开的ip地址其实是web服务器默认的80端口,但是我们要获取流地址,在串口调试窗口可以看到流地址的信息`Starting stream server on port: 192.168.1.7:81`

但是直接访问`192.168.1.7:81`是没有结果的。

`app_httpd.cpp`中拉到最底下可以找到一段:
```c++
    Serial.printf("Starting web server on port: '%d'\n", config.server_port);
    if (httpd_start(&camera_httpd, &config) == ESP_OK) {
        httpd_register_uri_handler(camera_httpd, &index_uri);
        httpd_register_uri_handler(camera_httpd, &cmd_uri);
        httpd_register_uri_handler(camera_httpd, &status_uri);
        httpd_register_uri_handler(camera_httpd, &capture_uri);
    }

    config.server_port += 1;
    config.ctrl_port += 1;
    Serial.printf("Starting stream server on port: '%d'\n", config.server_port);
    if (httpd_start(&stream_httpd, &config) == ESP_OK) {
        httpd_register_uri_handler(stream_httpd, &stream_uri); // 这句是注册一个路由处理流的传输
    }
```
接下来找到`stream_uri`实现的地方:

```c++
    httpd_uri_t stream_uri = {
        .uri       = "/stream",
        .method    = HTTP_GET,
        .handler   = stream_handler,
        .user_ctx  = NULL
    };
```

可以看到路由为`/stream`,ok,接着将ip地址+端口+`/stream`输入到浏览器就会看到一个视频在播放了
需要注意的事项是,这个流地址只能被一个客户端占用,再打开一个页面就看不到了。(如果你刚才打开了80端口的页面请先关闭,不然你这个地址是无法传输任何东西的)

视频流地址为:`ip:81/stream`

## 四、打开obs studio软件

### 1.新建一个浏览器源

esp32cam-3

esp32cam-3


esp32cam-2

esp32cam-2


esp32cam-4

esp32cam-4


> 一切都ok之后,你的obs studio上就会在播放来自esp32-cam实时直播的视频了,就像上图一样。

### 2.推流地址设置

- 1.打开虎牙直播软件(PC端)
- 2.选择obs推流
- 3.获取串流地址和秘钥
- 4.将这两个参数填写到obs studio里面
- 5.点击设置->推流设置->确定

> 操作过程如下:

esp32cam-8

esp32cam-8


esp32cam-6

esp32cam-6


esp32cam-5

esp32cam-5

### 3.开始推流

点击`开始推流`按钮

esp32cam-7

esp32cam-7


一切ok的话,右下角的显示如下:

esp32cam-9

esp32cam-9


### 4.进入直播间查看

> 一起步骤都ok的话,稍微等个几十秒吧,然后去直播间看看效果



会有演示视频,我已经上传到虎牙了,地址是:https://v.huya.com/play/505245815.html

## 五、敬请期待

> 这是我关于esp系列的第一个教程,也算是一个分享吧,其实并没有什么技术含量,只是将积木进行拼接而已。

在写这篇文章的时候我已经有好几个项目正在开发和将要完成了,后续我将会把这几个项目给童鞋们分享一下哈,敬请期待!

TodoList:
- 1.esp8266/32 WS2812 LED 灯项目(进度100%)
- 2.esp8266/32 WEB MQTT客户端(进度80%)
- 3.esp8266/32 WEB Control Center (还在构思阶段)

顺序:接下来我应该会先写出第2个项目的分享,然后写第1个项目,最后将两个项目合起来生成一个ws2812智能灯带的版本放github给大家玩。

## 六、留言

> 如果有什么好的建议和分享或指导都可以踊跃留言哦。再见...~~~~






该用户从未签到

 楼主| 发表于 2021-5-12 20:24 | 显示全部楼层
演示视频地址:https://v.huya.com/play/505245815.html

该用户从未签到

发表于 2021-5-14 16:33 | 显示全部楼层
按照例程的预编译处理,默认的程序应该是没有运行的啊。我这边取消这个预编译处理后,最大的问题是wifi.h文件重复从而报错。不知道楼主是怎么处理的
QQ截图20210514163119.png

该用户从未签到

 楼主| 发表于 2021-5-14 19:11 | 显示全部楼层
XianFanRong 发表于 2021-5-14 16:33
按照例程的预编译处理,默认的程序应该是没有运行的啊。我这边取消这个预编译处理后,最大的问题是wifi.h文 ...

需要我贴一个esp32cam的示例代码不?

该用户从未签到

发表于 2021-5-14 19:27 | 显示全部楼层
楼主,我默认使用的就是例程,只不过有个预编译的问题,查了很多教程,他们的例程都没有预编译设定。不介意楼主贴一个示例代码。嘿嘿

该用户从未签到

 楼主| 发表于 2021-5-14 20:35 | 显示全部楼层
XianFanRong 发表于 2021-5-14 19:27
楼主,我默认使用的就是例程,只不过有个预编译的问题,查了很多教程,他们的例程都没有预编译设定。不介意 ...

CameraWebServer.zip (21.11 KB, 下载次数: 5)

该用户从未签到

发表于 2021-5-15 10:13 | 显示全部楼层

楼主,我们的例程不一样,因该是esp32固件版本不一样,,所以你给我的例程也是没办法用的,你用的那个版本哦

该用户从未签到

 楼主| 发表于 2021-5-15 17:59 | 显示全部楼层
XianFanRong 发表于 2021-5-15 10:13
楼主,我们的例程不一样,因该是esp32固件版本不一样,,所以你给我的例程也是没办法用的,你用的那个版本 ...

我的版本是  esp32 wrover module

该用户从未签到

发表于 2021-5-15 23:40 | 显示全部楼层
John777 发表于 2021-5-15 17:59
我的版本是  esp32 wrover module

开发板的选择都是一样的,有可能是ESP32固件包版本不一样。楼主你可以看我的例程,完全就和你的不一样。

开发板选择

开发板选择

CAMER.zip

21.94 KB, 下载次数: 3

例程

该用户从未签到

 楼主| 发表于 2021-5-16 09:09 | 显示全部楼层
XianFanRong 发表于 2021-5-15 23:40
开发板的选择都是一样的,有可能是ESP32固件包版本不一样。楼主你可以看我的例程,完全就和你的不一样。 ...

那你去下最新的固件包,在blinker板块里面置顶帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

Arduino16进制字符串转ASCII(下)
Arduino16进制字符串转ASC
在Arduino16进制字符串转ASCII(上)(简称:上文)基础上,举一反三,超越自我,提高
OLED 128*64自制可达10000000个选项的菜单(已更新)
OLED 128*64自制可达10000
OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
ps2遥控小车——uno实现
ps2遥控小车——uno实现
前几天在阁楼发现了好久以前3d打印,激光切割的底盘,于是决定做这个东西 正好手上又
.h .cpp源代码转.ino草图
.h .cpp源代码转.ino草图
在Github上下载了源码,是.h 和.cpp文件,请问一下,如何才可以转成可以在arduinoIDE
Atmega8/16等AVR单片机改装成Arduino板子
Atmega8/16等AVR单片机改
Atmega8/16改装Arduino板子想把AVR单片机改装成arduino板的,可以通过一下开源库来支
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表