// Path: parsingplayer/src/main/java/com/hustunique/parsingplayer/parser/provider/ProtocolHelper.java
// public class ProtocolHelper {
// 
//     /**
//      * Create content of .concat file used in concat protocol
//      * <br>
//      * Example:
//      * <pre>
//          ffconcat version 1.0
//          file http://www.example.com/foo
//          duration 178.667
//      * </pre>
//      * @param segs list of segment, see {@link Seg}
//      * @return String content of the .concat file
//      */
//     public static String concat(List<Seg> segs) {
//         StringBuilder sb = new StringBuilder();
//         sb.append("ffconcat version 1.0\n");
//         for (Seg seg : segs) {
//             sb.append("file ").append(seg.getPath()).append("\n");
//             sb.append("duration ").append(seg.getDuration()).append("\n");
//         }
//         return sb.toString();
//     }
// }


import android.support.annotation.NonNull;
import com.hustunique.parsingplayer.parser.provider.ProtocolHelper;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
        return mStreamMap.get(hd);
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        VideoInfoImpl videoInfo = (VideoInfoImpl) o;

        if (!mStreamMap.equals(videoInfo.mStreamMap)) return false;
        if (!mTitle.equals(videoInfo.mTitle)) return false;
        if (!mId.equals(videoInfo.mId)) return false;
        return mUri.equals(videoInfo.mUri);

    }

    @Override
    public int hashCode() {
        int result = mStreamMap.hashCode();
        result = 31 * result + mTitle.hashCode();
        result = 31 * result + mId.hashCode();
        result = 31 * result + mUri.hashCode();
        return result;
    }

    @Override
    public String toString() {
        return "VideoInfoImpl{" +
// Path: parsingplayer/src/main/java/com/hustunique/parsingplayer/parser/provider/ProtocolHelper.java
// public class ProtocolHelper {
// 
//     /**
//      * Create content of .concat file used in concat protocol
//      * <br>
//      * Example:
//      * <pre>
//          ffconcat version 1.0
//          file http://www.example.com/foo
//          duration 178.667
//      * </pre>
//      * @param segs list of segment, see {@link Seg}
//      * @return String content of the .concat file
//      */
//     public static String concat(List<Seg> segs) {
//         StringBuilder sb = new StringBuilder();
//         sb.append("ffconcat version 1.0\n");
//         for (Seg seg : segs) {
//             sb.append("file ").append(seg.getPath()).append("\n");
//             sb.append("duration ").append(seg.getDuration()).append("\n");
//         }
//         return sb.toString();
//     }
// }


// Path: parsingplayer/src/main/java/com/hustunique/parsingplayer/parser/entity/VideoInfoImpl.java
import android.support.annotation.NonNull;
import com.hustunique.parsingplayer.parser.provider.ProtocolHelper;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

        return mStreamMap.get(hd);
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        VideoInfoImpl videoInfo = (VideoInfoImpl) o;

        if (!mStreamMap.equals(videoInfo.mStreamMap)) return false;
        if (!mTitle.equals(videoInfo.mTitle)) return false;
        if (!mId.equals(videoInfo.mId)) return false;
        return mUri.equals(videoInfo.mUri);

    }

    @Override
    public int hashCode() {
        int result = mStreamMap.hashCode();
        result = 31 * result + mTitle.hashCode();
        result = 31 * result + mId.hashCode();
        result = 31 * result + mUri.hashCode();
        return result;
    }

    @Override
    public String toString() {
        return "VideoInfoImpl{" +
                "mStreamMap=" + mStreamMap +