1、什么是 FFmpeg ,FFmpeg 是一个开源免费跨平台的视频和音频流方案,属于自由软件,它提供了录制、转换以及流化音视频的完整解决方案。直播系统多使用该方案。
2、什么是 RTMP(Real Time Messaging Protocol:实时消息传输协议)Adobe公司开发。一个专门为高效传输视频,音频和数据而设计的协议。它通过建立一个二进制TCP连接或者连接HTTP隧道实现实时的视频和声音传输。
技术相对都比较成熟,设备也都支持硬编码。iOS还提供现成的 Video ToolBox框架,可以对摄像头和流媒体数据结构进行处理,但Video ToolBox框架只兼容8.0以上版本,8.0以下就需要用x264的库软编了。
github上有现成的开源实现,推流、美颜、水印、弹幕、点赞动画、滤镜、播放都有。技术其实不是很难,而且现在很多云厂商都提供SDK,七牛云、金山云、乐视云、腾讯云、百度云、斗鱼直播伴侣推流端,功能几乎都是一样的,没啥亮点,不同的是整个直播平台服务差异和接入的简易性。后端现在 RTMP/HTTP-FLV 清一色,App挂个源站直接接入云厂商或CDN就OK。
1、直播项目传输方式介绍
2、直播项目采集端(推送端)介绍
推流端可以选择很多GitHub上的开源项目,比如VideoCore 、LiveVideoCoreSDK 、LFLiveKit 。商用的话可以选择各大厂商的SDK,网易直播云、七牛、腾讯、百度、新浪。使用直播云的好处就是能快速上线App,功能十分齐全,可以播放器和推流端,服务器一套下来,有专业客服人员帮助集成到工程中,缺点就是流量费太贵了,具体可以了解下各大厂商的收费标准。
2.1.目前比较知名的有VideoCore
目前国内很多知名的推流框架都是对VideoCore的二次开发。这个框架主要使用C++写的,支持RTMP推流,但对于iOS开发者来说有点晦涩难懂(精通C++的除外)。想开源和免费的可以选择现在的几个知名项目VideoCore + GPUImage+基于GPU的美颜滤镜 ,播放用IJKPlayer自己修改。
2.2.国内比较火的LiveVideoCoreSDK
框架提供iOS苹果手机的RTMP推流填写RTMP服务地址,直接就可以进行推流,SDK下载后简单的工程配置后能直接运行,实现了美颜直播和滤镜功能,基于OpenGL,前后摄像头随时切换,提供RTMP连接状态的回调。
这个框架是国内比较早的一款推流框架有不少在使用这个SDK,功能非常齐全,作者也比较牛,用来学习推流采集相关内容非常好,但是集成到工程中有些困难(对于我来说)。总的来说这是一款非常厉害的推流SDK,几乎全部使用C++写的,编译效率非常好,如果有实力的话推荐使用这个框架来做自己项目的推流端。
2.3.可读性比较好的推流LFLiveKit
框架支持RTMP、HlS (HTTP Live Streaming:苹果自家的动态码率自适应技术) 。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。
推荐这个框架第一是因为它主要使用OC写的,剩下的用C语言写的,框架文件十分清晰,这对不精通C++的初学者提供了很大的便利,并且拓展性非常强,支持动态切换码率功能,支持美颜功能。
2.4.美颜功能
美颜的话一般都是使用GPUImage 的基于OpenGl开发,纯OC语言,这个框架十分强大,可以做出各种不同滤镜,可拓展性高。如果对美颜没有具体思路可以直接用BeautifyFace ,可以加入到项目中,很方便的实现美颜效果。
3、直播项目播放端介绍
播放端用的针对RTMP优化过的ijkplayer ,ijkplayer 是基于FFmpeg的跨平台播放器,这个开源项目已经被多个 App 使用,其中映客、美拍和斗鱼使用了 ijkplayer(8000+⭐️) 。可以参考这篇博客获取framework:iOS中集成ijkplayer视频直播框架 。也可以直接下载别人已经集成好的framework:IJKMediaFramework.framework
播放方法:
基于LiveVideoCoreSDK完整项目源码
1、搭建nginx+RTMP 服务器:Mac搭建nginx+rtmp服务器
i. 安装nginx (网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存) :
在浏览器里打开http://localhost:8080 如果出现下图, 则表示安装成功
ii. 配置nginx和RTMP:
找到nginx.conf
文件所在位置(/usr/local/etc/nginx/nginx.conf)
, 点击Finder
->前往
->前往文件夹
->输入/usr/local/etc/nginx/nginx.conf
-> 用记事本工具(推荐Sublime Text
) 打开 nginx.conf
。直接滚到最后一行, 在最后一个}
(即最后的空白处, 没有任何{}
)后面添加:
然后重启nginx(其中的1.10.1要换成你自己安装的nginx
版本号, 查看版本号用nginx -v
命令即可):
iii. 安装FFmpeg:
iv. 下载能播放流媒体的播放器VLC
下载后安装,打开 VLC,然后 File->open network(command+N
)输入:
v.开始FFMpeg推流:
mp4视频下载地址
下载视频到桌面后,执行推流命令:
VLC便开始播放流媒体:
2、下载基于LiveVideoCoreSDK完整项目源码
将项目中ViewController.m
的viewDidLoad
中改为如下:
iOS10
以上的手机需要在 info.plist
中加入直播所需要的权限:
运行即可直播!
3、直播项目采集端:从0到1开始集成LiveVideoCoreSDK
i. 在Desktop
新建文件夹HDLiveVideoCoreDemo
使用Xcode建立项目组(Workspace),命名为HDLiveVideoCoreDemo.xcworkspace
并保存在 HDLiveVideoCoreDemo
中:
ii、将基于LiveVideoCoreSDK完整项目源码 源码的LiveVideoCoreSDK
、LiveVideoCoreCoreSDK.xcodeproj
、RtmpLivePushSDK
复制到文件夹HDLiveVideoCoreDemo
中:
iii、打开HDLiveVideoCoreDemo.xcworkspace
,新建 LiveVideoCoreDemo.xcodeproj
项目:
iv、分别将LiveVideoCoreSDK.xcodeproj
和 RtmpLivePushSDK.xcodeproj
拖入到项目组中:
v、将libLiveVideoCoreSDK
加入到LiveVideoCoreDemo
项目中,并添加对应所需要的系统框架和tdb文件:
vi、到此为止,LiveVideoCoreSDK
依赖的环境系统文件已经集成到新项目中,接下来对项目进行必要的配置:
因为LiveVideoCoreSDK
不支持Bitcode
, 所以需要设置Enable Bitcode
为NO
因为LiveVideoCoreSDK.h
不在LiveVideoCoreDemo
项目中,所以需要 设置
Header Search Paths
: ../LiveVideoCoreSDK/
../LiveVideoCoreSDK/
这个是 LiveVideoCoreSDK.h
相对于LiveVideoCoreDemo.xcodeproj
的路径。
vii、添加代码运行。
LiveVideoCoreSDK
集成完毕!
Demo下载地址:HDLiveVideoCoreDemo
4、直播播放端:
播放端用的针对RTMP优化过的ijkplayer ,ijkplayer 是基于FFmpeg的跨平台播放器,这个开源项目已经被多个 App 使用,其中映客、美拍和斗鱼使用了 ijkplayer(8000+⭐️) 。可以参考这篇博客获取framework:iOS中集成ijkplayer视频直播框架 。也可以直接下载别人已经集成好的framework:IJKMediaFramework.framework
集成也很简单,新建项目,将下载的IJKMediaFramework.framework 加入到项目即可: