转载 2017年03月10日 11:53:03
- **868
最近在研究IOS下播放RTSP RTMP等视频流,目前已测试成功。
转载地址:http://www.hangge.com/blog/cache/detail_1326.html
BiliBili(简称B站),想必大家都不陌生。Ijkplayer 框架是B站提供了一个开源的流媒体解决方案,集成了 ffmpeg,还支持硬解码(需 iOS8 以上版本)。使用 Ijkplayer 框架我们可以很方便地实现视频直播功能(Http/RTMP/RTSP 这几种直播源都支持)。
本文主要介绍如何使用 Ijkplayer 框架播放在线直播视频(当然其本地播放能力也很强大)。对于几种直播流不太清楚地,可以参考我前面写的这篇文章:RTMP、RTSP、HTTP视频协议详解(附:直播流地址、播放软件)
一,环境部署
在使用 Ijkplayer 前,我们需要先搭建运行环境。
1,在“终端”中运行如下命令,安装homebrew, git, yasm等环境。
2,将Ijkplayer项目下载到本地
GitHub
地址:
https://github.com/Bilibili/ijkplayer
或者在“终端”中使用
git
命令下载到本地:
3,将ffmpeg集成到ijkplayer中
运行如下命令,进入项目文件夹并集成
ffmpeg
。
二、运行样例
Ijkplayer
工程目录中自带了一个
demo
样例,我们可以先运行下看看效果。
1,打开ios文件夹下的IJKMediaDemo工程
2,运行后界面如下
可以选择播放本地文件,或者输入视频地址来播放。同时 demo 中还自带了一些视频源,可以直接点击播放。
3,在Input URL页面中输入视频地址即可播放
不过程序默认做了限制,只能播放 http/https 视频流。
我们这里可以修改下,放开限制。让其也能支持其它协议视频播放(比如 RTMP 协议)。
将 IJKDemoInputURLViewController.m 中的相关判断给注释掉即可。
三、将Ijkplayer集成到我们的项目中来
下面我们通过一个样例演示在我们项目中如何通过 ijkplayer 来播放视频流。官方提供的 demo 用的是 OC,这里我使用 Swift 来实现。
1,制作framework
首先我们要将 IJKMediaPlayer 编译成 framework,这样不仅体积小,而且使用起来也更加方便。
(1)打开 IJKMediaPlayer.xcodeproj(ios/IJKMediaPlayer 文件夹下)
(2)点击 IJKMediaFramework 出现选择框,选择 edit scheme
(3)将 build configuration 改为 Release
(4)分别在模拟器和真机(Generic iOS Device 也可以)上编译
(5)我们打开生成 framework 的目录
(6)可以看到这里生成了两个 framework。看名字就知道一个是给模拟器使用,一个是给真机使用。这个根据个人的运行需求选择对应的 framework。
framework
我们进入 Products 目录,输入如下 lipo 命令将二者合并输出:
(8)接着将合并后的
framework
拷贝到
Release-iphoneos/IJKMediaFramework.framework
中
(9)我们可以通过
lipo -info IJKMediaFramework
命令查看
framework
支持情况。可看到现在这个真机、模拟器都是支持的。
2,项目配置
(1)我们将前面制作好的 framework(Release-iphoneos/IJKMediaFramework.framework)添加到我们项目中来。
AudioToolbox.framework
AVFoundation.framework
CoreGraphics.framework
CoreMedia.framework
CoreVideo.framework
libbz2.tbd
libz.tbd
MediaPlayer.framework
MobileCoreServices.framework
OpenGLES.framework
QuartzCore.framework
UIKit.framework
VideoToolbox.framework
四、测试样例
项目配置完毕后,接下来写一个简单的样例演示如何使用 ijkplayer。
1,样例效果图
程序启动后会自动播放一个采用 RTMP 协议的直播,并全屏显示。
同时播放视图会自适应手机横、竖两种状态。
2,样例代码
原文出自:
www.hangge.com
转载请保留原文链接: