public YoutubeMediaPacket(YoutubeMediaPacketType videoPacketType, YoutubeRequestURL requestURL, byte[] packetData)
 {
     FilePath          = _writePacketDataToDisk(packetData);
     VideoPacketType   = videoPacketType;
     YoutubeRequestURL = requestURL;
     _populateFromYoutubeRequestURL(requestURL);
     VideoId = requestURL.RequestPath.QueryString.HasValue(YoutubeChatterClientHandler.VIDEO_ID_FIELD_NAME) ?
               requestURL.RequestPath.QueryString.GetValue(YoutubeChatterClientHandler.VIDEO_ID_FIELD_NAME)
      : null;
 }
 public YoutubeMediaPacket(YoutubeMediaPacketType videoPacketType, YoutubeRequestURL requestURL, string packetFilePath)
 {
     FilePath          = packetFilePath;
     VideoPacketType   = videoPacketType;
     YoutubeRequestURL = requestURL;
     VideoId           = requestURL.RequestPath.QueryString.HasValue(YoutubeChatterClientHandler.VIDEO_ID_FIELD_NAME) ?
                         requestURL.RequestPath.QueryString.GetValue(YoutubeChatterClientHandler.VIDEO_ID_FIELD_NAME)
      : null;
     _populateFromYoutubeRequestURL(requestURL);
 }
 public static bool IsValidYoutubeRequestURL(YoutubeRequestURL requestURL)
 {
     return
         // range is required for track packet index
         (requestURL.RequestPath.QueryString.HasValue("range")
          // clen is required to know the actual size of the video
          && requestURL.RequestPath.QueryString.HasValue("clen")
          // stream id is requried for distinguish each video (in case two or more videos are buffering at the same time)
          && requestURL.RequestPath.QueryString.HasValue("id")
          // itag is required to parse media info (quality , bitrate , containers...)
          && requestURL.RequestPath.QueryString.HasValue("itag"));
 }
 public override string ToString()
 {
     return
         ("Video FingerPrint : " + this.VideoFingerPrint + "\n" +
          "Video Range : " + this.Range.ToString() + "\n" +
          "Video Packet Length : " + this.PacketLength + "\n" +
          "Video Packet Type : " + this.VideoPacketType + "\n" +
          "Video Quality Info : " + this.PacketMediaFileDataInfo + "\n" +
          "Video Length : " + this.OverAllLength + "\n" +
          "Video File Path : " + this.FilePath +
          "Video Requested URL : " + YoutubeRequestURL.ToRequestableURL());
 }
 private void _populateFromYoutubeRequestURL(YoutubeRequestURL youtubePlaybackRequestURL)
 {
     // make sure the url contains the required fields (packet range , total video lenght, stream id , itag)
     // if not we can't intercept this video
     if (IsValidYoutubeRequestURL(youtubePlaybackRequestURL))
     {
         Range                   = new Range(youtubePlaybackRequestURL.RequestPath.QueryString.GetValue("range"));
         OverAllLength           = double.Parse(youtubePlaybackRequestURL.RequestPath.QueryString.GetValue("clen"));
         PacketLength            = Range.Length;
         VideoFingerPrint        = youtubePlaybackRequestURL.RequestPath.QueryString.GetValue("id");
         PacketMediaFileDataInfo = ItagHelper.FindByItag(int.Parse(youtubePlaybackRequestURL.RequestPath.QueryString.GetValue("itag")));
     }
     else
     {
         throw new InsuffesientYoutubeURLParams();
     }
 }