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

    */
    func appendAsset(asset: AVAsset) {

        let holder = AssetHolder(asset)
        self._assets.append(holder)
    }



    /// 格納しているアセットの合計再生時間を返す
    var amountDuration: CMTime {
        get {
            let lock = ScopedLock(self)
            return _amountDuration
        }
        set(newDuration) {
            let lock = ScopedLock(self)
            _amountDuration = newDuration
        }
    }

    /**
    アセット全体のうち再生対象となる時間。いわゆる時間窓に相当。
    playbackModeがStreamingの場合は指定した時間を表し、Playbackの場合は
    アセット全体の時間を表す
    */
    var window: CMTime {
        get {
            switch playbackMode {
            case .Streaming:
                return _window
            case .Playback:
                return _amountDuration
            }
        }
        set(newWindow) {
            _window = newWindow
        }
    }
    private var _window = CMTime(value: 5, 1)

    /// 再生のスピード。1.0が通常再生、2.0だと倍速再生。負数は非対応
    var playbackRate: Float {
