ACBAVPlayer 2.1

ACBAVPlayer 2.1

Akhil C Balan 维护。



  • Akhil

ACBAVPlayerExtension

CocoaPods Compatible Carthage Compatible Platform License

AVPlayer 的一个扩展,将其转换为具有所有的 AVAudioPlayer 使用功能,并且支持流式传输。还添加了支持从 AVPlayer 流式传输的音频可视化的额外方法。这个扩展向 AVPlayer 添加了一些缺失的功能。

这个项目展示了一个简单的用法示例。ViewController 有一个 UIProgressView,它显示 averagePower 作为音量表,同时在 AVPlayer 中流式传输音频。这与我们通常使用 AVAudioPlayer 的方式非常相似,但添加了一些额外的功能,这使得显示 averagePower 更加容易。audioPCMBufferFetchedWithCallbackBlock 可以用来获取 AVAudioPCMBuffer,这可以用于音频可视化。添加了 stop 方法来停止播放器。

示例


设置

可以使用 Carthage 或 Cocoapods 将其集成到项目中。

Carthage

github "akhilcb/ACBAVPlayerExtension" ~> 2.1

Cocoapods

pod 'ACBAVPlayer'

AVPlayer 扩展接口

    @property (nonatomic, readonly, assign) int numberOfChannels;
    //stop video
    - (void)stop;
    
    /* metering */
    @property (nonatomic, getter=isMeteringEnabled) BOOL meteringEnabled; /* turns level metering on or off. default is off. */

    - (void)updateMeters; /* call to refresh meter values */
    - (float)peakPowerForChannel:(NSUInteger)channelNumber; /* for peak power in decibels for a given channel. returns average power for now */
    - (float)averagePowerForChannel:(NSUInteger)channelNumber; /* returns average power in decibels for a given channel */
    //use this to repeatedly fetch average power list(in decibels) for all channels in iMeteringCallbackBlock. This block will be executed each time a value is fetched. Index of array is channel number
    - (void)averagePowerListWithCallbackBlock:(ACBAVPlayerMeteringBlock)iMeteringCallbackBlock;
    - (float)averagePowerInLinearFormForChannel:(NSUInteger)channelNumber; //returns in average power in linear form. Value is in between 0 to 1.
    //fetch average power list in linear form(values in between 0 and 1)
    - (void)averagePowerListInLinearFormWithCallbackBlock:(ACBAVPlayerMeteringBlock)iMeteringCallbackBlock;
    //fetch AVAudioPCMBuffer. it has useful methods to manipuate buffers or to display a visualizer
    - (void)audioPCMBufferFetchedWithCallbackBlock:(ACBAVPlayerBufferFetchedBlock)iAudioBufferFetchedBlock;
    - (void)replaceCurrentItemAndUpdateMeteringForPlayerItem:(AVPlayerItem *)item; //use this instead of "replaceCurrentItemWithPlayerItem" for metering to work.

注意:这是一个测试版。可能会有一些问题(希望是次要的)。风险自负。

使用说明

    self.player = [[AVPlayer alloc] initWithURL:remoteURL];
    self.player.meteringEnabled = true;
    
    [self.player averagePowerListInLinearFormWithCallbackBlock:^(NSArray *iAvgPowerList, BOOL iSuccess) {
        if (iAvgPowerList.count > 0) {
            double power = [iAvgPowerList[0] doubleValue];
            if (iAvgPowerList.count > 1) {
                double secondPower = [iAvgPowerList[1] doubleValue];
                power = (power + secondPower) / 2;
            }
            dispatch_async(dispatch_get_main_queue(), ^{
                [self.progressBar setProgress:(power * 10)];
            });
        }
    }];

屏幕截图

许可证

MIT 许可协议

版权所有 (c) 2017, Akhil C Balan(https://github.com/akhilcb)

保留所有权利。