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

那天去逛商场看到有个营业厅,本想进去问问有没有存话费送话费的活动,结果被忽悠办了一个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.hqwc.cn/news/7824.html

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

相关文章

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 &&…

那些无法避免的弯路

近日&#xff0c;某高校毕业生在校期间窃取学校内网数据&#xff0c;收集全校学生个人隐私信息的新闻引发了人们对互联网生活中个人信息安全问题的再度关注。在大数据时代&#xff0c;算法分发带来了隐私侵犯&#xff0c;在享受消费生活等便捷权利的同时&#xff0c;似乎又有不…

Lion:闭源大语言模型的对抗蒸馏

Lion&#xff1a;闭源大语言模型的对抗蒸馏 Lion&#xff0c;由香港科技大学提出的针对闭源大语言模型的对抗蒸馏框架&#xff0c;成功将 ChatGPT 的知识转移到了参数量 7B的 LLaMA 模型&#xff08;命名为 Lion&#xff09;&#xff0c;在只有 70k训练数据的情况下&#xff0…

84、基于stm32单片机超市自助存储柜快递箱系统设计(程序+原理图+流程图+参考论文+开题报告+任务书+设计资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

select 框添加树结构(todu)

1. 案例: 2. 代码 下班了&#xff0c;明天写

短视频seo矩阵+抖音小程序源码开发解决方案(一)

该解决方案主要针对产品用户交易决策周期长/非标定制等情况的企业&#xff0c;如&#xff1a;房产、汽车、金融、咨询服务&#xff0c;广告设计、网络科技公司&#xff0c;TOB类销售行业等。 基于不同的经营场景&#xff0c;解决方案全面更新&#xff0c;新增账号管理&#xf…

【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本

在很多时候我们需要读写文本文件进行读写&#xff0c;比如写个 Mp3 音乐播放器需要读 Mp3 歌词里的文本&#xff0c;比如修改了一个 txt 文件后保存&#xff0c;就需要对这个文件进行读写操作。本文介绍简单的文本文件读写&#xff0c;内容精简&#xff0c;让大家了解文本读写的…

JavaWeb 速通HTML(常用标签汇总及演示)

目录 一、拾枝杂谈 1.网页组成 : 1 结构 2 表现 3 行为 2.HTML入门 : 1 基本介绍 2.基本结构 : 3.HTML标签 : 1 基本说明 2 注意事项 二、常用标签汇总及演示 1.font标签 : 1 定义 2 演示 2.字符实体 : 1 定义 2 演示 3.标题标签 : 1 定义 2 演示 4. 超链接标签 : 1…

2023年07月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年07月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多&#xff0c;人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

【CSS】定位

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;HTMLCSS &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录 标准流&#xff08;Normal Flow&#xff09;元素定位position属性静态定位-static…

Squid代理服务器应用

目录 一、概述 1.代理的工作机制 2.代理服务器的概念 3.作用 4.Squid代理类型 二、安装 Squid 服务 1.编译安装 Squid 2.修改 Squid 的配置文件 3. Squid 的运行控制 4.Squid 服务自动化管理 4.1编写 squid 服务脚本 4.2加入系统服务 三、构建传统代理服务器 1.修…

迈瑞BC系列出图汇总

迈瑞的几个仪器出图需要画图&#xff0c;搞的很费劲&#xff0c;没办法&#xff0c;厂商自己不改&#xff0c;明明有图发Base64串的&#xff0c;就非两个图要自己画&#xff0c;画的方法又描述不清。每个LIS厂商都要浪费很多时间&#xff0c;没什么必要浪费在这种没意义的事情上…