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

news2024/12/28 20:48:37

那天去逛商场看到有个营业厅,本想进去问问有没有存话费送话费的活动,结果被忽悠办了一个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  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 2523k    0 2523k    0     0  64277      0 --:--:--  0:00:40 --:--:-- 79032

外网拉流成功~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytorch学习指南

安装anaconda: https://blog.csdn.net/fan18317517352/article/details/123035625 教程:bilibili up主:一只小土堆 构建pytorch空间 pytorch安装 查看cpu 安装命令pytorch:conda install pytorch torchvision torchaudio cpu…

SOLIDWORKS CSWA/CSWP认证考试培训

通过专业的培训和考试认证,可以让您多掌握一门软件的使用,让课程设计、毕业设计或科研工作多一个助手,在当前就业压力大的情况下提升自己的求职竞争力。 SOLIDWORKS CSWA/CSWP认证考试培训内容: 1、了解考试规则 2、认识考试题型…

数据结构--KMP之求next数组

数据结构–KMP之求next数组 next数组的作用:当模式串的第j个字符失配时,从模式串的第 next[j]的继续往后匹配 任何模式串都一样,第一个字符不匹配时,只能匹配下一个子串,因此,往后余生 \color{balck}任何模式串都一样…

官宣 | 平行云正式升级为Paraverse平行云科技,开启全球业务新征程

6月30日, "Here is New-Gen Web"——Paraverse Global Strategy and Brand Launch Party 于香港科学园召开,会上平行云正式宣布升级为Paraverse平行云科技(以下简称Paraverse),并升级品牌标识“Paraverse”。这一全新命名与视觉焕新…

JUC--start线程

native:本地方法栈,c语言的函数,但凡调用的是这个接口,就是调用底层操作系统,第三方c语言的接口。 也就是说多线程和语言无关,是操作系统层面的东西。基本上每种语言都有自己的多线程实现方式。 java的前身就是c ja…

Mysql进阶(二)之事务篇

文章目录 面试题事务1.概念2.事务的四大特性ACID3.操作 并发事务问题1.脏读2.不可重复读3.幻读 事务隔离级别(解决并发问题)事务的原理1.redo log(重做日志)2.undo log(回滚日志)3.MVCC(多版本并…

最优化问题matlab求解-fminsearch()和fmincon()函数的使用

matlab可以求解无约束最优化问题、有约束最优化问题和线性规划、二次型规划问题等,同时实现了最小二乘法的曲线拟合方法。matlab求解优化问题的步骤为: 写标准型描述目标函数:M-函数或匿名函数用fminunc()或fmincon()等函数求解原问题。检验…

centos openssl升级

centos openssl升级 一、下载二、(升级)安装 一、下载 执行命令下载: wget https://www.openssl.org/source/openssl-1.1.1f.tar.gz浏览器下载,访问官网网址:https://www.openssl.org/source (1&#xff0…

汇编语言基础--nasm语法数据类型

dd //define 一个字节 例如:dd 100 dw //define 一个字 也就是两个字节 例如:dw 0xaa55 db //define 双字 也就是4个字节 例如:db 0x12345678 由于intel x86的架构采用小端存储因此二进制序列如下: 如果是16进制在后面输入h …

C++ 数据结构图(1)

1. 图的基本概念 图是由顶点集合及顶点间的关系组成的一种数据结构&#xff1a;G (V&#xff0c; E) &#xff0c;其中&#xff1a; 顶点集合 V {x|x 属于某个数据对象集 } 是有穷非空集合 &#xff1b; E {(x,y)|x,y 属于 V} 或者 E {<x, y>|x,y 属于 V &&…

【Spring Boot 事务】万字详解Spring Boot 事务,赶快跟随良辰一起去学习Spring Boot 事务吧! ! !

前言: 大家好,我是良辰丫,这篇文章我将带领大家一起去学习Spring Boot 事务文章,我们在学习数据库的时候已经接触过事务了,来跟随我的脚步一起来瞧一下Spring Boot 事务吧.&#x1f48c;&#x1f48c;&#x1f48c; &#x1f9d1;个人主页&#xff1a;良辰针不戳 &#x1f4d6;…

得物社区推荐精排模型演进

1.背景 得物社区是一大批年轻人获取潮流信息、分享日常生活的潮流生活社区。其中用户浏览的信息&#xff0c;进行个性化的分发&#xff0c;是由推荐系统来决策完成的。目前得物社区多个场景接入了推荐算法&#xff0c;包括首页推荐双列流、沉浸式视频推荐、分类tab推荐流、直播…

Tomcat的安装部署及优化

tomcat安装部署 tomcat安装部署 一、概述&#xff1a;1.tomcat介绍&#xff1a;2.tomcat核心组件&#xff1a;3.tomcat处理内部请求&#xff08;数据流向图&#xff09;4.tomcat服务部署&#xff1a; 二、虚拟主机配置&#xff1a;1.创建 chan 和 baek 项目目录和文件&#xf…

Python常见的开发工具合集对比

​ Python是一种功能强大且易于学习的编程语言&#xff0c;被广泛应用于数据科学、机器学习、Web开发等领域。随着Python在各个领域的应用越来越广泛&#xff0c;越来越多的Python开发工具也涌现出来。但是&#xff0c;对于新手来说&#xff0c;选择一款合适的Python开发工具可…

BurpSutie拓展插件推荐-漏洞扫描插件

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 fastjsonScan&#xff08;1&#xff09;工具介绍&#xff08;2&#xff09;下载地址&#xff08;3&#xff09;使用说明 02 SpringScan&#xff08;1&#xff09;工具介绍&#xff08;2&#xff09…

python接口自动化(十三)--cookie绕过验证码登录(详解)

简介 有些登录的接口会有验证码&#xff1a;短信验证码&#xff0c;图形验证码等&#xff0c;这种登录的话验证码参数可以从后台获取的&#xff08;或者查数据库最直接&#xff09;。获取不到也没关系&#xff0c;可以通过添加cookie的方式绕过验证码。&#xff08;注意&#x…

GPT模型训练实践(1)-基础概念

GPT 是 Generative Pre-trained Transformers 的缩写&#xff0c;一种先进的深度学习模型&#xff0c;旨在生成类人文本。GPT 的三个组成部分Generative、Pre-trained 和 Transformer&#xff0c;其解释如下&#xff1a; Generative生成&#xff1a;生成模型是用于生成新数据的…

【DASOU视频记录】Transformer从零详细解读

文章目录 来源transformer的全局理解位置编码多头注意力机制残差Batch NormalLayer NormalDecoder 来源 b站链接 transformer的全局理解 输入中文&#xff0c;输出英文 细化容易理解的结构&#xff0c;就是先编码&#xff0c;再解码 进一步细化的结构&#xff0c;就是多个编…

Python_闭包

目录 1.概念介绍 2.闭包初探 3.闭包陷阱 4.闭包的应用 4.1 潜在的问题 5.闭包的实现 闭包并不只是一个python中的概念&#xff0c;在函数式编程语言中应用较为广泛。理解python中的闭包一方面是能够正确的使用闭包&#xff0c;另一方面可以好好体会和思考闭包的设计思想。…

面试又问到:工作中发现的最有价值的bug?答不好offer要飞了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 这个问题&#xf…