有没有人知道当前项目即将完成播放时是否AVQueuePlayer开始缓冲下一个AVPlayerItem?
我知道文档中没有任何内容可以暗示这一点,我主要询问是否有人观察过这种行为.
我正在构建一个用于iOS的MP3播放器,播放在网络上托管的音频文件.我想提供离线播放文件的能力,所以我使用ASIHTTP下载文件,但我似乎无法在app文档目录中找到有关初始化AVPlayer的信息.有没有人这样做过?它甚至可能吗?
*我在下面发布了一个答案,显示了如何将iOS AvPlayer用于本地和http文件.希望这可以帮助!
我有一个AVPlayer与AVPlayerItem.我想要的是关闭AVPlayer音频播放.我想播放视频.
有人能帮我吗?谢谢!
self.avPlayerItem = [AVPlayerItem playerItemWithURL:self.videoUrl];
self.avPlayer = [AVPlayer playerWithPlayerItem:self.avPlayerItem];
[self.avPlayer play];
self.avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;
self.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer];
self.avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidPlayToEndTime:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:self.avPlayerItem];
CGRect screenRect = [[UIScreen mainScreen] bounds];
self.avPlayerLayer.frame = CGRectMake(0, 0, screenRect.size.width , screenRect.size.height );
[self.view.layer insertSublayer:self.avPlayerLayer atIndex:0];
Run Code Online (Sandbox Code Playgroud) 我试图remote url用快速语言缓冲并立即播放音频.
但问题是需要很长时间才能完成 readyToPlay案例和游戏.
例如,声音网址需要大约12到15秒才能运行.
这是我的代码:
var asset: AVAsset!
var player: AVPlayer!
var playerItem: AVPlayerItem!
private var playerItemContext = 0
let requiredAssetKeys = [ "playable","hasProtectedContent"]
Run Code Online (Sandbox Code Playgroud)
let url = URL(string: "http://sound_link.mp3")!
asset = AVAsset(url: url)
playerItem = AVPlayerItem(asset: asset,
automaticallyLoadedAssetKeys: requiredAssetKeys)
playerItem.addObserver(self,
forKeyPath: #keyPath(AVPlayerItem.status),
options: [.old, .new],
context: &playerItemContext)
player = AVPlayer(playerItem: playerItem)
Run Code Online (Sandbox Code Playgroud)
根据这个(ExploringAVFoundation)文档已经完成了
并且对于玩家准备玩家玩的手柄我使用observeValue func:
override func observeValue(forKeyPath keyPath: String?,of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard context == &playerItemContext else …Run Code Online (Sandbox Code Playgroud) 我正在构建一个播放音频流的应用程序(来自webradio).
我正在使用AVPlayer它.
1)我想知道AVPlayer's当连接速度很慢或用户点击"播放"时你将如何处理"缓冲".我想检测出AVPlayer"缓冲"来显示UIActivityIndicatorView.
2)在后台运行时的同样问题.如果在这种情况下缓冲,我该怎么办?
谢谢 !
-(IBAction)play:(id)sender
{
thumbImageView.alpha=0.0;
NSString *stringvideo=[NSString stringWithFormat:@"http://streaming-service",[[NSUserDefaults standardUserDefaults]valueForKey:@"VideoIdselected"]];
NSString *videoURLString = stringvideo;
NSURL *url = nil;
url = [NSURL URLWithString:videoURLString];
self.moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:url];
if (self.moviePlayerController)
{
/* Save the movie object. */
[self setMoviePlayerController:self.moviePlayerController];
[self installMovieNotificationObservers];
/* Specify the URL that points to the movie file. */
[self.moviePlayerController setContentURL:url];
[self.moviePlayerController setMovieSourceType:MPMovieSourceTypeStreaming]; // for streaming
self.moviePlayerController.controlStyle = MPMovieControlStyleEmbedded;
// [self.videoPlayer setMovieSourceType:MPMovieSourceTypeStreaming];
// self.moviePlayerController.shouldAutoplay = YES;
[self.moviePlayerController.view setFrame: CGRectMake(0, 0, 320,160)];
[self.moviePlayerController setFullscreen:NO animated:YES];
[self.moviePlayerController view].backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:self.moviePlayerController.view]; …Run Code Online (Sandbox Code Playgroud) 这有效:我有一个AVPlayer在加载后立即播放视频.这很好用.
这不是:
我想在一个给定的位置播放它,而不是在开始时播放视频.所以我等到资产准备好使用KVO播放:
BOOL isReadyToSeek = (self.playerItem.status == AVPlayerStatusReadyToPlay)
Run Code Online (Sandbox Code Playgroud)
然后寻求给定的时间
[playerItem seekToTime:timeInTheMiddleOfTheVideo completionHandler:myHandler];
Run Code Online (Sandbox Code Playgroud)
但是玩家将始终在视频开始时进行初始搜索.
更新 我尝试了几秒钟的dispatch_after,但这也不起作用.它在播放后工作,但从不开始.
当我看到self.player.currentItem.duration我不断收到0的value和timescale.
我正在使用以下代码在tvOS上播放视频:
NSString *filePath = [[NSBundle mainBundle] pathForResource:name ofType:@"mov"];
NSURL *fileUrl = [NSURL fileURLWithPath:filePath];
self.player = [AVPlayer playerWithURL:fileUrl];
AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
avPlayerLayer.frame = CGRectMake(0, 0, view.frame.size.width, view.frame.size.height);
[view.layer addSublayer:avPlayerLayer];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(replayMovie:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
[self.player play];
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误
错误:> aqme> 718:MEMixerChannel :: EnableProcessor:无法打开处理器类型0x705f6571
任何想法如何解决它?
我正在创建一个播放铃声的应用程序,我想知道每次播放铃声的当前时间(以毫秒为单位).
CMTime cTime = player_.currentTime; float currentTime = cTime.value/cTime.timescale;
这里的currentTime以秒为单位获取值.如何获得精确的currentTime值,但以毫秒为单位?
我一直在浏览AVPlayerItem和AVPlayer文档,并且在项目完成播放时似乎没有任何回调.我希望我们可以使用某种代理回调,或者AVPlayerActionAtItemEnd为我们提供自定义操作.
我怎样才能找到一种方法来检测AVPlayer何时播放完一个项目?
avplayer ×10
ios ×6
iphone ×5
avfoundation ×4
objective-c ×4
video ×2
audio ×1
avplayeritem ×1
cmtime ×1
cocoa-touch ×1
ipad ×1
stream ×1
swift ×1
tvos ×1
xcode ×1