【问题标题】:Converting AVPlayer code to Swift将 AVPlayer 代码转换为 Swift
【发布时间】:2014-06-23 01:50:17
【问题描述】:

这是我将以下 Objective-C 转换为 Swift 的尝试:

AVURLAsset * asset = [AVURLAsset URLAssetWithURL:[self localMovieURL] options:nil];
NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio];

// Mute all the audio tracks
NSMutableArray * allAudioParams = [NSMutableArray array];
for (AVAssetTrack *track in audioTracks) {
        AVMutableAudioMixInputParameters *audioInputParams =[AVMutableAudioMixInputParameters audioMixInputParameters];
        [audioInputParams setVolume:0.0 atTime:kCMTimeZero ];
        [audioInputParams setTrackID:[track trackID]];
        [allAudioParams addObject:audioInputParams];
}
AVMutableAudioMix * audioZeroMix = [AVMutableAudioMix audioMix];
[audioZeroMix setInputParameters:allAudioParams];

// Create a player item
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
[playerItem setAudioMix:audioZeroMix]; // Mute the player item

// Create a new Player, and set the player to use the player item
// with the muted audio mix
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];

self.mPlayer = player;

[mPlayer play];

斯威夫特:

我不确定如何处理下面的kCMTimeZero

var moviePlayerController = MPMoviePlayerController()
var asset: AVURLAsset?
asset = AVURLAsset.URLAssetWithURL(self.moviePlayerController.contentURL, options: nil)
var audioTracks = NSArray()
audioTracks = asset!.tracksWithMediaType(AVMediaTypeAudio)

// Mute all the audio tracks
let allAudioParams = NSMutableArray()
for track: AnyObject in audioTracks {
    // AVAssetTrack
    let audioInputParams = AVMutableAudioMixInputParameters()

    // kCMTimeZero in Swift? How!?
    audioInputParams.setVolume(0.0, atTime: kCMTimeZero)

    audioInputParams.trackID = track.trackID
    allAudioParams.addObject(audioInputParams)
}

let audioZeroMix = AVMutableAudioMix()
audioZeroMix.inputParameters = allAudioParams

// Create a player item
let playerItem = AVPlayerItem(asset: asset)
playerItem.audioMix = audioZeroMix

// Create a new Player, and set the player to use the player item
// with the muted audio mix

// What do I do with player exactly.
let player = AVPlayer.playerWithPlayerItem(playerItem) as AVPlayer

self.moviePlayerController = player
self.moviePlayerController.play()

【问题讨论】:

  • 您只需在文件顶部import CoreMedia 即可获得kCMTimeZero
  • @JackWu:谢谢。

标签: objective-c swift mpmovieplayercontroller avplayer


【解决方案1】:

kCMTimeZero 是 Core Media 框架的一部分,因此您必须像这样导入它:

import CoreMedia

【讨论】:

    【解决方案2】:

    我不得不import CoreMedia,它最终工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多