我正在使用自定义UISlider在AVPlayer中播放视频时实现擦洗.试图找出在UISlider各端显示当前播放时间和剩余持续时间的最佳方式,因为它通常显示在MPMoviePlayerController中.
任何帮助表示赞赏.
我在用
的MPMoviePlayerController
对于播放视频,在此我使用自定义搜索栏来跳转视频.但是当我不断地进行前进和后退时,应用程序崩溃并抛出以下错误:
nsinvalidargumentexception'reason'avplayeritem无法与多个avplayer实例关联'
所以请建议.
谢谢
我正在实现一个基本的音频播放器,以播放远程音频文件.文件格式为mp3.我写的代码在模拟器上工作正常但不适用于真实设备.然而,我在我的应用程序中使用相同的URL工作正常,如果我通过使用safari(在相同的真实设备上)加载它所以我真的没有得到缺少点.以下是我的代码:
self.musicPlayer = [AVPlayer playerWithURL:[NSURL URLWithString:urlTrack]];
[self.musicPlayer play];
Run Code Online (Sandbox Code Playgroud)
非常容易的事情.音乐播放器属性定义为
@property (nonatomic, retain) AVPlayer *musicPlayer;
Run Code Online (Sandbox Code Playgroud)
我也试过使用AVPlayerItem但结果是一样的.这是我用过的代码
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:urlTrack]];
self.musicPlayer = [AVPlayer playerWithPlayerItem:playerItem];
[self.musicPlayer play];
Run Code Online (Sandbox Code Playgroud)
最后我尝试使用下面的代码
self.musicPlayer = [AVPlayer playerWithURL:[NSURL URLWithString:urlTrack]];
NSLog(@"Player created:%d",self.musicPlayer.status);
[self.musicPlayer addObserver:self forKeyPath:@"status" options:0 context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
NSLog(@"Player created:%d",self.musicPlayer.status);
if (object == self.musicPlayer && [keyPath isEqualToString:@"status"]) {
if (self.musicPlayer.status == AVPlayerStatusReadyToPlay) {
[self.musicPlayer play];
} else if (self.musicPlayer.status == AVPlayerStatusFailed) {
// something went wrong
}
}
} …Run Code Online (Sandbox Code Playgroud) 我已经实现了我AVPlayer在iPhone锁屏上的表示MPNowPlayingInfoCenter.但我无法找到如何在标准音乐应用程序中添加±15秒倒带按钮.所以问题是如何在锁定屏幕上添加此按钮?
我正在使用音频文件 AVAssetExportSession但无法在保存的文件中淡出淡出效果.这是我正在使用的代码.
[[NSFileManager defaultManager] removeItemAtURL:audioFileOutput error:NULL];
AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:file_path]];
AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:asset
presetName:AVAssetExportPresetAppleM4A];
time = floorf(Endtime-startTime);
CMTime start = CMTimeMake(0.0*100,100);
CMTime stop = CMTimeMake(time*100,100);
CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(start, stop);
AVMutableAudioMix *mutableAudioMix = [AVMutableAudioMix audioMix];
AVURLAsset* audio = [[AVURLAsset alloc]initWithURL:[NSURL URLWithString:file_path] options:nil];
AVAssetTrack* audioTrack = [[audio tracksWithMediaType:AVMediaTypeAudio]
objectAtIndex:0];
AVMutableAudioMixInputParameters *mixParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:audioTrack];
[mixParameters setVolumeRampFromStartVolume:1.0 toEndVolume:0.0 timeRange:exportTimeRange];
mutableAudioMix.inputParameters = @[mixParameters];
exportSession.audioMix = mutableAudioMix;
exportSession.outputURL = audioFileOutput;
exportSession.outputFileType = AVFileTypeAppleM4A;
exportSession.timeRange = exportTimeRange;
[SVProgressHUD showWithStatus:@"Saving Recording.." …Run Code Online (Sandbox Code Playgroud) 假设队列已经初始化,我看到的将项添加到队列中的唯一方法是:
- (void)insertItem:(AVPlayerItem *)item afterItem:(AVPlayerItem *)afterItem
文件说 Pass nil to append the item to the queue.
那么是不是可以将一个项目添加到队列的顶部?我希望能够重播之前播放的内容,而无需重新删除和重新排列所有内容.
如何在Xamarin iOS下使用AVPlayer循环播放视频?ObjectiveC解决方案建议使用可观察的通知.目前尚不清楚如何使用C#语法或AVPlayer的Xamarin API执行此操作.
您可以在此处查看ObjectiveC问题和答案:使用AVFoundation AVPlayer循环播放视频?
我有一个应用程序通过AVMutableComposition将本地文件加载到avPlayer,它可能有多达6个音频和视频轨道作为组成的一部分.
我有一个UISlider,用于调整播放器中每个音轨的音量.
以下是用于更新卷的代码.
- (void)updateVolumeForTake:(Take *)take
{
NSInteger trackID = // method that gets trackID
AVMutableAudioMix *audioMix = self.player.currentItem.audioMix.mutableCopy;
NSMutableArray *inputParameters = audioMix.inputParameters.mutableCopy;
AVMutableAudioMixInputParameters *audioInputParams = [inputParameters filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:kTrackIdPredicate, trackID]].firstObject;
[audioInputParams setVolume:myNewVolumeFloat atTime:myDesiredTime];
audioMix.inputParameters = inputParameters;
AVPlayerItem *playerItem = self.player.currentItem;
playerItem.audioMix = audioMix;
}
Run Code Online (Sandbox Code Playgroud)
这是目前在appStore中存在并且自iOS6以来一直没有问题.在运行iOS9的设备上,上述内容完全不再有效.我已经查看了发行说明,虽然有一些提到AVFoundation,但我没有看到任何有关AVAudioMix的信息.我已经搜索过,并且没有找到任何其他人来解决这个问题.
我还尝试创建一个只有AVPlayer和UISlider的新项目,我看到了同样的行为.
我的问题如下,还有其他人遇到过这个问题吗?是否有人知道与此相关的已知错误?
我正在开发一个Radio Streaming应用程序,它可以流畅播放.当按下"主页"按钮和"锁定"按钮时,它也会在后台播放.
应用程序嵌入到a中UINavigationController,当我按下UINavigationController中的"后退"按钮时,它停止播放.我的问题是:当按下导航控制器中的"后退"按钮以便继续流式传输时UIViewController,如何让包含它的内容AVPlayer保持活动状态AVPlayer?
我的代码
import UIKit
import AVFoundation
import MediaPlayer
import Foundation
class RadioFunctionViewController: UIViewController {
@IBOutlet var playButton: UIButton!
@IBOutlet var statusLabel: UILabel!
var player:AVPlayer = AVPlayer()
private let ObservatingKeyPath = "currentItem.status"
private let PlayerStatusObservingContext = UnsafeMutablePointer<Int>(bitPattern: 1)
private var playingState:Bool = false
override func viewDidLoad() {
super.viewDidLoad()
setStatus(4)
getAudioData("http://184.107.179.162:7546/;")
playingState = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func …Run Code Online (Sandbox Code Playgroud) 选择collectionViewCell时,我试图加载AVPlayer,这是我的代码didSelectItem:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let item = items?[indexPath.item] {
showPlayer(item: item)
}
}
func showPlayer(item: Item) {
let playerLauncher = PlayerLauncher()
playerLauncher.showVideoPlayer()
let playerView = PlayerView()
playerView.item = item
playerView.setupPlayerView()
}
Run Code Online (Sandbox Code Playgroud)
这是我的PlayerLauncher文件:
class PlayerView: UIView {
var item: Item? {
didSet {
if let id = item?.itemId {
itemId = id
}
}
}
var itemId = String()
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor(white: 0.3, alpha: 1)
}
var …Run Code Online (Sandbox Code Playgroud)