物联网学习日记25

1.收流与推流
解析:流媒体系统涉及三个角色:流媒体服务器、推流客户端和收流客户端。推流客户端是内容生产者,收流客户端是内容消费者。
[1]如果输入是网络流,输出是本地文件,则实现的是收流功能,将网络流存储为本地文件
[2]如果输入是本地文件,输出是网络流,则实现的是推流功能,将本地文件推送到网络
[3]如果输入是网络流,输出也是网络流,则实现的是转流功能,将一个流媒体服务器上的流推送到另一个流媒体服务器

2.nginx-rtmp
解析:流媒体服务器。

3.FFmpeg相关工具
解析:
[1]ffserver:简单的流媒体服务器
[2]ffmpeg:进行媒体文件转码的命令行工具
[3]ffprobe:用于查看媒体文件头信息的工具
[4]ffplay:用于播放媒体文件的工具

4.ffmpeg-python
解析:ffmpeg-python封装FFmpeg,并支持FFmpeg复杂的过滤器功能,因其只是一个封装,所以要配合查阅FFmpeg文档使用。

5.Intel Media SDK
解析:Media SDK是一个软件开发库,包含解码、视频处理和编码三大模块。利用Intel平台的硬件加速能力,Media SDK为低端用户提供了优秀的高清视频质量,极大的降低了播放高清视频的硬件门槛。此外,强大的视频APIs也减轻了程序开发者的工作负担,使它们能够集中精力去处理程序的逻辑模块,而不必关心于Media SDK内部的复杂编解码逻辑及其如何提高效率。

6.GStreamer技术概述
解析:
[1]GStreamer的程序通过连接数字媒体处理的元素注入管道[pipeline]。每个元素是由一个插件提供。元素可组合为箱[bins],箱可以进一步聚合,从而形成架构图。
[2]元素沟通是透过垫[pads]。来源垫[source pad]上一个元素可以被连接到一个接收垫[sink pad]在另一个。当管道是在播放状态,数据缓冲流[data buffers flow]从来源垫[source pad]流向接收垫[sink pad]。
[3]使用GStreamer播放MP3文件:该文件的源读取MP3文件从一台计算机的硬盘驱动程序,并将其发送到MP3解码器。解码器解码该MP3数据,并转换成PCM,然后传递到ALSA声音驱动。ALSA的声卡驱动程序发送 PCM声音样本,最后从计算机的扬声器播放。

7.GStreamer插件集合的名称
解析:
[1]Good:此一类的GStreamer插件来自于优秀组,具有高品质的LGPL认证,或依照GStreamer的contains a set of well-supported plug-ins under our preferred license认证。
[2]Bad:GStreamer所谓的不良插件是指未经up-to-par的处理。这类插件已经很接近高品质,但还缺乏一些认证事谊:代码审核、需要文件说明、大量测试、真正的维修人员,或大量的使用群。
[3]Ugly:GStreamer所谓的“丑恶”插件可能是品质良好,但是出现布署[distribution]上的问题。

8.DeepStream
解析:下一代智慧城市的视频分析。NVIDIA的DeepStream SDK提供了一整套数据流分析工具包,透过智能视频分析[IVA]和多传感器的数据处理来感知情景和意识。

9.GStreamer Core Framework
解析:
[1]上层应用所需接口
[2]Plugin的框架
[3]Pipline的框架
[4]数据在各个Element间的传输及处理机制
[5]多个媒体流[Streaming]间的同步[比如音视频同步]
[6]其它各种所需的工具库

10.GStreamer Plugins
解析:
[1]Protocols:负责各种协议的处理,file,http,rtsp等。
[2]Sources:负责数据源的处理,alsa,v4l2,tcp/udp等。
[3]Formats:负责媒体容器的处理,avi,mp4,ogg等。
[4]Codecs:负责媒体的编解码,mp3,vorbis等。
[5]Filters:负责媒体流的处理,converters,mixers,effects等。
[6]Sinks:负责媒体流输出到指定设备或目的地,alsa,xvideo,tcp/udp等。

11.GstElement分类
解析:
[1]Source Element数据源元件:只有输出端,它仅能用来产生供管道消费的数据,而不能对数据做任何处理。一个典型的数据源元件的例子是音频捕获单元,它负责从声卡读取原始的音频数据,然后作为数据源提供给其它模块使用。
[2]Filter Element过滤器元件:既有输入端又有输出端,它从输入端获得相应的数据,并在经过特殊处理之后传递给输出端。一个典型的过滤器元件的例子是音频编码单元,它首先从外界获得音频数据,然后根据特定的压缩算法对其进行编码,最后再将编码后的结果提供给其它模块使用。
[3]Sink Element接收器元件:只有输入端,它仅具有消费数据的能力,是整条媒体管道的终端。一个典型的接收器元件的例子是音频回放单元,它负责将接收到的数据写到声卡上,通常这也是音频处理过程中的最后一个环节。

12.GStreamer箱柜[bin]
解析:箱柜[bin]是GStreamer框架中的容器元件,它通常被用来容纳其它的元件对象,但由于其自身也是一个GstElement对象,因此实际上也能够被用来容纳其它的箱柜对象。利用bin可以将需要处理的多个元件组合成一个逻辑元件,不再需要对箱柜中的元件逐个进行操作,而只需处理一个bin元件即可。

13.GStreamer应用程序中使用的箱柜两种类型
解析:
[1]GstPipeline管道是最常用到的容器,对于一个GStreamer应用程序来讲,其顶层箱柜必须是一条管道。
[2]GstThread线程的作用在于能够提供同步处理能力,如果GStreamer应用程序需要进行严格的音视频同步,一般都需要用到这种类型的箱柜。

14.GStreamer元件的状态
解析:
[1]GST_STATE_NULL:这是默认状态。在这种状态下没有分配资源,因此,转换到此状态将释放所有资源。当元件的引用计数达到0并被释放时,该元件必须处于此状态。
[2]GST_STATE_READY:在就绪状态下,元件已分配了其所有全局资源,即可以保留在流中的资源。可以考虑打开设备,分配缓冲区等。但是在这种状态下不会打开流,因此流位置自动为零。如果先前已打开流,则应在此状态下将其关闭,并应重置位置,属性等。
[3]GST_STATE_PAUSED:在此状态下,元件已打开流,但未对其进行处理。此时元件可以修改流的位置,读取和处理数据,状态一旦更改为PLAYING,即可开始播放。总之,PAUSED与PLAYING相同,只是PAUSED没有运行时钟。
[4]GST_STATE_PLAYING:在该PLAYING状态下,与该PAUSED状态下完全相同,只是时钟现在运行。

15.GStreamer衬垫[Pad]
解析:衬垫[pad]是GStreamer框架引入的另外一个基本概念,它指的是元件[element]与外界的连接通道,衬垫pad是元件的输入和输出,它们用于协商GStreamer中元件之间的链接和数据流。可以将pad视为元件上的“插头”或“端口”,与其它元件建立链接后,数据可以通过pad流入或流出其它元件。
说明:绝大多数元件有一个输入pad[sink]和一个输出pad[src]。

16.[src] ! [sink src] ! [sink]
解析:最左边的元件只有一个src pad用来提供数据,接下来的元件接收信息并做一些处理后,传给下一个元件,因此它们有sink和src pad,最后一个元件sink pad只接收数据。

17.GStreamer 总线[Bus]
解析:总线是一个简单的系统,负责将消息从管道传递到应用程序。默认情况下,每个管道都包含一个总线,因此应用程序不需要创建总线或任何东西。应用程序唯一要做的就是在总线上设置消息处理程序,这类似于对对象的信号处理程序。当mainloop运行时,将定期检查总线上是否有新消息,并且在有任何消息可用时将调用回调。

18.使用git clone命令克隆文件出现error: RPC failed; curl 18 transfer closed with outstanding read data remain问题
解析:git config --global http.postBuffer 524288000

19.–depth 1
解析:depth用于指定克隆深度,为1即表示只克隆最近一次commit。它只会把默认分支clone下来,其它远程分支并不在本地,所以这种情况下,需要用如下方法拉取其它分支:

$ git clone --depth 1 https://github.com/dogescript/xxxxxxx.git
$ git remote set-branches origin 'remote_branch_name'
$ git fetch --depth 1 origin remote_branch_name
$ git checkout remote_branch_name

20.clang-format
解析:它是基于clang的一个命令行工具,能够自动化格式C/C++/Obj-C代码,支持多种代码风格:Google、Chromium、LLVM、Mozilla、WebKit,也支持自定义风格[通过编写.clang-format文件]很方便的统一代码格式。

21.Cerbero
解析:Cerbero是一个服务于开源项目的多平台编译系统,它为不同体系、发行版的平台编译并创建本地化package。

22.xhost local:root
解析:xhost是用来控制X server访问权限的,这个命令将允许别的用户启动的图形程序将图形显示在当前屏幕上。通常当从hostA登陆到hostB上运行hostB上的应用程序时,做为应用程序来说,hostA是client,但是作为图形来说,是在hostA上显示的,需要使用hostA的X server,所以hostA是server。因此在登陆到hostB前,需要在hostA上运行xhost +,来使其它用户能够访问hostA的X server,如下所示:
[1]xhost +:使所有用户都能访问X server
[2]xhost + ip:使ip上的用户能够访问X server
[3]xhost + nis:user@domain:使domain上的nis用户user能够访问
[4]xhost + inet:user@domain:使domain上的inet用户能够访问

23.docker --net=host
解析:容器就和宿主机共用网络。

24.docker run --privileged
解析:使用该参数,container内的root拥有真正的root权限,否则container内的root只是外部的一个普通用户权限。privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许在docker容器中启动docker容器。

25.docker run --rm
解析:docker run加上–rm退出容器以后,这个容器就被删除了,方便在临时测试使用。

参考文献:
[1]RTMP流媒体技术零基础学习方法:https://blog.csdn.net/leixiaohua1020/article/details/15814587
[2]IP Camera视频流接入EdgeX Foundry操作实例:https://www.edgexfoundry.club/articles/users/lulililu/5d8d93356598210001292c9b
[3]IP Camera等设备的视频流接入EdgeX Foundry:https://www.edgexfoundry.club/articles/users/huaqiaoz/5d0c8ac5e3f1bf0001e85e9a
[4]详细的GStreamer开发教程:https://blog.csdn.net/han2529386161/article/details/102896875
[5]什么是Gstreamer:https://www.cnblogs.com/xleng/p/10948838.html
[6]DISPLAY变量和xhost:https://www.cnblogs.com/js1314/p/10373332.html

发布了400 篇原创文章 · 获赞 423 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/shengshengwang/article/details/105174476