zoukankan      html  css  js  c++  java
  • ffserver联合ffmpeg建立媒体服务器

    ffmpegffserver配合使用可以实现实时的流媒体服务。

    初次接触,可能很多人都会被搞得云里雾里。

    这里其实有四个东西,搞清楚他们的关系,也就明白了。

    1. ffmpeg

    2. ffserver

    3. ffserver.conf

    4. feed1.ffm

    1. ffmpeg,负责媒体文件的transcode工作,把你服务器上的源媒体文件转换成要发送出去的流媒体文件。

    2. ffserver,负责响应客户端的流媒体请求,把流媒体数据发送给客户端。

    3. ffserver.conf,ffserver启动时的配置文件,在这个文件中主要是对网络协议,缓存文件feed1.ffm(见下述)和要发送的流媒体文件的格式参数做具体的设定。

    4. feed1.ffm,可以看成是一个流媒体数据的缓存文件,ffmpeg把转码好的数据发送给ffserver,如果没有客户端连接请求,ffserver把数据缓存到该文件中。

    流媒体服务器的建立流程:

    1. 配置ffserver.conf文件,初次学习,可以直接使用ffmpeg源代码中doc/ffserver.conf。(具体配置方法在这里不赘述,以后再说)。

    2. ./ffserver -f doc/ffserver.conf & ./ffmpeg -i INPUTFILE http://localhost:8090/feed1.ffm,启动ffserver和ffmpeg。ffserver先于ffmpeg启动,它在启动的时候需要加参数-f指定其配置文件。ffserver启动后,feed1.ffm就会被创建,这时如果你打开feed1.ffm看看,会发现feed1.ffm开始的部分已经写入了内容,你可以找到关键字ffm以及向客户端传送流的配置信息,在feed1.ffm做缓冲用的时候,这些信息是不会被覆盖掉的,就把它们理解为 feed1.ffm文件的头吧。

    ffserver启动后,ffmpeg启动,它启动时加的一个关键参数就是“http://ip:8090/feed1.ffm”,其中ip是运行 ffserver主机的ip,如果ffmpegffserver都在同一系统中运行的话,用localhost也行。ffmpeg启动后会与 ffserver建立一个连接(短暂的连接),通过这第一次的连接,ffmpegffserver那里获取了向客户端输出流的配置,并把这些配置作为自己编码输出的配置,然后ffmpeg断开了这次连接,再次与ffserver建立连接(长久的连接),利用这个连接ffmpeg会把编码后的数据发送给 ffserver。如果你观察ffserver端的输出就会发现这段时间会出现两次HTTP200,这就是两次连接的过程。

    ffmpeg从摄像头获取数据后,按照输出流的编码方式编码,然后发送给ffserverffserver收到ffmpeg的数据后,如果网络上没有播放的请求,就把数据写入feed1.ffm中缓存,写入时把数据加上些头信息然后分块,每块4096B(每块也有结构),当feed1.ffm的大小到了ffserver.conf中规定的大小后,就会从文件开始(跳过头)写入,覆盖旧的数据。直到网络上有播放的请求,ffserver feed1.ffm中读取数据,发送给客户端。

    3. 使用网络上的另外一台机器进行测试。用windows media player或VLC打开http://<linuxbox>:8090/test.asf ,就可以播放刚才的流媒体视频了。

  • 相关阅读:
    团队冲刺2---个人工作总结一(5.25)
    第十二周学习进度
    课堂作业——找水王
    个人冲刺07
    第十五周学习进度情况
    构建之法阅读笔记06
    构建之法阅读笔记05
    第十四周学习进度情况
    个人冲刺06
    个人冲刺05
  • 原文地址:https://www.cnblogs.com/zjoch/p/3077271.html
Copyright © 2011-2022 走看看