使用家庭宽带和摄像头,实现公网直播

news/2024/4/28 23:27:31/文章来源:https://blog.csdn.net/puhaiyang/article/details/131511941

那天去逛商场看到有个营业厅,本想进去问问有没有存话费送话费的活动,结果被忽悠办了一个19.9升千兆宽带加送一个路由器的业务。

网络环境验证

听他们说现在家庭宽带都是有公网IPV6地址的,立马用电脑试了下确实有IPV6地址。
赶紧随便写了几行代码,测了下外网的机器能不能通过家里的ipv6地址访问到家里的http接口,结果发现访问不到。

搜了下资料说可能是被家庭光猫给墙了,需要用超级管理员登录光猫后台把防火墙给关了。

移动光猫账号: CMCCAdmin 密码:aDm8H%MdA

登录了一下发现我家的光猫压根就没有关闭防火墙这功能,好吧~那看来只好使出必杀器。
router

用家用路由器来拨号上网。

修改前后拓扑变化情况如下:
pppoe

换成路由器拨号以后再用外网的机器试一下:

curl http://[2409:8a62:e36:b7c0:6780:3696:f68c:58a7]:12345/healthz

ipconfig

外网能通过家庭ipv6地址能请求到了,网络环境准备就绪。再用手机随便打开一个测试网站测试一下网速:
speed

平均600+Mbps,没有达到千兆宽带的1000Mbps,先凑合着用吧。(后面再换个速率更高的光猫试试)


家用宽带直播

接下来就来试试这几年比较火热的直播技术。
先来了解一下一个简单的直播流程各处理节点流程:

live

  1. 先由视频采集设备进行信息采集(音视频采集)
  2. 采集之后再使用程序(如FFmpeg)将采集的信息进行转换,推送给直播源服务(转码、推流)
  3. 为了加速用户端对直播的查看效率,一般会再使用cdn服务进行拉流,此文中没有此步骤(CDN缓存加速)
  4. 用户端使用对应的客户端进行查看直播视频(拉流)

资源规划

先规划一下网络资源:

摄像机IP(tp-link)

  • ipv4地址:192.168.31.169

FFmpeg+LAL

  • ipv4地址:192.168.31.165
  • ipv6地址:2409:8a62:e36:b7c0:64be:e0be:be0f:8beb

测试客户端

  • 某外网服务器,有ipv6地址

音视频采集

音视频采集部分用家用摄像头。
正好618的时候刚买了一个支持rtsp协议的tplink摄像头。
tplink

获取到摄像头的ip后,进入摄像头的管理后台,设置好用户名密码后,再看一下rtsp的端口,如这里的554端口。
admin-ipc
接着再根据tplink官网的信息(接入—通过RTSP拉取摄像机监控画面的方法),拼接出摄像头对应的rtsp请求地址。
以ip为192.168.31.169,rtsp端口为554为例,则rtsp地址为:

rtsp://admin:123456@192.168.31.169:554/stream1

为了验证,也可以先找个支持rtsp的播放器先试一下,如以VLC media player为例,在要播放的网络地址中以上信息,可以看到效果则证明没有问题。

tplink-cam

源站搭建(LAL)

音视频采集到了后,就可以准备向源站推数据了。
为了后期的探究方便,这里也使用一款开源的源站-LAL。
lal-github
其github地址如下:https://github.com/q191201771/lal

由于lal是一个开源的流媒体服务端,源码都有了想咋部署就咋部署。

这里为了方便,就还是使用最简单的docker方式来启动:

#拉取lal镜像
docker pull q191201771/lal
#docker中运行lal,并使用默认配置
docker run -it -p 1935:1935 -p 8089:8080 -p 4433:4433 -p 5544:5544 -p 8083:8083 -p 8084:8084 -p 30000-30100:30000-30100/udp q191201771/lal /lal/bin/lalserver -c /lal/conf/lalserver.conf.json

这样lal就启动好了
lal-docker

转码工具FFmpeg安装

直播源站server启动好了后,就可以推流了。这里使用到的仍然是开源的FFmpeg工具。
FFmpeg

FFmpeg项目源码在github的访问地址为:https://github.com/FFmpeg/FFmpeg

由于FFmpeg是C写的,如果使用源码方式编译和安装的话稍微有点复杂。
这里为了快速体验仍然使用docker方式来使用FFmpeg。

docker run jrottenberg/ffmpeg

docker run -it --name app_ffmpeg -p 8081:8080 -v /home/app_ffmpeg/:/mnt/app/ --entrypoint=‘bash’ jrottenberg/ffmpeg

执行后能进入到容器内就代表启动FFmpeg成功了。

推流与拉流

一切准备就绪后,就可以开始来进行推流(主播)和拉流(观众)了。

推流

在FFmpeg容器内输入以下地址进行推流:

ffmpeg -re -stream_loop -1 -y -i rtsp://admin:123456@192.168.31.169:554/stream1 -c:v copy -rtsp_transport tcp -af arealtime -f rtsp rtsp://192.168.31.165:5544/live/tplink-cam1

参数说明:
"-re"表示以实时模式推流
"-i rtsp://admin:123456@192.168.31.169:554/stream1"表示输入为rtsp流
"-c:v copy"表示音频编码格式不变
"-f rtsp"表示输出格式为rtsp
"rtsp://192.168.31.165:5544/live/tplink-cam1"表示推流到该地址。

推流成功后也可进入lal的web界面查看一下:

浏览器访问:http://ip:8083/lal.html
lal-web

拉流

lal支持多种拉流方式,如RTMP、RTSP、HTTP-FLV、HLS等应有尽有。

详细还可通过lal的官方文档中查看:lalserver 各协议推拉流url地址列表
lal-list

VLC player拉流

上面推流成功后,先用VLC播放器试试能不能播放。
播放网络地址中填入:

rtsp://192.168.31.165:5544/live/tplink-cam1
vlc

播放画面如下:
play
播放正常

http拉流

再找一台有ipv6地址的服务器,用http拉一下流:

curl -6 -g -O http://[2409:8a62:e36:b7c0:64be:e0be:be0f:8beb]:8089/live/tplink-cam1.ts

curl-pull

[root@localhost ~]# curl -6 -g -O http://[2409:8a62:e36:b7c0:64be:e0be:be0f:8beb]:8089/live/tplink-cam1.ts% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100 2523k    0 2523k    0     0  64277      0 --:--:--  0:00:40 --:--:-- 79032

外网拉流成功~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_325590.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录使用ffmpeg把mp4转换成m3u8

背景:公司需要上一些视频资源,平均每一个都在600m以上,经过考虑以后采取视频分片以后上传到oss上进行加速播放的流程.这里记录一下使用ffmpeg进行转换视频格式的过程中的一些命令. 准备工作: 下载ffmpeg到本地,以及配置ffmpeg到环境变量中,这里就不多说了. 使用的时候先打开…

Jenkins之pipeline语法——2023.07

文章目录 一、概述二、Pipeline任务1、Pipeline Script 运行任务2、Pipeline script from SCM 通过代码库运行任务3、在 job(任务)中配置Pipeline script from SCM 三、Jenkinsfile 语法1、脚本式语法2、声明式语法1. agent :节点2. tool3. environment2. stages &a…

ATTCK(六)之ATTCK子项目atomicredteam测试环境安装与使用

ATT&CK子项目atomicredteam测试环境安装与使用 Atomicredteam的主站点为https://atomicredteam.io/,是一个攻击测试库,每个安全团队都可以执行这些测试来测试他们的防御控件。测试是有重点的,几乎没有依赖关系,并且以结构化格…

C++动态库使用

个人博客地址: https://cxx001.gitee.io 前言 Windows与Linux下面的动态链接库区别 1. 文件后缀不同 Linux动态库的后缀是 .so 文件,而window则是 .dll 文件。 2. 文件格式不同 (a)Linux下是ELF格式,即Executable and Linkab…

CANDENCE :简单贴装器件封装绘制

紧接candence:常见表贴焊盘绘制举例 简单贴装器件封装绘制 以0603封装电容为例,绘制其封装,这里会用到前面绘制的电容的焊盘。 1、打开PCB editor 软件工具 2、新建一个PACKGE symbol 文件,设置好路径和名称。点击ok确认 3、设置画布尺寸、原点位置、…

Uniapp开发的开源盲盒系统源码

最近比较火的盲盒系统,该项目是基于uniapp开发的盲盒项目,有需要的朋友可以联系我,运营级的项目,本次开源的是uniapp前端模板,选用技术为JAVA,采用框架:spring bootmybatisvue开发。 通过node安…

行为型模式-策略模式(一)

今天就说一说设计模式中的策略模式,从名字来讲,意思就是,对应不同的情况,就有一种解决问题的办法,不同的情况,就有不同的应对方法,这就是策略模式,非常的智能化。 也可以参考菜鸟 …

【Git原理与使用】-- 远程操作

目录​​​​​​​ 理解分布式版本控制系统 远程仓库 新建远程仓库 lssue 与 Pull Request模板文件 知识铺垫 lssue 模板文件 Pull Request模板文件 克隆远程仓库 使用 HTTPS 方式 使用 SSH 方式 第一步:创建SSH Key 向远程仓库推送 过程梳理 实操 …

【SLAM学习】获取IMU和雷达消息并发布

本文主要记录如何将rosbag的消息进行获取并进行发布以及后续处理。 测试数据集: 链接: https://pan.baidu.com/s/1DthWE45V5Zhq7UUrfTt_CQ 提取码: mxvn 查看数据集bag包里面都有那些话题: rosbag info indoor_lab_RS.bag 可以看到包含了两个话题…

『手撕 Mybatis 源码』09 - MyBatis 插件

MyBatis插件 概述 问题:什么是Mybatis插件?有什么作用? Mybatis插件本质上来说就是一个拦截器,它体现了 JDK 动态代理和责任链设计模式的综合运用 Mybatis 中所允许拦截的方法如下 Executor 【SQL执行器】【update&#xff…

Docker服务编排之Docker Compose的使用

Docker服务编排 概念:按照一定的业务规则批量的管理容器 微服务架构的应用系统中一般包含很多微服务,一个微服务中又包含很多的实例,每个微服务都要手动管理,维护的工作量很大。 拉去镜像,创建多个容器,分…

【Vue3】学习笔记-自定义hook函数

概念 什么是hook? 本质是一个函数,把setup函数中使用的Composition API进行了封装。 类似于vue2.x中的mixin。(但是mixins会组件的配置项覆盖。vue3使用了自定义hooks替代mixnins,hooks本质上是函数,引入调用。) 自定义hook的优势: 复用代…

【密码学基础】半/全同态加密算法基础学习笔记

文章目录 1 半同态加密Pailliar加法同态加密Paillier加解密过程Paillier的同态性Paillier的安全性 El Gamal乘法同态加密RSA乘法同态加密 2 全同态加密BFV全同态加密BFV的编码方式BFV加解密过程BFV的安全性BFV的同态性自举Bootstrapping 3 同态加密应用场景场景1:安…

0基础学习VR全景平台篇 第54篇: 高级功能-皮肤

功能位置示意 一、本功能将用在哪里? 皮肤功能,摆脱传统VR全景展示样式,自行选择场景与全景分组的界面模板,从而与不同的应用行业风格相互适应,达到最贴切的展示效果。 是在各种风格的VR全景作品中,最快实…

ubuntu安装MobaXterm和WPS

文章目录 ubuntu安装MobaXtermi386 架构wine操作步骤 ubuntu安装WPS操作步骤WPS版本知识补充 ubuntu安装MobaXterm i386 架构 sudo dpkg --add-architecture i386 是一个Linux系统中的命令,用于添加一个新的架构(architecture)支持到当前系统…

netwox构造免费ARP数据包【网络工程】(保姆级图文)

目录 构造免费的 ARP 数据包。1) 构造免费的 ARP 数据包2) 使用 Wireshark 进行抓包 总结 欢迎关注 『网络工程专业』 系列,持续更新中 欢迎关注 『网络工程专业』 系列,持续更新中 温馨提示:对虚拟机做任何设置,建议都要先快照备…

IDEA中集成zookeeper的插件

IDEA中集成zookeeper的插件 一、IDEA中集成插件 搜索插件并安装: 安装完成,重启IDEA 配置zk集群 连接成功

【PortAudio】PortAudio 音频处理库Demo

1. 介绍 PortAudio是一个免费、跨平台、开源的音频I/O库。看到I/O可能就想到了文件,但是PortAudio操作的I/O不是文件,而是音频设备。它能够简化C/C的音频程序的设计实现,能够运行在Windows、Macintosh OS X和UNIX之上(Linux的各种…

从零开始 Spring Boot 57:JPA中的一对多关系

从零开始 Spring Boot 57:JPA中的一对多关系 图源:简书 (jianshu.com) 在上篇文章中我们介绍了如何在 JPA 中实现实体的一对一关系,在关系型数据库设计中,除了一对一关系,还存在一对多关系。本篇文章介绍如何在 JPA 中…

【Python】NLP参数控制模板

前言 学过AI的都知道训练一个模型需要调整很多参数,为了有效的管理这些参数、不至于让代码的参数写的乱七八糟,有必要写一套控制参数的模板。 argparser argparser是python当中的参数解析器,在NLP当中主要是用来接受和使用参数的。一个使用它…