     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)
-  }
+        return false;
+    }
+
+    open override var isPaused: Bool {
+        return currentState == .paused
+    }
+
+    open override var isBuffering: Bool {
+        return currentState == .buffering
+    }
 
     open override class func canPlay(_ options: Options) -> Bool {
         var mimeType = ""

        let availableOptions = mediaGroup.options.flatMap({MediaOptionFactory.fromAVMediaOption($0, type: .subtitle)})
        return availableOptions + [MediaOptionFactory.offSubtitle()]
    }
  }
    
  open override var subtitles: [MediaOption]? {
    guard let mediaGroup = mediaSelectionGroup(AVMediaCharacteristicLegible) else {
      return []
    }

    open override var isPlaying: Bool {

            player?.currentItem?.select(option, in: group)
        }
    }
  
    fileprivate func handleBufferingEvent(_ keyPath: String?) {
        guard let keyPath = keyPath, currentState != .paused else {
            return
        }

    fileprivate func getSelectedMediaOptionWithCharacteristic(_ characteristic: String) -> AVMediaSelectionOption? {
        if let group = mediaSelectionGroup(characteristic) {
