diff --git a/iOS/BDAlphaPlayer/Classes/BDAlphaPlayerMetalView.m b/iOS/BDAlphaPlayer/Classes/BDAlphaPlayerMetalView.m index a5f95f0..7fb677f 100644 --- a/iOS/BDAlphaPlayer/Classes/BDAlphaPlayerMetalView.m +++ b/iOS/BDAlphaPlayer/Classes/BDAlphaPlayerMetalView.m @@ -29,6 +29,8 @@ @interface BDAlphaPlayerMetalView () @property (atomic, assign) BOOL hasDestroyed; +@property (nonatomic, strong) AVPlayer *audioPlayer; + @end @implementation BDAlphaPlayerMetalView @@ -141,6 +143,16 @@ - (void)play [self renderOutput:output resourceModel:self.model completion:^{ [weakSelf renderCompletion]; }]; + + // 播放音频 + if (output.audioItem) { + AVAudioSession *session = [AVAudioSession sharedInstance]; + [session setCategory:AVAudioSessionCategoryPlayback error:nil]; + [session setActive:YES error:nil]; + + self.audioPlayer = [[AVPlayer alloc] initWithPlayerItem:output.audioItem]; + [self.audioPlayer play]; + } } - (void)renderCompletion diff --git a/iOS/BDAlphaPlayer/Classes/Reader/BDAlphaPlayerAssetReaderOutput.h b/iOS/BDAlphaPlayer/Classes/Reader/BDAlphaPlayerAssetReaderOutput.h index 47626e6..647b5a5 100644 --- a/iOS/BDAlphaPlayer/Classes/Reader/BDAlphaPlayerAssetReaderOutput.h +++ b/iOS/BDAlphaPlayer/Classes/Reader/BDAlphaPlayerAssetReaderOutput.h @@ -31,6 +31,8 @@ typedef NS_ENUM(NSUInteger, BDAlphaPlayerAssetReaderOutputErrorCode) { @property (nonatomic, assign, readonly) CGSize videoSize; +@property (nonatomic, strong, readonly) AVPlayerItem *audioItem; + - (BOOL)hasNextSampleBuffer; - (CMSampleBufferRef const _Nullable)copyNextSampleBuffer; diff --git a/iOS/BDAlphaPlayer/Classes/Reader/BDAlphaPlayerAssetReaderOutput.mm b/iOS/BDAlphaPlayer/Classes/Reader/BDAlphaPlayerAssetReaderOutput.mm index e85b6b4..0359ee9 100644 --- a/iOS/BDAlphaPlayer/Classes/Reader/BDAlphaPlayerAssetReaderOutput.mm +++ b/iOS/BDAlphaPlayer/Classes/Reader/BDAlphaPlayerAssetReaderOutput.mm @@ -106,6 +106,14 @@ - (void)setupWithURL:(NSURL *)url error:(NSError * _Nullable __autoreleasing * _ return; } + // 提取音轨 + NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio]; + AVAssetTrack *audioTrack = [audioTracks firstObject]; + if (audioTrack) { + // 存在音轨,转成AVPlayerItem + _audioItem = [AVPlayerItem playerItemWithAsset:audioTrack.asset]; + } + NSArray *videoTracks = [asset tracksWithMediaType:AVMediaTypeVideo]; AVAssetTrack *videoTrack = [videoTracks firstObject]; if (!videoTrack) { diff --git a/iOS/Example/BDAlphaPlayerDemo/BDAlphaPlayerDemo/Info.plist b/iOS/Example/BDAlphaPlayerDemo/BDAlphaPlayerDemo/Info.plist index 72bf2c4..1993c7f 100644 --- a/iOS/Example/BDAlphaPlayerDemo/BDAlphaPlayerDemo/Info.plist +++ b/iOS/Example/BDAlphaPlayerDemo/BDAlphaPlayerDemo/Info.plist @@ -20,25 +20,6 @@ 1 LSRequiresIPhoneOS - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - UIWindowSceneSessionRoleApplication - - - UISceneConfigurationName - Default Configuration - UISceneDelegateClassName - SceneDelegate - UISceneStoryboardFile - Main - - - - UIApplicationSupportsIndirectInputEvents UILaunchStoryboardName diff --git a/iOS/Example/BDAlphaPlayerDemo/Podfile.lock b/iOS/Example/BDAlphaPlayerDemo/Podfile.lock index af61b61..bc34978 100644 --- a/iOS/Example/BDAlphaPlayerDemo/Podfile.lock +++ b/iOS/Example/BDAlphaPlayerDemo/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - BDAlphaPlayer (1.1.0) + - BDAlphaPlayer (1.2.0) DEPENDENCIES: - BDAlphaPlayer (from `../../../`) @@ -9,8 +9,8 @@ EXTERNAL SOURCES: :path: "../../../" SPEC CHECKSUMS: - BDAlphaPlayer: 6ec0535dbbac6b089e94acb5559dcdf77dd1d5a8 + BDAlphaPlayer: 8af2048ee8ef8c31a73a99f83882cf4242e89df0 PODFILE CHECKSUM: a2a7c83a00e25dc193359c91e412457a63e7fbad -COCOAPODS: 1.8.4 +COCOAPODS: 1.10.1