HysteriaPlayer 2.2.6

HysteriaPlayer 2.2.6

测试已测试
语言语言 Obj-CObjective C
许可证 NOASSERTION
发布上次发布2022年12月

Stan Tsai 维护。



  • 作者:
  • Stan Tsai

Hysteria Player

HysteriaPlayer提供有用的基础播放器功能。

它提供了

  • 播放项缓存管理。
  • 预缓冲下一个播放项。

功能

  • 支持本地和远程媒体。
  • 使用几个block设置HysteriaPlayer,在你的UIViewUIViewController子类中实现委托来更新UI,以在播放器事件更改时更新UI。
  • 支持前进/后退功能。
  • 如果播放器由于缓冲问题而暂停,当缓冲大小达到5秒时自动恢复播放。
  • 可在后台播放。(检查后台音频模式,然后一切正常)
  • 使用getHysteriaOrder:来获取您的PlayerItems的索引。
  • 扩展后台长时间缓冲。
  • 支持播放模式:重复、重复一次、随机。

教程

第一部分中,我们需要什么?为什么选择HysteriaPlayer?

第二部分中,展示如何使用HysteriaPlayer播放远程音频。 (版本2.0.0,有些过时。 版本2.1.0修改了一些API

第三部分中,制作一个简单的播放器用户界面。

您可以从这里下载教程源代码

安装

CocoaPods

如果您使用CocoaPods,安装HysteriaPlayer很简单。

Podfile

platform :ios, 'x.0'

pod 'HysteriaPlayer',			        '~> x.x.x'
    
end

手动安装

将库导入到您的项目中

HysteriaPlayer.mHysteriaPlayer.h拖拽到您的项目中。

添加框架

将CoreMedia.framework、AudioToolbox.framework和AVFoundation.framework添加到您的“链接二进制框架(libraries)”设置中。

将提供的point1sec.mp3文件复制到您的“支持文件(supporting files)”中

当您的应用被暂停但仍处于活动状态时,能够播放第一个PlayerItem,即使第一个PlayerItem仍在缓冲。

音频播放的后台模式

Xcode提供GUI复选框以启用各种后台模式。启用音频和AirPlay,您可以在项目 -> 功能 -> 后台模式中找到此部分。

如何使用

代理,DataSource

在您自己的播放配置器模型中实现HysteriaPlayerDelegateHysteriaPlayerDataSource。(它也可以是UIViewController的子类,但将其作为独立的模型更有意义。)

#import "HysteriaPlayer.h"

@interface ViewController : UIViewController <HysteriaPlayerDelegate, HysteriaPlayerDataSource>

HysteriaPlayerDelegate中有4个可选代理。

@optional
- (void)hysteriaPlayerWillChangedAtIndex:(NSUInteger)index;
- (void)hysteriaPlayerCurrentItemChanged:(AVPlayerItem *)item;
- (void)hysteriaPlayerRateChanged:(BOOL)isPlaying;
- (void)hysteriaPlayerDidReachEnd;
- (void)hysteriaPlayerCurrentItemPreloaded:(CMTime)time;
- (void)hysteriaPlayerDidFailed:(HysteriaPlayerFailed)identifier error:(NSError *)error;
- (void)hysteriaPlayerReadyToPlay:(HysteriaPlayerReadyToPlay)identifier;

HysteriaPlayerDataSource中有3个可选代理。

@optional
- (NSUInteger)hysteriaPlayerNumberOfItems;
- (NSURL *)hysteriaPlayerURLForItemAtIndex:(NSUInteger)index preBuffer:(BOOL)preBuffer;
- (void)hysteriaPlayerAsyncSetUrlForItemAtIndex:(NSUInteger)index preBuffer:(BOOL)preBuffer;

如果您不实现hysteriaPlayerNumberOfItems代理方法,您必须将itemsCount属性设置到HysteriaPlayer。

并且您必须实现hysteriaPlayerURLForItemAtIndex:preBufferhysteriaPlayerAsyncSetUrlForItemAtIndex:preBuffer代理方法之一。

设置

...

- (void)setupHyseteriaPlayer
{
    HysteriaPlayer *hysteriaPlayer = [HysteriaPlayer sharedInstance];
    hysteriaPlayer.delegate = self;
    hysteriaPlayer.datasource = self;
}

- (NSUInteger)hysteriaPlayerNumberOfItems
{
    return self.itemsCount;
}

- (NSURL *)hysteriaPlayerURLForItemAtIndex:(NSUInteger)index preBuffer:(BOOL)preBuffer
{
    return [[NSURL alloc] initFileURLWithPath:[localMedias objectAtIndex:index]];
}

代码片段

获取工作项中项的索引

HysteriaPlayer *hysteriaPlayer = [HysteriaPlayer sharedInstance];
NSNumber *order = [hysteriaPlayer getHysteriaOrder:[hysteriaPlayer getCurrentItem]];

获取播放项的时间尺度

HysteriaPlayer *hysteriaPlayer = [HysteriaPlayer sharedInstance];
NSDictionary *dict = [hysteriaPlayer getPlayerTime];
double durationTime = [[dict objectForKey:@"DurationTime"] doubleValue];
double currentTime = [[dict objectForKey:@"CurrentTime"] doubleValue];

获取播放器状态

switch ([hysteriaPlayer getHysteriaPlayerStatus]) {
    case HysteriaPlayerStatusUnknown:
        
        break;
    case HysteriaPlayerStatusForcePause:
        
        break;
    case HysteriaPlayerStatusBuffering:
        
        break;
    case HysteriaPlayerStatusPlaying:
        
    default:
        break;
}

禁用播放项缓存

默认情况下启用缓存

HysteriaPlayer *hysteriaPlayer = [HysteriaPlayer sharedInstance];
[hysteriaPlayer enableMemoryCached:NO];

如果我不再需要播放器实例怎么办?

HysteriaPlayer *hysteriaPlayer = [HysteriaPlayer sharedInstance];
[hysteriaPlayer deprecatePlayer];
hysteriaPlayer = nil;

已知问题

如果你要在iOS 8及以下版本上播放HTTP实时流。(iOS 9+没有问题,无需担心)
在启动HysteriaPlayer时必须设置的属性之一。

HysteriaPlayer *hysteriaPlayer = [HysteriaPlayer sharedInstance];
hysteriaPlayer.skipEmptySoundPlaying = YES;

许可证

所有源代码均采用MIT许可证。

作者

由 Saiday 创建