ffserver 作为 rtsp 服务器
来源:互联网 发布:多开分身软件 编辑:程序博客网 时间:2024/05/29 14:46
ffmpeg和ffserver配合使用可以实现实时的流媒体服务,这里实时的数据来自摄像头,如果考虑到应用程序和网络状况,这里客户端看到的画 面还是会落后与摄像头本地获取的画面,最糟糕时甚至看不到画面(扯远了),这里我们关注的是ffmpeg和ffserver之间是如何配合工作的,了解了 他们之间的关系,对个别问题也能有的放矢。
ffserver先于ffmpeg启动,它在启动的时候需要加参数-f指定其配置文件,配置文件里包含有向客户端传送的流的配置(如编码方式,帧 率,采样率……),也有对feed1.ffm的配置,还有其他的一些配置。feed1.ffm是什么?这里可以理解为一个缓冲文件,下面会提到它是如何被 用到,ffserver启动后,feed1.ffm就会被创建,这时如果你打开feed1.ffm看看,会发现feed1.ffm开始的部分已经写入了内 容,你可以找到关键字ffm以及向客户端传送流的配置信息,在feed1.ffm做缓冲用的时候,这些信息是不会被覆盖掉的,就把它们理解为 feed1.ffm文件的头吧。
ffserver启动后,ffmpeg启动,它启动时加的一个关键参数就是“http://ip:8090/feed1.ffm”,其中ip是运行 ffserver主机的ip,如果ffmpeg和ffserver都在同一系统中运行的话,用localhost也行。ffmpeg启动后会与 ffserver建立一个连接(短暂的连接),通过这第一次的连接,ffmpeg从ffserver那里获取了向客户端输出流的配置,并把这些配置作为自 己编码输出的配置,然后ffmpeg断开了这次连接,再次与ffserver建立连接(长久的连接),利用这个连接ffmpeg会把编码后的数据发送给 ffserver。如果你观察ffserver端的输出就会发现这段时间会出现两次HTTP的200,这就是两次连接的过程。
ffmpeg从摄像头获取数据后,按照输出流的编码方式编码,然后发送给ffserver,ffserver收到ffmpeg的数据后,如果网络上 没有播放的请求,就把数据写入feed1.ffm中缓存,写入时把数据加上些头信息然后分块,每块4096B(每块也有结构),当feed1.ffm的大 小到了ffserver.conf中规定的大小后,就会从文件开始(跳过头)写入,覆盖旧的数据。直到网络上有播放的请求,ffserver从 feed1.ffm中读取数据,发送给客户端。
上面粗略的描述在实时流媒体服务时ffmpeg和ffserver的关系,这些看法都是在阅读较早FFmpeg代码(very old)时得出的,现在不知这个架构是否改变,兄弟我把砖扔出,希望大家用玉来砸。
http://hi.baidu.com/%D3%E5%CE%E4%CC%D5/blog/item/400f2c00b1b29697e950cded.html
- ffserver 作为 rtsp 服务器
- ffmpeg ffserver 作为 rtsp 服务器
- ffserver RTSP服务器配置
- ffserver配置流媒体服务器
- ffmpeg+ffserver搭建流媒体服务器
- ffmpeg+ffserver配置直播服务器
- ffmpeg+ffserver搭建流媒体服务器
- ffmpeg+ffserver搭建流媒体服务器
- ffmpeg+ffserver 搭建流媒体服务器
- ffmpeg+ffserver搭建流媒体服务器
- ffmpeg+ffserver搭建流媒体服务器
- ffmpeg+ffserver搭建流媒体服务器
- ffmpeg+ffserver搭建流媒体服务器
- ffmpeg+ffserver搭建流媒体服务器
- FFServer
- RTSP 服务器
- rtsp 服务器
- 关于利用ffserver搭建RTSP服务的代码 Streaming with FFServer
- 启动oracle服务有三种方式:
- python从0单排一
- SQL注入
- 两端对齐-小方法
- 冒泡排序和快速排序
- ffserver 作为 rtsp 服务器
- linux阻塞与非阻塞,同步与异步、I/O模型
- 顺序查找和二分查找
- CVE-2013-5211漏洞整改方法
- 统计单词个数 状态机方法
- 我的Unity3D学习日记-04(Transform,Time,Mathf类以及动态在场景中生成Prefab)
- mysql从csv文件导入数据时提示int类型出现' '(空字符串)
- 栈实现的带括号的计算器
- Delete a node, only give access to that node.