zoukankan      html  css  js  c++  java
  • 直播工作原理

    twtFiT.png
    摄像头作为直播源,接收数据后,会将其转化为流,二进制数据需经过websocket等上传到服务器。即将开始进行四个步骤。
    第一步,便是要对原始的流进行编码。该视频编码的常见格式为H.264,音频编码为AAC,这两种是直播里面最常见的编码形式。具体我们后面会介绍。
    编码完后,可以对视频进行字幕叠加或者加水印等。
    最后进行推流,加特效,推送到服务器上,再推到CDN上。而客户则将直接从CDN上得到视频数据。
    然后就可以在客户的播放器进行播放。

    常见的视频格式和其支持的浏览器
    twtPoV.png

    常用协议

    HLS协议

    使用最广泛的直播协议
    由苹果推出的直播协议。在曾经的视频播放,都是flash的天下。如今flash已经衰退,直播都几乎采用video格式。
    如今也是借助video来播放。对HLS协议来说,它会把一个M3U8索引文件交给video标签来播放。
    然后video就会根据M3U8文件的索引来拉取.ts文件。每个ts文件平均2s左右。每过一小段时间,原有的M3U8文件的索引用完了,M3U8就会更新一次,然后继续请求新的.ts文件。
    twYxMj.png
    (M3U8文件里面也有可能嵌套,M3U8文件内含有M3U8索引文件。)

    HLS协议包含三种列表:
    live playlist 动态列表 (直播)

    静态列表
    vod playlist 全量列表(点播)

    M3U8文件内部:
    twt9Zq.png
    第一句 是,M3U8的版本
    而第三句则是默认视频时长
    第四句表示当前的M3U8文件的序号,动态变化的。
    最后一部分则是时间戳,表示每个ts文件的视频时长及其文件地址。

    而ts文件内部的大概构成则如下:
    twYjzQ.png
    PAT会指示出PMT的位置,然后PMT去解析TS哪些是音频 哪些是视频。然后把相连的音频、视频去连接起来。

    RTMP协议

    RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议以及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash、AIR平台和支持RTMP协议的流媒体、交互服务器之间进行音视频和数据通信。
    twYzss.png
    实时性较好,但操作起来较复杂。
    使用FLV协议

    HTTP-FLV协议

    相对于RTMP使用更简单,而且更多应用场景。但是相对于RTMP协议来说,其延时会相对较高。建立了长连接,中间传输的格式都是FLV。和RTMP协议最大的区别就是采用的HTTP连接。
    twtSLn.png
    其具有较为明显的优点:
    1、避免防火墙干扰
    2、兼容HTTP302跳转
    3、可使用HTTPS做加密通道
    4、支持移动端

    你好啊,谢谢你来看我。
  • 相关阅读:
    CMD文件分析
    #ifdef __cplusplus
    nginx查看post请求日志
    JNI常见错误1
    include、include_once与require、require_once区别
    在Windows下利用Eclipse调试FFmpeg
    在Windows下利用MinGW编译FFmpeg
    图文详解YUV420, yuv格式2
    yuv rgb 像素格式1
    libyuv 编译for ios
  • 原文地址:https://www.cnblogs.com/sitr/p/13041183.html
Copyright © 2011-2022 走看看