我有一个客观的C类.在其中,我创建了一个init方法并在其中设置了NSNotification
//Set up NSNotification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(getData)
name:@"Answer Submitted"
object:nil];
Run Code Online (Sandbox Code Playgroud)
我在哪里设置[[NSNotificationCenter defaultCenter] removeObserver:self]这门课程?我知道,对于a UIViewController,我可以将它添加到viewDidUnload方法中如果我刚刚创建了一个目标c类,需要做什么?
简单的问题我似乎无法找到答案的原因.
你如何在Swift中循环AVPlayer?
numberOfLoops = -1仅适用于AVAudioPlayer
我确实需要它循环没有任何延迟/黑色闪光等.这就是为什么我没有使用MPMoviePlayerViewController.
谢谢你的帮助.
码:
let url_1 = NSURL.fileURLWithPath(outputFilePath_1)
let asset_1 = AVAsset.assetWithURL(url_1) as? AVAsset
let playerItem_1 = AVPlayerItem(asset: asset_1)
let player_1 = AVPlayer(playerItem: self.playerItem_1)
let playerLayer_1 = AVPlayerLayer(player: self.player_1)
playerLayer_1!.frame = self.view.frame
self.view.layer.addSublayer(self.playerLayer_1)
player_1!.play()
Run Code Online (Sandbox Code Playgroud) 我必须弄清楚从一个视频过渡到下一个视频的最佳方式
基本理念:一个例子就是有一个人走路的视频......用户点击视频,并且无法过渡到正在运行的人的视频(简化示例)
我的第一个想法是创建2个电影播放器并使用2个视图元素之间的过渡.但电影播放器不支持这一点.
停止当前视频,加载新内容,然后启动它是一个解决方案,但不是很优雅.我们正在为我们的销售代表制作一个互动销售工具,我们希望这看起来尽可能专业.
当前的想法:如果有一些AVPlayer的示例代码,似乎我可以使用AVVideoComposition在视频之间切换?但目前似乎没有关于如何发生这种情况的详细信息.
可能的CLUE:我认为这很简单,因为我买了一款名为Live Cams HD的应用程序,可以同时显示16种不同的视频.
有任何想法吗?提前致谢!
之前已经讨论过如何循环AVPlayer播放视频项目,但没有"解决方案"足够无缝以提供无延迟的视频循环.
我正在开发一个tvOS应用程序,它的一个视图背景中有一个高质量的10秒"风景"剪辑,只需重新启动它的AVPlayer"标准"方式(订阅NSNotification捕获它)太疯狂了注意并减损用户体验.
似乎实现真正无缝循环的唯一方法是在较低级别(在OpenGL中)手动管理帧...
尽管我已尽最大努力阅读此内容,并且作为操纵视频流水线的新手,我还没有达到一个易于理解的解决方案.
我知道存在外部库可以更容易地执行此行为; 最值得注意的是GPUImage.但是,我正在开发的应用程序是针对tvOS的,因此很难使用相当多的第三方iOS库,包括GPUImage.我遇到的另一个库是AVAnimator,它为轻量级动画视频提供了强大的功能,但不能用于.H264中编码的源素材的密集,高质量视频剪辑.
到目前为止,我最接近的是Apple自己的AVCustomEdit源代码,但这主要涉及静态生成"过渡",虽然无缝,但过于复杂,我无法辨别如何使其执行简单的循环功能.
如果任何人都可以在AVPlayer较低级别操作,即使用图像处理/缓冲区(或者不依赖于外部库的iOS开发),我会非常有兴趣知道如何开始.
任何人都可以建议一种方法,通过它您可以在iOS中实现视频剪辑的完全平滑和无缝循环?我尝试了两种方法,当视频循环时,这两种方法都会产生一个小暂停
1)AVPlayerLayer与playerItemDidReachEnd通知设置关闭seekToTime:kCMTimeZero
我更喜欢使用AVPlayerLayer(出于其他原因),但是这种方法会在循环之间产生明显的暂停.
2)带有setRepeatMode的MPMoviePlayerController:MPMovieRepeatModeOne
这导致较小的暂停,但仍然不完美.
我不知道从哪里开始.任何人都可以建议一个灵魂?
我正在尝试在AVSampleBufferDisplayLayer上循环播放视频。我可以让它播放一次,没有问题。但是,当我尝试循环播放时,它不会继续播放。
根据对AVFoundation的再现视频循环的答案,没有办法倒带AVAssetReader,所以我重新创建了它。(我确实看到了用AVFoundation AVPlayer循环播放视频的答案吗?但是AVPlayer具有更多功能。我正在读取文件,但仍希望AVSampleBufferDisplayLayer。)
一种假设是,我需要停止某些H264标头,但是我不知道这是否有帮助(以及如何帮助)。另一个是它与CMTimebase有关,但是我尝试了几件事都没有用。
以下代码基于Apple的WWDC关于直接访问视频编码的演讲:
- (void)viewDidLoad {
[super viewDidLoad];
NSString *filepath = [[NSBundle mainBundle] pathForResource:@"sample-mp4" ofType:@"mp4"];
NSURL *fileURL = [NSURL fileURLWithPath:filepath];
AVAsset *asset = [AVURLAsset URLAssetWithURL:fileURL options:nil];
UIView *view = self.view;
self.videoLayer = [[AVSampleBufferDisplayLayer alloc] init];
self.videoLayer.bounds = view.bounds;
self.videoLayer.position = CGPointMake(CGRectGetMidX(view.bounds), CGRectGetMidY(view.bounds));
self.videoLayer.videoGravity = AVLayerVideoGravityResizeAspect;
self.videoLayer.backgroundColor = [[UIColor greenColor] CGColor];
CMTimebaseRef controlTimebase;
CMTimebaseCreateWithMasterClock( CFAllocatorGetDefault(), CMClockGetHostTimeClock(), &controlTimebase );
self.videoLayer.controlTimebase = controlTimebase;
CMTimebaseSetTime(self.videoLayer.controlTimebase, CMTimeMake(5, 1));
CMTimebaseSetRate(self.videoLayer.controlTimebase, 1.0);
[[view layer] addSublayer:_videoLayer];
dispatch_queue_t assetQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, …Run Code Online (Sandbox Code Playgroud) 我在介绍场景中播放视频时遇到问题.我已将我的视频添加到场景中并且播放正常.我只是希望它一次又一次地重复.是否有任何方法可以将此视频设置为在结束后自动播放?
这就是我添加视频的方式:
SKVideoNode *videoNode = [SKVideoNode videoNodeWithVideoFileNamed:@"game1.m4v"];
videoNode.position = CGPointMake(150, 180);
videoNode.size = CGSizeMake(150, 150);
[self addChild:videoNode];
[videoNode play];
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
我用了AVPlayerView不停播放4个视频AVPlayerLooper.
问题是:AVPlayerView只显示一个循环视频.但我需要播放一个序列(4个视频).
如何AVPlayerLooper播放所有4个视频并在此之后循环播放?
import Cocoa
import AVKit
import AVFoundation
class ViewController: NSViewController {
@IBOutlet weak var viewOne: AVPlayerView!
var playerLooper: AVPlayerLooper? = nil
override func viewDidLoad() {
super.viewDidLoad()
let videos = (1...4).map { _ in
Bundle.main.urls(forResourcesWithExtension: "mov", subdirectory: nil)![Int(arc4random_uniform(UInt32(4)))]
}
viewOne.player = AVQueuePlayer(url: videos[Int(arc4random_uniform(UInt32(4)))])
let item = AVPlayerItem(url: videos[Int(arc4random_uniform(UInt32(4)))])
playerLooper = AVPlayerLooper(player: viewOne.player as! AVQueuePlayer, templateItem: item)
viewOne.player?.actionAtItemEnd = .advance
viewOne.controlsStyle = .none
NotificationCenter.default.addObserver(self, selector: Selector(("loopSequence")), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: viewOne.player?.currentItem)
func loopSequence() …Run Code Online (Sandbox Code Playgroud) 如何在Xamarin iOS下使用AVPlayer循环播放视频?ObjectiveC解决方案建议使用可观察的通知.目前尚不清楚如何使用C#语法或AVPlayer的Xamarin API执行此操作.
您可以在此处查看ObjectiveC问题和答案:使用AVFoundation AVPlayer循环播放视频?
我正在尝试在TVOS的Swift上使用playerViewController循环播放视频。我的视频播放正常,但是我想循环播放视频。到目前为止,这是我的代码:
override func viewDidAppear(_ animated: Bool) {
let videoURL = URL(string: "https://url-to-video.com/video.mp4")
let player = AVPlayer(url: videoURL!)
let playerViewController = AVPlayerViewController()
playerViewController.player = player self.present(playerViewController, animated: true) {
playerViewController.player!.play()
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。谢谢
ios ×6
video ×4
avfoundation ×3
avplayer ×3
swift ×3
objective-c ×2
tvos ×2
avkit ×1
ios5 ×1
iphone ×1
loops ×1
macos ×1
movie ×1
opengl-es ×1
skvideonode ×1
sprite-kit ×1
xamarin ×1
xcode ×1