概要
SpriteKit で動画を再生した場合はあると思います
SKVideoNode という SpriteKit で動画を再生するためのノードがありこれと AVFoundation の AVPlayer というモジュールを使うと動画を再生することができます
環境
- macOS X 10.12.6
- Xcode 8.3.3 (8E3004b)
再生する動画のダウンロード
今回はこれを利用します
ダウンロードしたら Targets -> Build Phases -> Copy Bundle Resources にダウンロードしたファイルを追加します
Swift ファイルの編集
.sks ファイルの編集は省略します
動画をスタートする用のボタンと停止する用のボタンを配置しているだけです
import SpriteKit
import AVFoundation
class VideoScene: SKScene {
var play = SKSpriteNode()
var pause = SKSpriteNode()
var video = SKVideoNode()
override func didMove(to view: SKView) {
play = self.childNode(withName: "play") as! SKSpriteNode
pause = self.childNode(withName: "pause") as! SKSpriteNode
video = {
let urlString = Bundle.main.path(forResource: "mp4_h264_aac", ofType: "mp4")
let url = URL(fileURLWithPath: urlString!)
let item = AVPlayerItem(url: url)
let player = AVPlayer(playerItem: item)
return SKVideoNode(avPlayer: player)
}()
self.addChild(video)
}
func touchDown(atPoint pos : CGPoint) {
if let node = atPoint(pos) as? SKSpriteNode {
if(node == play){
if let _ = self.view {
print("play")
video.play()
}
} else if(node == pause){
if let _ = self.view {
print("pause")
video.pause()
}
}
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for t in touches { self.touchDown(atPoint: t.location(in: self)) }
}
}
コード中で SKVideoNode を作成しています
あとはノードをタップしたときに play
と pause
を実行しています
動作確認
必ず実機で行うようにしてください
シミューレータだとなぜか動画のノードが表示されませんでした (音はするんですが)
各種ボタンをタップして動画の再生と停止ができれば OK です
動かしてみるとわかりますがループ再生できません
一度最後まで行ったら再度アプリを起動しないと動画が始めに戻りません
これが SKVideoNode を使った場合の最大の弱点です
一応ループしたりシークバーを出したりする方法はあるみたいなので興味があれば調べてみてください
また今回は Web にある音源をダウンロードしてから再生しました
直接 URL を指定して再生できるかやってみたのですがうまくできませんでした
今回の組み合わせだとローカルにダウンロードしてからでないと再生できないのかもしれません
0 件のコメント:
コメントを投稿