         dispatch_async(dispatch_get_main_queue()) {
             self.displayLink.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
         }
-    }
+
+        _producer.addObserver(self, forKeyPath: "position", options: .New, context: &_positionContext)
+    }
+
+    deinit {
+        _producer.removeObserver(self, forKeyPath: "position", context: &position)
+    }
+
     /**
     アセットを内部キューの末尾に追加する
 


    /// 再生速度の係数。1.0が通常速度、2.0だと倍速になる
    private var _playbackRate : CFTimeInterval = 1.0

    /**
    プレーヤーを再生開始

    public var rate: Float {
        return _producer.playbackRate
    }

    /// 現在の再生位置を返す
    dynamic public private(set) var position: Float = 1.0

    /**
    プレーヤーを再生開始
