视频流 – 如何从Linux服务器流式传输实时视频?

这就是我想要做的.环顾四周,但没有找到任何直接的答案.我有一个使用Ubuntu / MySQL / Apache运行网站的Linux机器.我也拥有自己的静态IP,即不使用虚拟主机.我希望能够将视频源从笔记本电脑上的网络摄像头(可能是运行Windows)流式传输到我的Linux服务器,让我的某个网站的用户能够在流式传输时看到该视频.显然,笔记本电脑需要以某种方式对服务器进行身份验证,但是对于谁可以在网站上查看实时视频应该没有限制.谢谢.

解决方法

我目前正在通过FireWire连接的3台miniDV摄像机开发在线流媒体,这与您的需求非常相似.

快速提示:vlc flowplayer / jw player

首先,有两种视频格式,您可以在在线流媒体中使用:FLV和h264. FLV更易于转码,h264具有更好的尺寸/质量比,但转码消耗更多.两者都可以由网页中的flash播放器显示.

其次,流媒体基础设施.由于您的笔记本电脑的带宽有限(几Mbps顶部),您需要获得流到您的服务器,并将其重新发送给客户端.因此,流将流向服务器1次,然后从那里流向N次.您尚未描述笔记本电脑的互联网连接,因此该方案分为两部分:

>笔记本电脑连接公共IP地址或您可以NAT端口到笔记本电脑.这种情况要容易得多,因为您可以轻松地从服务器连接到笔记本电脑.最大的缺点是,您被绑定到一个位置(一个IP地址).
>笔记本电脑与公共地址无关.这有点棘手,但可以从任何网络工作,这将允许您SSH到您的服务器并具有足够的上传(1 Mbps应该这样做).

无论使用何种场景,基础设施都将如下所示

CAMERA - (usb) - LAPTOP - (network,limited upload) - SERVER - (network) - Client 0
                                                                         - Client 1
                                                                         - Client 2
                                                                         - Client N

从笔记本电脑流媒体

>从网络摄像头捕获视频.我从来没有从本地连接的网络摄像头捕获流,但有很多例子如何通过V4L实现,例如:
Webcam Setup.您应该感兴趣的唯一部分是:

laptop $vlc v4l://:v4l-vdev =“/ dev / video0”:v4l-adev =“/ dev / audio2”

这是连接到网络摄像头的VLC命令的第一部分.有关详细信息,请参阅上面提到的HOWTO.特别要查看“视频组”部分并更正/ dev / video和/ dev / audio的设备路径.这些可能与您的笔记本电脑有所不同
>将视频转码为FLV.我个人使用FLV,因为它对CPU要求较低.我使用的转码字符串是这样的:

–sout’#transcode {vcodec = FLV1,vb = 512,acodec = mpga,ab = 64,samplerate = 44100}’

这将使用MPGA音频将​​视频流转码为FLV格式(我的Ubuntu中没有MP3). Samplerate在某种程度上是强制性的,没有它就无法工作.但你可以选择较小的,如22050.这将按原样转码视频流,因此比例为1:1.您可以追加宽度和高度参数,甚至是缩放参数.查看VLC文档.
>从笔记本电脑流式传输.现在你必须建立本地流,服务器将在其上连接:

:STD {存取= HTTP {MIME =视频/ X-FLV},MUX = FFMPEG {MUX = FLV},DST = 0.0.0.0:8081 / stream.flv}

这会将VLC流绑定到0.0.0.0:8081/stream.flv.整个命令看起来像这样:

laptop $vlc v4l://:v4l-vdev =“/ dev / video0”:v4l-adev =“/ dev / audio2”–sout’#transcode {vcodec = FLV1,采样率= 44100}:{STD访问= HTTP {MIME =视频/ X-FLV},DST = 0.0.0.0:8081 / stream.flv}”

在服务器上重新流

>在服务器上捕获流并重新发送它.同样,我们使用VLC捕获和流式传输.使用情况基于此帖子早期的基础架构方案.正如我所展示的,笔记本电脑上的VLC在某些端口上传输视频.此端口必须可从服务器访问.如果您有笔记本电脑的公共IP地址或NATed端口,您可以使用telnet进行测试:

server $telnet public_ip_address 8081

除“连接超时”之外的任何内容都会显示,您可以连接到笔记本电脑的流.
如果您没有公共IP地址,或者您不能使用NAT端口,则必须以相反的方式执行此操作.您可以从笔记本电脑连接到服务器,并将笔记本电脑端口远程转发到服正确的SSH命令是:

laptop $ssh your_user @ server_ip_address -R 8081:127.0.0.1:8081

这个神奇的命令会将您的笔记本电脑端口8081“绑定”到服务器端口8081.这意味着当您在服务器上连接到8081时,您将通过SSH隧道静默连接到您的笔记本电脑端口8081.很酷,对吧?:)
所以我们所要做的就是简单的VLC连接和流:

server $vlc http:// localhost:8081 / stream.flv –sout’#std {access = http {mime = video / x-flv},mux = ffmpeg {mux = flv},dst = 0.0.0.0:8082 /stream.flv}”

或者在公共IP地址或NATed端口的情况下:

server $vlc http:// public_ip_address:8081 / stream.flv –sout’#std {access = http {mime = video / x-flv},dst = 0.0.0.0:8082 /stream.flv}”

与笔记本电脑部分一样,服务器上的VLC绑定到端口8082.为什么8082而不是8081? SSH远程转发已经采用8081.
为什么我们不像第一个例子那样使用转码部分?视频格式正确,因此我们所要做的就是按原样播放视频.
>测试.在这两个示例中,您都可以通过VLC查看流来测试功能.您可以测试本地流:

laptop $vlc http:// localhost:8081 / stream.flv

您可以测试服务器的流:

laptop $vlc http:// server_ip_address:8082 / stream.flv

在这两种情况下,您都应该看到您的网络摄像头输入.

在网络上显示流

在大多数情况下,在Web上显示流是通过Flash播放器.我尝试了两种免费用于非商业用途的产品:JW PlayerFlowplayer.我一直在使用Flowplayer,但我不记得原因,可能是因为插件(我不使用:))或因为更好文档.

如何在网页中显示来自VLC的FLV流,请参见:Stream VLC to Website with asf and Flash

故障排除

注意会出现的许多问题.首先,就像在一切事物中一样,阅读. VLC是非常繁琐的程序,所以它会告诉你问题出在哪里.可能是访问视频/音频设备的权限,丢失编解码器,拼写错误的–sout参数等问题,…学习使用iftop查看数据是否真正通过网络等流动

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、信号(signal)、消息队列、共享内存、信号量、套接字(socket)。管道用于具有亲缘关系的进程间通信,有名管道的每个管道具有名字,使没有亲缘关系的进程间也可以通信。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息。

按实现原理分,可分为基于计数器和跟踪以及剖析。含义如下:

计数器:内核维护的统计数据,通常为无符号整型,用于对发生的事件计数,比如,网络包接收计数器,磁
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书验证,详细追踪整个交互过程,可用于调用网络后端接口,诊断http和https网络服务故障。
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满、fd泄漏等问题。命令包括ping、fping、tcpdump、lsof、netstat、/proc/$pid/fd、du、grep、traceroute、dig。
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的进程数目,用uptime查看到负载很高,既有可能是CPU利用率高,也可能是大量在等待io的进程导致,用mpstat查看每个CPU的使用情况,查看CPU的使用率或者CPU花在等待io的时间,接着用pidstat定位具体的进程
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线程切换及中断切换,进程切换的开销较大,除了需要保存寄存器和程序计数器中的值还需保存全局变量、栈等到内存中,以便下次运行恢复,而同一进程中的线程切换开销会小很多,只需更新寄存器和线程独有的栈,共享资源如打开的文件、全局变量等无需切换,当硬件中
1.top命令 作用:该命令可以按CPU使用.内存使用和执行时间对任务进行排序,常用来监控系统中占用CPU或内存较高的程序及CPU和内存的负载。 默认视图: 当想看系统负载时,可观察汇总的%CPU中的us用户进程和sy系统进程是否占用CPU很高,相加接近100%就说明占用很高了,有些程序可能得不到及
文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限!!!粘滞位!!!超详解!!!
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Windows、Linux、MacBook_mack book 安装qt
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Linux——了解操作系统的发展历史以及初次体验Linux编程环境
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,个人学习时很认真的记录的,觉得好的麻烦点个赞。
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)_openssh_9.5p1
文章浏览阅读3.5k次,点赞93次,收藏78次。初识Linux中的线程,理解线程的各种概念,理解进程地址空间中的页表转换,介绍pthread线程库并理解线程库!
文章浏览阅读863次。出现此问题为Linux文件权限问题,解决方案为回到引擎目录执行命令。输入用户密码后运行./UnrealEditor。_increasing per-process limit of core file size to infinity.
文章浏览阅读2.9k次。使用文本编辑器:打开CSV文件,并使用文本编辑器(如Notepad++、Sublime Text、Visual Studio Code等)来查看文件的字符编码格式。通常在编辑器的底部状态栏或设置中可以找到当前编码的显示。请注意,上述方法并非绝对准确,特别是当文件没有明确的编码标识时。因此,如果你发现CSV文件在不同的工具或方法中显示不同的编码格式,可能需要进行进一步的分析和判断,或者尝试使用不同的编码转换方法。该命令将输出文件的MIME类型和编码信息。使用命令行工具:在命令行中,你可以使用。_shell读取csv文件逐行处理
本文介绍了如何在Linux系统中升级gcc版本,以便更好地支持C++11及以上版本的新特性。通过升级gcc,可以提升编译器的功能和性能,获得更好的开发体验。详细的步骤和方法请参考原文链接。
文章浏览阅读4.4k次,点赞6次,收藏19次。Mosquitto是一个开源的MQTT消息代理服务器。MQTT是一个轻量级的、基于发布/订阅模式的消息传输协议。 mosquitto的安装使用比较简单,可以方便的来进行一些测试。_linux mosquitto
文章浏览阅读7.2k次,点赞2次,收藏12次。Linux中,用于根目录下有一个.ssh目录,保存了ssh相关的key和一些记录文件。_~/.ssh/
文章浏览阅读4.5k次,点赞5次,收藏18次。首先需要安装 snmp ,使用下面的命令进行安装安装完毕之后,使用下面的命令查看是否安装成功当命令行显示如图即为安装成功。_snmp工具