Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

82 篇文章 1 订阅
BiliBili(简称B站),想必大家都不陌生。 Ijkplayer 框架是B站提供了一个开源的流媒体解决方案,集成了  ffmpeg,还支持硬解码(需  iOS8 以上版本)。使用  Ijkplayer 框架我们可以很方便地实现视频直播功能( Http/ RTMP/ RTSP 这几种直播源都支持)。
本文主要介绍如何使用  Ijkplayer 框架播放在线直播视频(当然其本地播放能力也很强大)。对于几种直播流不太清楚地,可以参考我前面写的这篇文章: RTMP、RTSP、HTTP视频协议详解(附:直播流地址、播放软件)

一,环境部署
在使用  Ijkplayer 前,我们需要先搭建运行环境。
1,在“终端”中运行如下命令,安装homebrew, git, yasm等环境。
1
2
3
brew install git
brew install yasm

2,将Ijkplayer项目下载到本地
GitHub 地址: https://github.com/Bilibili/ijkplayer
或者在“终端”中使用  git  命令下载到本地:
1
git clone https: //github.com/Bilibili/ijkplayer.git ijkplayer-ios

3,将ffmpeg集成到ijkplayer中
运行如下命令,进入项目文件夹并集成  ffmpeg
1
2
3
4
5
6
7
8
cd ijkplayer-ios
git checkout -B latest k0.6.0
 
./ init -ios.sh
 
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

二、运行样例
Ijkplayer  工程目录中自带了一个  demo  样例,我们可以先运行下看看效果。
1,打开ios文件夹下的IJKMediaDemo工程
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

2,运行后界面如下
可以选择播放本地文件,或者输入视频地址来播放。同时  demo 中还自带了一些视频源,可以直接点击播放。
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

3,在Input URL页面中输入视频地址即可播放
不过程序默认做了限制,只能播放  http/ https 视频流。
我们这里可以修改下,放开限制。让其也能支持其它协议视频播放(比如  RTMP 协议)。
将  IJKDemoInputURLViewController.m 中的相关判断给注释掉即可。
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

1
2
3
4
5
//if ([scheme isEqualToString:@"http"] || [scheme isEqualToString:@"https"]) {
     [ IJKVideoViewController  presentFromViewController: self  withTitle:[ NSString  stringWithFormat:@ "URL: %@" , url]  URL :url completion:^{
//            [self.navigationController popViewControllerAnimated:NO];
     }];
//}

三、将Ijkplayer集成到我们的项目中来
下面我们通过一个样例演示在我们项目中如何通过  ijkplayer 来播放视频流。官方提供的  demo 用的是  OC,这里我使用  Swift 来实现。
1,制作framework
首先我们要将  IJKMediaPlayer 编译成  framework,这样不仅体积小,而且使用起来也更加方便。
(1)打开  IJKMediaPlayer.xcodeprojios/ IJKMediaPlayer 文件夹下)
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

(2)点击  IJKMediaFramework 出现选择框,选择  edit scheme
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

(3)将  build configuration 改为  Release
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

(4)分别在模拟器和真机( Generic iOS Device 也可以)上编译
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

(5)我们打开生成  framework 的目录
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

(6)可以看到这里生成了两个  framework。看名字就知道一个是给模拟器使用,一个是给真机使用。这个根据个人的运行需求选择对应的  framework
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

(7)当然如果在开发阶段,真机模拟器都需要调试这样切来切去就太麻烦了。我们将两个  framework 合并,这样就可以同时在真机和模拟器上调试了。
我们进入  Products 目录,输入如下  lipo 命令将二者合并输出:
1
lipo -create Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output IJKMediaFramework

(8)接着将合并后的  framework  拷贝到  Release-iphoneos/IJKMediaFramework.framework 
1
cp IJKMediaFramework Release-iphoneos/IJKMediaFramework.framework/

(9)我们可以通过  lipo -info IJKMediaFramework  命令查看  framework  支持情况。可看到现在这个真机、模拟器都是支持的。
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

2,项目配置
(1)我们将前面制作好的  frameworkRelease-iphoneos/IJKMediaFramework.framework)添加到我们项目中来。
 
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

(2)接着添加一些依赖的动态库。
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
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

四、测试样例
项目配置完毕后,接下来写一个简单的样例演示如何使用  ijkplayer
1,样例效果图
程序启动后会自动播放一个采用  RTMP 协议的直播,并全屏显示。
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

同时播放视图会自适应手机横、竖两种状态。
原文:Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)

2,样例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import  UIKit
import  IJKMediaFramework
 
class  ViewController UIViewController  {
     
     var  player: IJKFFMoviePlayerController !
     
     override  func  viewDidLoad() {
         super .viewDidLoad()
         
         let  options =  IJKFFOptions .optionsByDefault()
         
         //视频源地址
         let  url =  NSURL (string:  "rtmp://live.hkstv.hk.lxdns.com/live/hks" )
         //let url = NSURL(string: "http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8")
 
         //初始化播放器,播放在线视频或直播(RTMP)
         let  player =  IJKFFMoviePlayerController (contentURL: url, withOptions: options)
         //播放页面视图宽高自适应
         let  autoresize =  UIViewAutoresizing . FlexibleWidth .rawValue |
             UIViewAutoresizing . FlexibleHeight .rawValue
         player.view.autoresizingMask =  UIViewAutoresizing (rawValue: autoresize)
         
         player.view.frame =  self .view.bounds
         player.scalingMode = . AspectFit  //缩放模式
         player.shouldAutoplay =  true  //开启自动播放
         
         self .view.autoresizesSubviews =  true
         self .view.addSubview(player.view)
         self .player = player
     }
     
     override  func  viewWillAppear(animated:  Bool ) {
         //开始播放
         self .player.prepareToPlay()
     }
     
     override  func  viewWillDisappear(animated:  Bool ) {
         //关闭播放器
         self .player.shutdown()
     }
     
     override  func  didReceiveMemoryWarning() {
         super .didReceiveMemoryWarning()
     }
}

原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_1326.html
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值