 
         return false;
     }
-
-    open override var isPaused: Bool {
-        return currentState == .paused
-    }
-
-    open override var isBuffering: Bool {
-        return currentState == .buffering
-    }
-
-    open override var duration: Double {
-        guard playbackType == .vod, let item = player?.currentItem else {
-            return 0
-        }
-        return CMTimeGetSeconds(item.asset.duration)
-    }
-
-    open override var position: Double {
-        guard playbackType == .vod, let player = self.player else {
-            return 0
-        }
-        return CMTimeGetSeconds(player.currentTime())
-    }
-
-    open override var playbackType: PlaybackType {
-        guard let player = player, let duration = player.currentItem?.asset.duration else {
-            return .unknown
-        }
-
-        return duration == kCMTimeIndefinite ? .live : .vod
-    }
+    return mediaGroup.options.flatMap({MediaOptionFactory.fromAVMediaOption($0, type: .audioSource)})
+  }
+
+  open override var isPlaying: Bool {
+    if let concretePlayer = player {
+      return concretePlayer.rate > 0;
+    }
+
+    return false;
+  }
+
+  open override var isPaused: Bool {
+    return currentState == .paused
+  }
+
+  open override var isBuffering: Bool {
+    return currentState == .buffering
+  }
+
+  open override var duration: Double {
+    guard playbackType == .vod, let item = player?.currentItem else {
+      return 0
+    }
+    return CMTimeGetSeconds(item.asset.duration)
+  }
 
     open override class func canPlay(_ options: Options) -> Bool {
         var mimeType = ""

    public required init(context: UIBaseObject) {
        fatalError("init(context:) has not been implemented")
    }

    open override func layoutSubviews() {
        if let playerLayer = playerLayer {
            playerLayer.frame = self.bounds
        }
    }
    
    open override func play() {
        if player == nil {
            setupPlayer()
        }

        player?.play()
      

        player?.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(0.2, 600), queue: nil) { [weak self] time in
            self?.timeUpdated(time)
        }
        trigger(.play)
    default:
        break
    }
  
    fileprivate func timeUpdated(_ time: CMTime) {
