 
         if _assets.isEmpty || _readers.isEmpty { return nil }
 
-        // 現在の再生場所を起点にしてposition=1.0地点を探索する
-        if let i_t1 = self._assets.indexOf({$0.asset == self._readers.first!.asset}) {
-
-            let t1 = AssetPosition(i_t1, _currentPresentationTimestamp)
-            let offset = window * (1.0 - position)
-
-            if let windowEnd = _findAsset(_assets, from: t1, offset: offset) {
-                return windowEnd
-            } else {
-                // 見つからなかった場合、全アセットの最後端を1.0として扱う
-                return AssetPosition(_assets.count-1, _assets.last!.asset.duration)
-            }
+        switch playbackMode {
+        case .Streaming:
+            // 現在の再生場所を起点にしてposition=1.0地点を探索する
+            if let i_t1 = self._assets.indexOf({$0.asset == self._readers.first!.asset}) {
+
+                let t1 = AssetPosition(i_t1, _currentPresentationTimestamp)
+                let offset = window * (1.0 - position)
+
+                if let windowEnd = _findAsset(_assets, from: t1, offset: offset) {
+                    return windowEnd
+                } else {
+                    // 見つからなかった場合、全アセットの最後端を1.0として扱う
+                    return AssetPosition(_assets.count-1, _assets.last!.asset.duration)
+                }
+            }
+        case .Playback:
+            // 全アセットの最後端を1.0として扱う
+            return AssetPosition(_assets.count-1, _assets.last!.asset.duration)
         }
         return nil
     }


                // 算出した値なので、端数が出ないよう1/600スケールに丸めて返す
                let time = CMTimeConvertScale(result.time, 600, .RoundTowardZero)
                return AssetPosition(result.index, time)
            }
        }

            _duration = newDuration
        }
    }
    init(_ asset: AVAsset, producer: StreamFrameProducer) {
        self.asset = asset
        // AssetReaderFragmentのビルドに必要な情報を非同期に読み込み始めておく
        // （もしビルドまでに間に合わなかった場合でも、処理がブロックされる
