ffmpeg视频m3u8格式转换成mp4格式
ffmpeg -i http://.../playlist.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4 ffmpeg -i http://.../playlist.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4 服务器使用的是ubuntu 20.04版本,出现的问题是我在192.168.40.43网段访问数据,时而通时而不通
我本地路由使用双lan网口,服务器是接入与本地不同的网口。
以下是服务器的网络配置:
vim /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
ens3:
dhcp4: false
addresses:
- 192.168.1.80/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 192.168.1.1
routes:
- to: default
via: 192.168.1.1
metric: 100
ens4:
dhcp4: false
addresses:
- 192.168.8.80/24
gateway4: 192.168.8.1
nameservers:
addresses:
- 192.168.8.1
#routes: []
routes:
- to: 192.168.8.0/24
via: 192.168.8.1
metric: 200
version: 2手动添加路由表
为了使用多个路由表,需要编辑 /etc/iproute2/rt_tables 文件,为每个路由表添加一个条目。用以下命令编辑 rt_tables 文件并添加表项:
sudo nano /etc/iproute2/rt_tables在文件的末尾添加如下内容:
100 table1
200 table2这些表名分别对应 ens3 和 ens4。
手动设置路由
配置好路由表后,手动添加路由。首先,使用以下命令来为每个路由表添加默认路由:
sudo ip route add default via 192.168.1.1 table table1
sudo ip route add default via 192.168.8.1 table table2配置路由规则
接下来,需要为每个源地址添加路由规则,确保流量通过正确的路由表:
sudo ip rule add from 192.168.1.80 table table1
sudo ip rule add from 192.168.8.80 table table2这将确保从 192.168.1.80 发出的流量会使用 table1(即 ens3 的路由表),从 192.168.8.80 发出的流量会使用 table2(即 ens4 的路由表)。
保存路由规则
为了确保每次重启后这些规则仍然有效,你可以将它们添加到系统启动脚本中。编辑 /etc/rc.local 文件(如果系统使用它)或创建一个新的启动脚本来执行这些命令。
sudo nano /etc/rc.local在 exit 0 之前添加以下命令:
ip route add default via 192.168.1.1 table table1
ip route add default via 192.168.8.1 table table2
ip rule add from 192.168.1.80 table table1
ip rule add from 192.168.8.80 table table2应用 netplan 配置
使用 netplan 应用你的网络配置:
sudo netplan apply验证配置
使用以下命令验证路由和路由规则是否正确:
查看路由表:
ip route show table table1
ip route show table table2查看路由规则:
ip rule show由于 netplan 不支持 routing-policy,我们采用了手动配置多路由表的方式,结合 ip rule 来为不同的源 IP 配置不同的路由表。这种方式能够解决路由冲突问题,并让你的服务器可以正确地通过不同的网卡与不同的网络进行通信。
在 Ubuntu 20.04 中,rc.local 文件默认是没有的,因为 Ubuntu 已经转向了 systemd 来管理系统服务和启动任务。不过,你可以通过创建一个 systemd 服务单元 来执行启动时的自定义命令。
rc.local创建一个自定义的 systemd 服务单元文件
你需要为你的自定义命令创建一个 systemd 服务单元文件。使用以下命令创建一个新的 systemd 服务单元:
sudo nano /etc/systemd/system/custom-routing.service编写服务单元文件
在文件中输入以下内容:
[Unit]
Description=Custom Routing Rules
After=network.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c "ip route add default via 192.168.1.1 table table1; ip route add default via 192.168.8.1 table table2; ip rule add from 192.168.1.80 table table1; ip rule add from 192.168.8.80 table table2"
RemainAfterExit=true
[Install]
WantedBy=multi-user.target解释:
[Unit] 部分定义了服务的描述和依赖关系,After=network.target 确保服务在网络配置完成后启动。[Service] 部分定义了要执行的命令,ExecStart 中包含了你之前的路由和规则设置命令。RemainAfterExit=true 表示服务执行完成后不会被停止。[Install] 部分指定了服务将在系统启动时运行。重新加载 systemd 配置
创建服务单元文件后,你需要让 systemd 重新加载配置文件并启动服务。
sudo systemctl daemon-reload启用并启动服务
启用服务,这样它会在每次启动时自动运行:
sudo systemctl enable custom-routing.service然后,手动启动该服务来测试是否能正常工作:
sudo systemctl start custom-routing.service检查服务状态
使用以下命令检查服务的状态,确保没有错误:
sudo systemctl status custom-routing.service如果服务运行成功,你会看到类似 Active: active (exited) 的状态。
在 Ubuntu 20.04 中,rc.local 文件已经被弃用,取而代之的是 systemd。你可以创建一个自定义的 systemd 服务单元 来执行启动时的命令。这种方式比 rc.local 更加灵活且符合现代的系统管理方法。
解决方案:
启用 IP 转发(用于支持不同网卡间的通信)。编辑 /etc/sysctl.conf 文件,确保以下内容被取消注释:
net.ipv4.ip_forward = 1执行以下命令使配置生效:
sudo sysctl -pubuntu20.04版本的网络配置
cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
ens3:
addresses:
- 192.168.1.80/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 192.168.1.1
routes:
- to: default
via: 192.168.1.1
metric: 100
ens4:
#dhcp4: true
addresses:
- 192.168.8.80/24
gateway4: 192.168.8.1
nameservers:
addresses:
- 192.168.8.1
#routes: []
routes:
- to: default
via: 192.168.8.1
metric: 200
version: 2 要获取某个内网IP对应的网卡MAC地址,可以通过以下几种方式,具体方法取决于你所使用的操作系统和网络环境:
arp 命令(适用于大多数操作系统)ARP(地址解析协议)用于将IP地址映射到物理MAC地址。你可以通过以下步骤获取某个IP地址对应的MAC地址:
输入以下命令:
arp -a <IP地址>例如:
arp -a 192.168.1.100输入以下命令:
arp -n <IP地址>或者
arp <IP地址>例如:
arp -n 192.168.1.100ping + arp 方法如果ARP缓存中没有该IP地址的MAC地址,您可以首先尝试ping该IP地址,然后再查看ARP缓存:
在命令行中输入 ping 命令来确保与目标IP地址的连接。
例如:
ping 192.168.1.100然后查看ARP缓存:
arp -a这时,命令会显示出连接过的设备的IP地址和对应的MAC地址。
如果你有路由器或交换机的管理权限,也可以通过登录到网络设备的管理界面查看设备的MAC地址表。大多数路由器和交换机会列出连接到网络中的设备及其IP与MAC地址对应关系。
如果你在局域网内,并且没有相应的权限或工具来获取MAC地址,你可以使用一些网络扫描工具来获取该信息。例如:
Nmap:一个强大的网络扫描工具,可以扫描整个子网并列出IP和MAC地址。
使用以下命令:
nmap -sP 192.168.1.0/24这会扫描192.168.1.x网络段,并显示每个活动设备的IP和MAC地址。
注意:
跨网段使用arp就不行
是的,跨网卡(即不同子网或不同网络接口卡)时直接获取 MAC 地址 是不可行的,原因如下:
如果你需要在跨网卡(不同子网或不同网络接口卡)的情况下获取 MAC 地址,可以考虑以下方法:
使用网络扫描工具:
Nmap 等扫描工具可以帮助你扫描整个网络段,并获取各设备的 IP 和 MAC 地址。例如,Nmap 可以扫描整个子网,帮助你识别其他子网设备的 MAC 地址(即使它们不在同一局域网内)。
nmap -sP 192.168.1.0/24这条命令会扫描 192.168.1.0/24 网段,列出所有活动设备的 IP 和 MAC 地址。
通过路由器或网关:
使用 Wireshark 等抓包工具:
遇到的问题,作个笔记!
bootstrap model 关闭的时候控制台提示报错信息:
Blocked aria-hidden on an element because its descendant retained focus. The focus must not be hidden from assistive technology users. Avoid using aria-hidden on a focused element or its ancestor. Consider using the inert attribute instead, which will also prevent focus.是 aria-hidden 的属性产生的:
查看页面代码 model 模态框 把 aria-hidden=true 加到了 .modal 这个节点上了,将这个属性去掉就解决了
关于 aria-hidden 属性的详解:aria-hidden 是一个与可访问性(accessibility)相关的 HTML 属性,它用于告知屏幕阅读器和其他辅助技术是否应该忽略某个元素,从而不将该元素呈现给使用这些技术的用户。
ARIA 是一组专门用于提高 Web 内容可访问性的属性,尤其针对使用屏幕阅读器等辅助工具的用户。aria-hidden 是其中一个属性,它与语义 HTML 标签的作用不同,而是帮助向辅助技术表明某些元素是否对残障人士可见或可访问。
aria-hidden 的作用aria-hidden="true":该属性的值为 true 时,表示该元素和它的所有子元素会被屏幕阅读器忽略。这样,这些元素将不被读取或呈现给使用屏幕阅读器的用户。即使元素的样式使其可见,屏幕阅读器也不会将其读取。aria-hidden="false":这个值表示该元素对屏幕阅读器是可见的,允许它作为正常内容被屏幕阅读器读取。如果没有显式设置 aria-hidden,默认情况下元素对屏幕阅读器是可访问的。隐藏装饰性元素:
aria-hidden="true" 来让屏幕阅读器忽略它。<div aria-hidden="true">
<i class="icon">xxxxxx</i> <!-- 这是装饰性图标,屏幕阅读器会忽略它 -->
</div>隐藏不必要的内容:
aria-hidden 来隐藏这些内容。<div aria-hidden="true">
<p>这个内容在当前情况下对屏幕阅读器用户不可见。</p>
</div>动态控制可见性:
aria-hidden 还可以用于动态控制元素的可访问性。例如,当某个弹出窗口(如模态框)被打开时,可以使用 aria-hidden="true" 来隐藏背景内容,从而让用户集中注意力在弹出窗口上。<div aria-hidden="true">这是被隐藏的背景内容,屏幕阅读器不会读取它。</div>
<div>这是可见的前景内容,屏幕阅读器将读取它。</div>改善用户体验:
aria-hidden 可以帮助优化用户体验,尤其是在设计复杂的用户界面时。通过正确使用它,可以减少不必要的干扰,使用户能够专注于他们需要关注的内容。影响范围:aria-hidden="true" 不仅会影响当前元素,还会递归地影响该元素的所有子元素。如果父元素被设置为 aria-hidden="true",它的所有子元素都会被屏幕阅读器忽略。
<div aria-hidden="true">
<p>这个段落和其内部的所有内容都会被屏幕阅读器忽略。</p>
</div>aria-hidden 应该小心使用。误用可能导致有意义的内容被错误地隐藏,影响用户的访问体验。最好只在元素确实是纯粹装饰性,或在某些条件下不需要被读取时使用。aria-hidden 仅影响屏幕阅读器和其他辅助技术的行为,它不会改变元素的可视化显示。即使一个元素被设置为 aria-hidden="true",它仍然会在屏幕上显示。要完全隐藏该元素,可以使用 CSS 设置 display: none 或 visibility: hidden。aria-hidden="true":使元素和其子元素对屏幕阅读器隐藏,忽略该元素。aria-hidden="false":明确表示该元素对屏幕阅读器可见(如果没有显式设置,则默认为 false)。aria-hidden 是帮助提高网页可访问性的重要工具,特别是在有复杂界面时。