stream-m, 支持WebM和 H.264 格式的HTML5兼容流媒体服务器

分享于 

10分钟阅读

GitHub

  繁體 雙語
An HTML5-compatible live streaming server supporting with the WebM and H.264 formats.
  • 源代码名称:stream-m
  • 源代码网址:http://www.github.com/vbence/stream-m
  • stream-m源代码文档
  • stream-m源代码下载
  • Git URL:
    git://www.github.com/vbence/stream-m.git
    Git Clone代码到本地:
    git clone http://www.github.com/vbence/stream-m
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/vbence/stream-m
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    自述文件

    基于HTML5的流媒体m 是一个基于浏览器的开源解决方案,可以使用HTML5视频标签和的google,或者prolific的视频格式。

    目前的版本是一个工作 Prototype,它展示了。 主要的设计目标是低资源使用。 它具有一个带有实时带宽监视器( 分辨率为 1/10 秒)的网络接口,用于检测网络拥塞。

    支持独立流( 频道)。

    格式

    目前支持英镑和英镑的H.264,不过通过稍微不同的工作流程。

    web

    google web服务支持的第一个格式是 可以通过HTTP接口( 有关详细信息,请参阅 below ) 完成流的发布。

    <video> 标签中放置流URL应该能在所有的平台中工作。

    H.264

    带 AAC的 H.264 是第二个添加。 当前视频发布解决方案( 就像开放广播软件。) 被创建为与 adobe Flash 媒体服务器( )的兼容。 为了充分利用这些工具,流m 需要 "朗读 Flash",因此编写最小的 server服务器实现以处理传入流。

    当前的RTMP支持只限于从发布软件( 比如 OBS ) 接收流。 目前不支持通过RTMP使用( 正在播放) 流。

    play H.264 live流已经测试并在 Google Chrome 中运行,目前( Android版本包括)。 将流的URL直接放入 <video> 标记将无法使用这里格式。 另一方面,通过使用 MediaSource API ( 当前由HTML5的youtube视频播放器使用)"。

    包含一个演示播放器,它将以 first ( 示例配置文件中的默认名称)的名称播放流。 可以通过以下URL访问( 默认情况):

    
    http://localhost:8080/player-demo/player.html
    
    
    
    

    正在运行服务器

    
    java -jar stream-m.jar <configfile>
    
    
    
    

    在运行服务器之前,你应该编辑示例配置文件( 更改密码并选择流名称)。 所以你会得到这样的结果:

    
    java -jar stream-m.jar server.properties
    
    
    
    

    HTTP接口

    流由唯一名称标识。 程序将这里程序称为StreamID或者流名称。 注意,<> 字符用于表示替换,它们不能包含在结果URL中。

    注意:的许多部分仅与使用格式的流相关。 有关 H.264 流的特性,请参见特定节 上面。

    内置HTTP服务器的默认端口为英镑。

    每个流的名称和密码在配置文件中定义。 必须将带有POST或者PUT方法的流发送到以下URL才能启动广播:

    
    /publish/<streamname>?password=<streampass>
    
    
    
    

    可以在以下URL上访问流( ( 已经观看) )。 你可能希望将这里URL插入到 HTML5 <video> 标记中:

    
    /consume/<streamname>
    
    
    
    

    为了支持使用 MediaSource API,( 通过 请求 Fragments。) 附加的URL参数可以影响回放。 当前支持的获取参数:

    名称默认效果
    sendHeadertrue设置是否发送 header。
    singleFragmentfalse如果仅启用单个 fragment,则为。
    fragmentSequence只有当具有给定序列号的fragment 可用时,才会启动输出。

    可以在以下网址上以WebP格式下载快照( 最后一次完成的fragment的第一个关键帧):

    
    /snapshot/<streamname>
    
    
    
    

    可以通过基于AJAX的控制台( 在用户界面上给出所选流的名称和密码) 获取实时信息:

    
    /console/client.html
    
    
    
    

    接口接口

    目前,服务器只包含一个RTMP应用程序。 监听名称 publish 将获取流,组装帧然后将它的传递到常见的HTTP基础结构。

    内置的RTMP服务器的缺省端口是

    发布软件的终结点需要具有以下格式:

    
    /publish/<streamname>?<streampass>
    
    
    
    

    Fragments

    实时流由 Fragments ( 自包含框架的自包含单元,不引用 fragment 之外的任何框架) 组成。 fragment 总是以关键帧( 帧内帧) 开始,因此编码器放入关键帧时很重要,因为这决定了 Fragments的大小。

    理想的fragment 大小大约为 200 kb ( 或者 1600 kbits )。 可以使用以下公式计算关键帧间隔:

    
    1600k/<bitrate> * <framerate>
    
    
    
    

    如果你正在发布一个带有 16 fps的500流,则为 e.g,然后: 1600/500 * 16 = 51.2 ( 或者或 1600000/500000 * 16 = 51.2 ) 每 52nd 个视频帧都应该是一个关键帧。

    服务器在需要时拆分 Fragments。 帧大小的软最小值当前为 100k ( 如果新的关键帧从上一个关键帧到达 100 kb,则不会启动新的fragment )。

    Fragments的硬最大值为 2048 kb。 这是保存 2秒的4096/秒高清流所需大小的2 倍。

    发布 web

    Windows 系统上的

    理论上,可以使用几个开源工具。 实际上,如果你想在 Windows 中使用网络摄像头,你需要两个。

    可以使用的VLC来访问记录硬件和编码,但是它只会保存到一个文件中。 ( vlc的其它输出模块目前都不支持它)。 VLC都不能用POST方法发送流。

    在复用和输出时,FFmpeg 非常重要,但是 Windows 版本不能访问 DirectShow,你的声卡使用它来提供对麦克风数据的访问。

    所以我们要把它们都放在一起: VLC将访问音频,将它的压缩为临时格式( mp3 )。 rtc将连接到sdl以获得视频的音频和 ccr,将音频编码为和视频,将它们复制到容器。

    VLC将侦听本地端口: 8089对于 FFmpeg 连接,所以防火墙应该知道。

    假设:

    • 服务器名称:example.com
    • 流名称:first
    • 流密码:secret
    
    vlc -I dummy dshow://--sout 
    
    
    "#transcode{vcodec=none,acodec=mp3,ab=128,channels=2,samplerate=44100} :http{mux=ts,dst=127.0.0.1:8089/}" 
    
    
    --dshow-vdev=none --no-sout-rtp-sap --no-sout-standard-sap --sout-keep
    
    
    
    
    
    ffmpeg -f vfwcap -r 16 -i 0 -i http://localhost:8089/-g 52 
    
    
    -acodec libvorbis -ab 64k -vcodec libvpx -vb 448k 
    
    
    -f matroska http://example.com:8080/publish/first?password=secret
    
    
    
    

    Linux系统上的

    FFmpeg 可以与以下 命令行 ( 请参见假设 上面 ) 一起使用:

    
    ffmpeg -f video4linux2 -s 320x240 -r 16 -i/dev/video0 -f oss -i/dev/dsp 
    
    
    -g 52 -acodec libvorbis -ab 64k -vcodec libvpx -vb 448k 
    
    
    -f webm http://example.com:8080/publish/first?password=secret
    
    
    
    

    发布 H.264

    Windows 系统上的

    关于 Windows 上FFmpeg的特性,请参见 上面 ( 关于 WebM )。 我建议在FFmpeg之上使用OBS或者类似产品。

    Linux系统上的

    以下命令将从系统和麦克风的网络摄像头中流媒体。 请注意,高 profile和级别 4.0. 同时测试和工作是 medium profile profile profile profile profile profile profile。

    
    ffmpeg -f video4linux2 -s 320x240 -r 16 -i/dev/video0 -f oss -i/dev/dsp 
    
    
    -g 52 -strict experimental -acodec aac -ab 56k -vcodec libx264 -vb 452k 
    
    
    -profile:v high -level 40 -r 16 
    
    
    -f flv"rtmp://example.com:8081/publish/first?secret"
    
    
    
    

    测试安装

    你可以使用可以下载的示例视频 univac.webm 测试安装。 文件的编码平均为 512 Kbps。 FFmpeg 可以通过以下命令将流实时发送到服务器:

    
    ffmpeg -re -i univac.webm -vcodec copy -acodec copy 
    
    
    -f webm http://localhost:8080/publish/first?password=secret
    
    
    
    

    你可以通过将( webm能力能力) 浏览器定位到以下地址来监视它:

    
    http://localhost:8080/consume/first
    
    
    
    

    COM  Server  for  str  SUP  form  
    相关文章