KSYGPUBgmStreamerKit.m 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. //
  2. // KSYGPUBgmStreamerKit.m
  3. // KSYStreamer
  4. //
  5. // Created by jiangdong on 28/12/16.
  6. // Copyright © 2016 ksyun. All rights reserved.
  7. //
  8. #import "KSYGPUBgmStreamerKit.h"
  9. #define CASE_RETURN( ENU ) case ENU : {return @#ENU;}
  10. #define weakObj(o) __weak typeof(o) o##Weak = o;
  11. @interface KSYGPUBgmStreamerKit (){
  12. NSLock * _quitLock; // ensure capDev closed before dealloc
  13. }
  14. @end
  15. @implementation KSYGPUBgmStreamerKit
  16. - (instancetype) initWithDefaultCfg {
  17. self = [super initWithDefaultCfg];
  18. return self;
  19. }
  20. // 将声音送入混音器
  21. - (void) mixAudio:(CMSampleBufferRef)buf to:(int)idx{
  22. if (![self.streamerBase isStreaming]){
  23. return;
  24. }
  25. [self.aMixer processAudioSampleBuffer:buf of:idx];
  26. }
  27. - (void) startPlayBgm:(NSString*) path {
  28. if (_ksyBgmPlayer){
  29. [_ksyBgmPlayer stop];
  30. }
  31. BOOL shouldUseHWCodec = YES;
  32. BOOL shouldAutoplay = YES;
  33. BOOL shouldMute = NO;
  34. NSURL *url = [NSURL URLWithString:path];
  35. [self.aMixer setTrack:self.bgmTrack enable:YES];
  36. // 创建背景音乐播放模块
  37. _ksyBgmPlayer = [[KSYMoviePlayerController alloc] initWithContentURL:url sharegroup:[[[GPUImageContext sharedImageProcessingContext] context] sharegroup]];
  38. // 背景音乐播放,音乐数据送入混音器
  39. weakObj(self);
  40. _ksyBgmPlayer.audioDataBlock = ^(CMSampleBufferRef buf){
  41. [selfWeak mixAudio:buf to:selfWeak.bgmTrack];
  42. };
  43. _ksyBgmPlayer.videoDecoderMode = shouldUseHWCodec ? MPMovieVideoDecoderMode_Hardware : MPMovieVideoDecoderMode_Software;
  44. _ksyBgmPlayer.shouldAutoplay = shouldAutoplay;
  45. _ksyBgmPlayer.shouldMute = shouldMute;
  46. [_ksyBgmPlayer prepareToPlay];
  47. }
  48. - (void) stopPlayBgm {
  49. if (_ksyBgmPlayer.playbackState == MPMoviePlaybackStatePlaying) {
  50. [_ksyBgmPlayer stop];
  51. }
  52. _ksyBgmPlayer = nil;
  53. }
  54. /**
  55. @abstract 获取状态对应的字符串
  56. @param stat 状态
  57. */
  58. - (NSString*) getBgmStateName : (MPMoviePlaybackState) stat {
  59. switch (stat){
  60. CASE_RETURN(MPMoviePlaybackStateStopped)
  61. CASE_RETURN(MPMoviePlaybackStatePlaying)
  62. CASE_RETURN(MPMoviePlaybackStatePaused)
  63. default: { return @"unknow"; }
  64. }
  65. }
  66. /**
  67. @abstract 获取当前状态对应的字符串
  68. */
  69. - (NSString*) getCurBgmStateName {
  70. return [self getBgmStateName: _ksyBgmPlayer.playbackState];
  71. }
  72. - (void)dealloc {
  73. [_quitLock lock];
  74. [self closeBgmKit];
  75. [_quitLock unlock];
  76. _quitLock = nil;
  77. }
  78. - (void) closeBgmKit{
  79. if (_ksyBgmPlayer){
  80. [self stopPlayBgm];
  81. }
  82. }
  83. @end