IRPlayer-swift - 适用于iOS的强大视频播放器框架
IRPlayer-swift
IRPlayer-swift是一个强大的iOS视频播放器框架。
- 使用 IRPlayer 播放视频。
- 请参阅演示。
- 使用 IRPlayer 制作具有自定义 UI 的视频播放器。
- 使用IRPlayer播放IP摄像机流。
- 使用 IRPlayer 制作屏幕重码器。
- 使用 IRPlayer 进行 RTMP 流式传输。
- 请参阅 IRLiveKit
- 使用IRPlayer制作具有效果的视频播放器。
- 真正的真人玩家应用程序。
- 见 IRLive
特征
-
支持普通视频模式。
-
支持VR模式。
-
支持VR盒子模式。
-
支持鱼眼模式。
- 支持普通鱼眼模式。
- 支持鱼眼到全景模式。
- 支持鱼眼到透视模式。
-
支持多窗口。
-
支持多种模式选择。
-
0.3.6
- 支持将特定渲染设置为每种模式。
- Support custom video input(IRFFVideoInput). See what it works in IRIPCamera.
- Support custom display view(inherit IRGLView). See what it works in IREffectPlayer.
Install
Cocoapods
- Not yet
Usage
- more examples in the demo applications.
Basic
lazy var player: IRPlayerImp = {
return IRPlayerImp.player()
}()
self.player.registerPlayerNotification(target: self,
stateAction: #selector(stateAction(_:)),
progressAction: #selector(progressAction(_:)),
playableAction: #selector(playableAction(_:)),
errorAction: #selector(errorAction(_:)))
self.player.viewTapAction = { (player, view) in
print("player display view did click!")
}
if let playerView = self.player.view {
self.mainView.insertSubview(playerView, at: 0)
}
Set mode and video source
switch self.demoType {
case .avPlayerNormal:
self.player.replaceVideoWithURL(contentURL: PlayerViewController.normalVideo as NSURL)
case .avPlayerVR:
self.player.replaceVideoWithURL(contentURL: PlayerViewController.vrVideo as NSURL)
case .avPlayerVRBox:
self.player.displayMode = .box
self.player.replaceVideoWithURL(contentURL: PlayerViewController.vrVideo as NSURL)
case .ffmpegNormal:
self.player.decoder.mpeg4Format = .ffmpeg
self.player.decoder.ffmpegHardwareDecoderEnable = false
self.player.replaceVideoWithURL(contentURL: PlayerViewController.normalVideo as NSURL)
case .ffmpegNormalHardware:
self.player.decoder = IRPlayerDecoder.FFmpegDecoder()
self.player.replaceVideoWithURL(contentURL: PlayerViewController.normalVideo as NSURL)
case .ffmpegFisheyeHardware:
self.player.decoder = IRPlayerDecoder.FFmpegDecoder()
self.player.replaceVideoWithURL(contentURL: PlayerViewController.fisheyeVideo as NSURL)
case .ffmpegPanoramaHardware:
self.player.decoder = IRPlayerDecoder.FFmpegDecoder()
self.player.replaceVideoWithURL(contentURL: PlayerViewController.fisheyeVideo as NSURL)
case .ffmpegMultiModesHardwareModesSelection:
self.player.decoder = IRPlayerDecoder.FFmpegDecoder()
modes = self.createFisheyeModes(with: nil)
let sharedRender = IRGLRenderNV12()
for mode in modes ?? [] {
mode.renderer = sharedRender;
}
self.player.renderModes = modes
self.player.replaceVideoWithURL(contentURL: PlayerViewController.fisheyeVideo as NSURL)
self.modesButton.isHidden = false
}
Set custom video source
- See what it works in IRIPCamera.
IRFFVideoInput *input = [[IRFFVideoInput alloc] init];
[self.player replaceVideoWithInput:input videoType:IRVideoTypeNormal];
...
IRFFAVYUVVideoFrame * yuvFrame = [[IRFFAVYUVVideoFrame alloc] init];
/*
setup the yuvFrame.
*/
[input updateFrame:frame];
Advanced settings
NSArray *modes = [self createFisheyeModesWithParameter:nil];
self.player.renderModes = modes;
[self.player replaceVideoWithURL:fisheyeVideo videoType:IRVideoTypeCustom];
func createFisheyeModes(with parameter: IRMediaParameter?) -> [IRGLRenderMode] {
let normal = IRGLRenderMode2D()
let fisheye2Pano = IRGLRenderMode2DFisheye2Pano()
let fisheye = IRGLRenderMode3DFisheye()
let fisheye4P = IRGLRenderModeMulti4P()
let modes = [
fisheye2Pano,
fisheye,
fisheye4P,
normal
]
normal.shiftController.enabled = false
fisheye2Pano.contentMode = .scaleAspectFill
fisheye2Pano.wideDegreeX = 360
fisheye2Pano.wideDegreeY = 20
fisheye4P.parameter = IRFisheyeParameter(width: 0, height: 0, up: false, rx: 0, ry: 0, cx: 0, cy: 0, latmax: 80)
fisheye.parameter = fisheye4P.parameter
fisheye4P.aspect = 16.0 / 9.0
fisheye.aspect = fisheye4P.aspect
normal.name = "Rawdata"
fisheye2Pano.name = "Panorama"
fisheye.name = "Onelen"
fisheye4P.name = "Fourlens"
return modes
}
Screenshots
Normal | VR |
---|---|
VR Box | Fisheye 360 |
Panorama | Modes Selection |
Multi Windows | |
Copyright
This project has some basic codes from SGPlayer.
Copyright for portions of project IRPlayer are held by Single, 2017. All other copyright for project IRPlayer are held by irons163, 2019.