美文网首页
直播项目笔记(六)

直播项目笔记(六)

作者: Closer3 | 来源:发表于2017-11-30 20:03 被阅读0次

    FFmpeg + 流媒体协议

    FFmpeg

    FFmpeg简介

    • FFmpeg是一个非常强大的音视频处理库,包括视频采集功能、视频格式转换、视频抓图、给视频加水印等
    • FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等

    Mac安装/使用FFmpeg

    • 安装
      • ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
      • brew install ffmpeg
    • 简单使用
      • 转化格式: ffmpeg -i story.webm story.mp4
      • 分离视频: ffmpeg -i story.mp4 -vcodec copy -an demo.mp4
      • 分离音频: ffmpeg -i story.mp4 -acodec copy -vn demo.aac
      • 合并:ffmpeg -i "concat:1.mp4|2.mp4" -c copy output.mp4

    流媒体协议

    HLS(HTTP Live Streaming)

    • HTTP Live Streaming(HLS)是苹果公司实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播。原理上是将视频流分片成一系列HTTP下载文件。所以,HLS比RTMP有较高的延迟。HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件
      • 相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。
      • 由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。
    • 工作流程为:
      • 采集视频源和音频源的数据
      • 对原始数据进行H264编码和AAC编码
      • 视频和音频数据封装为MPEG-TS包
      • HLS分段生成策略及m3u8索引文件
      • HTTP传输协议传输数据
    • 使用FFmpeg命令将mp4文件切换成m3u8&ts切片
    // 安装Homebrew
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    // 安装FFmpeg
    brew install ffmpeg
    // 执行转换命令
    ffmpeg -i XXX.mp4 -c:v libx264 -c:a copy -f hls XXX.m3u8
    

    RTMP

    • RTMP协议是 Adobe 公司开发的一个基于TCP的应用层协议,Adobe 公司也公布了关于RTMP的规范
    • TMP本质上是流协议,主要的优势是:
      • 实时性高:RTMP的实时性在3秒之内,经过多层CDN节点分发后,实时性也在3秒左右,在一些实时性有要求的应用中以RTMP为主。
      • 支持加密:RTMPE和RTMPS为加密协议
      • 稳定性高:HTTP也很稳定,但HTTP是在协议上稳定稳定性不只是服务端的事情,在CDN分发,服务器管理,客户端的支持上
    • RTMP的使用
      • RTMP协议也要客户端和服务器通过“握手”来建立基于传输层链接之上的RTMP Connection链接,在Connection链接上会传输一些控制信息
      • TMP协议传输时会对数据做自己的格式化,这种格式的消息我们称之为RTMP Message
      • 而实际传输的时候为了更好地实现多路复用、分包和信息的公平性,发送端会把Message划分为带有Message ID的Chunk,每个Chunk可能是一个单独的Message,也可能是Message的一部分,在接受端会根据chunk中包含的data的长度,message id和message的长度把chunk还原成完整的Message,从而实现信息的收发。

    iOS中实现推流

    推流概述

    • 采用RTMP进行推流, 因为该协议实时性非常的高, 但是将Message封装成Trunk的过程非常麻烦, 所有我们这里直接采用框架实现推流.
    • 常见的推流框架
      • Swift框架: lf.swift
      • OC框架: LFLiveKit

    推流框架的使用

    • LFLiveKit是一个集成了视频采集-美颜-编码-推流为一体的框架,并且使用起来非常的简单, 我们可以在iOS中直接使用该框架进行推流

    相关文章

      网友评论

          本文标题:直播项目笔记(六)

          本文链接:https://www.haomeiwen.com/subject/iadbbxtx.html