函数调用逻辑

广告过滤内部调用逻辑,涉及到多个函数多个参数:

disable_ads_filter_logic

disable_ads_filter_logic.coffee

禁用广告过滤时,多次调试

目前的发现的逻辑是:

---1】即使是 oad 的 initplayback ,正常返回response,也会返回错误

(1) case 1:

请求:
NSURLRequest requestWithURL:cachePolicy:timeoutInterval
  URL=https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=be5e83dddc65db9b&initcwndbps=1127500&mt=1657589100&ack=1&cpn=j3M40XDCGhcG1Jgj&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140
  cachePolicy=0
  timeoutInterval=60.000000

响应:
NSHTTPURLResponse initWithURL:statusCode:HTTPVersion:headerFields:
  url=https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=be5e83dddc65db9b&initcwndbps=1127500&mt=1657589100&ack=1&cpn=j3M40XDCGhcG1Jgj&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140
  statusCode=200
  HTTPVersion=(null)
  headerFields={
    "alt-svc" = "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"";
    "cache-control" = "public, max-age=86400";
    "client-protocol" = quic;
    "content-type" = "application/vnd.yt-ump";
    "cross-origin-resource-policy" = "cross-origin";
    date = "Tue, 12 Jul 2022 01:52:01 GMT";
    expires = "Wed, 13 Jul 2022 01:52:01 GMT";
    server = "gvs 1.0";
    vary = Origin;
    "x-content-type-options" = nosniff;
  }

但还是会报错:

NSError errorWithDomain:code:userInfo:
  errDomain=com.google.ios.hamplayer
  code=6000
  userInfo={
    HAMErrorDetails = "cronet=10|internal=-356|quic=85";
    HAMErrorURLRequest = "<NSMutableURLRequest: 0x282833ae0> 
      {
        URL: https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=be5e83dddc65db9b&initcwndbps=1127500&mt=1657589100&ack=1&cpn=j3M40XDCGhcG1Jgj&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140
      }";
    HAMRequestNumberLoadTaskKey = 1;
  }

以及:

NSError ml_mediaErrorWithCode:underlyingError:
  arg1=708
  underlyingError=
    Error Domain=com.google.ios.hamplayer
    Code=6000 "(null)"
    UserInfo={
      HAMErrorDetails=cronet=10|internal=-356|quic=85
      HAMRequestNumberLoadTaskKey=1
      HAMErrorURLRequest=<NSMutableURLRequest: 0x282833ae0>
      {
        URL: https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=be5e83dddc65db9b&initcwndbps=1127500&mt=1657589100&ack=1&cpn=j3M40XDCGhcG1Jgj&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140 }} -> mmewc=Error Domain=YTMediaError Code=708 "(null)" UserInfo={NSUnderlyingError=0x283bda940 {Error Domain=com.google.ios.hamplayer Code=6000 "(null)" UserInfo={HAMErrorDetails=cronet=10|internal=-356|quic=85, HAMRequestNumberLoadTaskKey=1, HAMErrorURLRequest=<NSMutableURLRequest: 0x282833ae0> { URL: https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=be5e83dddc65db9b&initcwndbps=1127500&mt=1657589100&ack=1&cpn=j3M40XDCGhcG1Jgj&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140
      }
    }

(2) case 2:

NSURLRequest requestWithURL:cachePolicy:timeoutInterval:
  URL=https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=38d955056e41c6f3&initcwndbps=1195000&mt=1657590782&ack=1&cpn=SKSZKIy7lZZ2pxor&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140
  cachePolicy=0
  timeoutInterval=60.000000

响应:

NSHTTPURLResponse initWithURL:statusCode:HTTPVersion:headerFields:
  url=https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=38d955056e41c6f3&initcwndbps=1195000&mt=1657590782&ack=1&cpn=SKSZKIy7lZZ2pxor&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140
  statusCode=200
  HTTPVersion=(null)
  headerFields={
    "alt-svc" = "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"";
    "cache-control" = "public, max-age=86400";
    "client-protocol" = quic;
    "content-type" = "application/vnd.yt-ump";
    "cross-origin-resource-policy" = "cross-origin";
    date = "Tue, 12 Jul 2022 02:00:07 GMT";
    expires = "Wed, 13 Jul 2022 02:00:07 GMT";
    server = "gvs 1.0";
    vary = Origin;
    "x-content-type-options" = nosniff;
  }

也还是会报错:

NSError errorWithDomain:code:userInfo:
  errDomain=com.google.ios.hamplayer
  code=6000
  userInfo={
    HAMErrorDetails = "cronet=10|internal=-356|quic=85";
    HAMErrorURLRequest = "<NSMutableURLRequest: 0x2828fc1b0> {
       URL: https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=38d955056e41c6f3&initcwndbps=1195000&mt=1657590782&ack=1&cpn=SKSZKIy7lZZ2pxor&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140
    }";
    HAMRequestNumberLoadTaskKey = 1;
  }

以及:

NSError HAMErrorWithCode:userInfo:
  reqUrl=https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=38d955056e41c6f3&initcwndbps=1195000&mt=1657590782&ack=1&cpn=SKSZKIy7lZZ2pxor&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140

以及:

NSError ml_mediaErrorWithCode:underlyingError:
  arg1=708
  underlyingError=
    Error Domain=com.google.ios.hamplayer
    Code=6000 "(null)"
    UserInfo={
      HAMErrorDetails=cronet=10|internal=-356|quic=85
      HAMRequestNumberLoadTaskKey=1
      HAMErrorURLRequest=<NSMutableURLRequest: 0x2828fc1b0> {
        URL: https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=38d955056e41c6f3&initcwndbps=1195000&mt=1657590782&ack=1&cpn=SKSZKIy7lZZ2pxor&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140
      }
    }2】即使是 ctier=L 的 videoplayback,在 前几次请求(rn=1、rn=2等)时,正常返回response,也会报错

(1) rn=1 的 ctier=L

NSURLRequest requestWithURL:cachePolicy:timeoutInterval:
  URL=https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657613405&ei=_dfMYqC2IuGajQTGv7PYAw&ip=162.253.45.206&id=o-AIjeweHrLqp_Pz6Ozv20T5JprNQBR0HmN6o8txqvBehU&source=youtube&requiressl=yes&mh=GE&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnlk&ms=au,rdu&mv=m&mvi=2&pl=22&ctier=L&initcwndbps=1213750&svpuc=1&sabr=1&mt=1657591502&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgVsPJepnUO4V9FcfXV3OqVZtNkVp5xDAw-jIIOVaPqpUCID1hXsWyAMG-_A41aRCm2HF5eqtfDTt5IJs_ATne2Jfz&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgTJgONnp0_iio87Dj5f9DciH8TzxX_zPCs1clwp4poqACIDPhiXjWBAuAs9GAhBSD11lyHobe7EfWyHSV4Eoixwhh&cpn=aFN2DnMpoKgorDiB&rn=1
  cachePolicy=0
  timeoutInterval=60.000000 

也还是会报错:

NSError errorWithDomain:code:userInfo:
  reqUrl=https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657613405&ei=_dfMYqC2IuGajQTGv7PYAw&ip=162.253.45.206&id=o-AIjeweHrLqp_Pz6Ozv20T5JprNQBR0HmN6o8txqvBehU&source=youtube&requiressl=yes&mh=GE&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnlk&ms=au,rdu&mv=m&mvi=2&pl=22&ctier=L&initcwndbps=1213750&svpuc=1&sabr=1&mt=1657591502&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgVsPJepnUO4V9FcfXV3OqVZtNkVp5xDAw-jIIOVaPqpUCID1hXsWyAMG-_A41aRCm2HF5eqtfDTt5IJs_ATne2Jfz&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgTJgONnp0_iio87Dj5f9DciH8TzxX_zPCs1clwp4poqACIDPhiXjWBAuAs9GAhBSD11lyHobe7EfWyHSV4Eoixwhh&cpn=aFN2DnMpoKgorDiB&rn=1

以及:

NSError HAMErrorWithCode:userInfo:
  reqUrl=https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657613405&ei=_dfMYqC2IuGajQTGv7PYAw&ip=162.253.45.206&id=o-AIjeweHrLqp_Pz6Ozv20T5JprNQBR0HmN6o8txqvBehU&source=youtube&requiressl=yes&mh=GE&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnlk&ms=au,rdu&mv=m&mvi=2&pl=22&ctier=L&initcwndbps=1213750&svpuc=1&sabr=1&mt=1657591502&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgVsPJepnUO4V9FcfXV3OqVZtNkVp5xDAw-jIIOVaPqpUCID1hXsWyAMG-_A41aRCm2HF5eqtfDTt5IJs_ATne2Jfz&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgTJgONnp0_iio87Dj5f9DciH8TzxX_zPCs1clwp4poqACIDPhiXjWBAuAs9GAhBSD11lyHobe7EfWyHSV4Eoixwhh&cpn=aFN2DnMpoKgorDiB&rn=1

(2) rn=2 的 ctier=L

正常响应,但也报错:

NSHTTPURLResponse initWithURL:statusCode:HTTPVersionLheaderFields:
  url=https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657613405&ei=_dfMYqC2IuGajQTGv7PYAw&ip=162.253.45.206&id=o-AIjeweHrLqp_Pz6Ozv20T5JprNQBR0HmN6o8txqvBehU&source=youtube&requiressl=yes&mh=GE&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnlk&ms=au,rdu&mv=m&mvi=2&pl=22&ctier=L&initcwndbps=1213750&svpuc=1&sabr=1&mt=1657591502&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgVsPJepnUO4V9FcfXV3OqVZtNkVp5xDAw-jIIOVaPqpUCID1hXsWyAMG-_A41aRCm2HF5eqtfDTt5IJs_ATne2Jfz&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgTJgONnp0_iio87Dj5f9DciH8TzxX_zPCs1clwp4poqACIDPhiXjWBAuAs9GAhBSD11lyHobe7EfWyHSV4Eoixwhh&cpn=aFN2DnMpoKgorDiB&rn=2
  statusCode=200
  HTTPVersion=(null)
  headerFields={
    "alt-svc" = "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"";
    "cache-control" = "private, max-age=21041";
    "client-protocol" = quic;
    "content-type" = "application/vnd.yt-ump";
    "cross-origin-resource-policy" = "cross-origin";
    date = "Tue, 12 Jul 2022 02:14:24 GMT";
    expires = "Tue, 12 Jul 2022 02:14:24 GMT";
    server = "gvs 1.0";
    vary = Origin;
    "x-content-type-options" = nosniff;
  }

但也会报错:

NSError errorWithDomain:code:userInfo:3】当 rn=2 或 rn=3 时的 ctier=L 就正常了,不报错了,能正常返回数据了

(1) rn=3 的 ctier=L

NSURLRequest requestWithURL:cachePolicy:timeoutInterval:
  URL=https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657613405&ei=_dfMYqC2IuGajQTGv7PYAw&ip=162.253.45.206&id=o-AIjeweHrLqp_Pz6Ozv20T5JprNQBR0HmN6o8txqvBehU&source=youtube&requiressl=yes&mh=GE&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnlk&ms=au,rdu&mv=m&mvi=2&pl=22&ctier=L&initcwndbps=1213750&svpuc=1&sabr=1&mt=1657591502&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgVsPJepnUO4V9FcfXV3OqVZtNkVp5xDAw-jIIOVaPqpUCID1hXsWyAMG-_A41aRCm2HF5eqtfDTt5IJs_ATne2Jfz&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgTJgONnp0_iio87Dj5f9DciH8TzxX_zPCs1clwp4poqACIDPhiXjWBAuAs9GAhBSD11lyHobe7EfWyHSV4Eoixwhh&cpn=aFN2DnMpoKgorDiB&rn=3
  cachePolicy=0
  timeoutInterval=60.000000

响应:

NSHTTPURLResponse initWithURL:statusCode:HTTPVersion:headerFields:
  url=https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657613405&ei=_dfMYqC2IuGajQTGv7PYAw&ip=162.253.45.206&id=o-AIjeweHrLqp_Pz6Ozv20T5JprNQBR0HmN6o8txqvBehU&source=youtube&requiressl=yes&mh=GE&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnlk&ms=au,rdu&mv=m&mvi=2&pl=22&ctier=L&initcwndbps=1213750&svpuc=1&sabr=1&mt=1657591502&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgVsPJepnUO4V9FcfXV3OqVZtNkVp5xDAw-jIIOVaPqpUCID1hXsWyAMG-_A41aRCm2HF5eqtfDTt5IJs_ATne2Jfz&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgTJgONnp0_iio87Dj5f9DciH8TzxX_zPCs1clwp4poqACIDPhiXjWBAuAs9GAhBSD11lyHobe7EfWyHSV4Eoixwhh&cpn=aFN2DnMpoKgorDiB&rn=3
  statusCode=200
  HTTPVersion=(null)
  headerFields={
    "alt-svc" = "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"";
    "cache-control" = "private, max-age=20802";
    "client-protocol" = quic;
    "content-type" = "application/vnd.yt-ump";
    "cross-origin-resource-policy" = "cross-origin";
    date = "Tue, 12 Jul 2022 02:18:23 GMT";
    expires = "Tue, 12 Jul 2022 02:18:23 GMT";
    server = "gvs 1.0";
    vary = Origin;
    "x-content-type-options" = nosniff;
  }

(2) rn=2 的 ctier=L,且能正常返回视频数据chunks

MLServerABRLoader dataLoadTask:didReceiveResponse:
  arg1=<MLServerABRDataLoadTask: 0x285a0bb70>
  didReceiveResponse=<NSHTTPURLResponse: 0x280dae440>
    {
      URL: https://rr1---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657615602&ei=kuDMYrOaBpHDigT5y4LYDw&ip=162.253.45.206&id=o-AMkZiBzQ6p7kCJW94A6DtyMGG3HfqwKg1KnZ-fNzwp2U&source=youtube&requiressl=yes&mh=Mk&mm=31,29&mn=sn-phvo-jpql,sn-vgqsknsk&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=22&ctier=L&initcwndbps=1266250&svpuc=1&sabr=1&mt=1657593666&fvip=4&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRQIgAqEYZlR2jQz3cDKbLMWJKMhZa_JyTS1vtd_9O64WLDkCIQDfL32Gx3XA9C4XUvNdiiXvM8TQjClSjAv2N0B2bt-flw%3D%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRgIhAJ8F9p0MlD7yBXsonsAKJ95tApty4njmPKzuAFqoM81WAiEAlFcqzn3LXLCxMMe_WxKUJOd4L9uLrZ7oP_BtbspIFBY%3D&cpn=tuURUWDAKHN5FNX8&rn=2
    }
    {
      Status Code: 200
      Headers {
        "Cache-Control" =     (
            "private, max-age=20896"
        );
        "Content-Type" =     (
            "application/vnd.yt-ump"
        );
        Date =     (
            "Tue, 12 Jul 2022 02:53:26 GMT"
        );
        Expires =     (
            "Tue, 12 Jul 2022 02:53:26 GMT"
        );
        Server =     (
            "gvs 1.0"
        );
        Vary =     (
            Origin
        );
        "alt-svc" =     (
            "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\""
        );
        "client-protocol" =     (
            quic
        );
        "cross-origin-resource-policy" =     (
            "cross-origin"
        );
        "x-content-type-options" =     (
            nosniff
        );
      }
    }


MLServerABRLoader dataLoadTask:didReceiveData:
  arg1=<MLServerABRDataLoadTask: 0x285a0bb70>
  didReceiveData={length = 65536, bytes = 0x235908d0 fa0610d0 fa0618e0 d4033a4b ... 4286a906 e50ad07b }

不过后续此处 rn=2 的 ctier=L 也报错了:

NSError errorWithDomain:code:userInfo:
  https://rr1---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657615602&ei=kuDMYrOaBpHDigT5y4LYDw&ip=162.253.45.206&id=o-AMkZiBzQ6p7kCJW94A6DtyMGG3HfqwKg1KnZ-fNzwp2U&source=youtube&requiressl=yes&mh=Mk&mm=31,29&mn=sn-phvo-jpql,sn-vgqsknsk&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=22&ctier=L&initcwndbps=1266250&svpuc=1&sabr=1&mt=1657593666&fvip=4&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRQIgAqEYZlR2jQz3cDKbLMWJKMhZa_JyTS1vtd_9O64WLDkCIQDfL32Gx3XA9C4XUvNdiiXvM8TQjClSjAv2N0B2bt-flw%3D%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRgIhAJ8F9p0MlD7yBXsonsAKJ95tApty4njmPKzuAFqoM81WAiEAlFcqzn3LXLCxMMe_WxKUJOd4L9uLrZ7oP_BtbspIFBY%3D&cpn=tuURUWDAKHN5FNX8&rn=2

youtubeCallSequence

  • 内部多个函数的调用过程:最初是从播放时间变成0开始分析,慢慢找到的函数调用逻辑
    • 其中最核心的几个函数:
      • 请求request
        • NSURLRequest requestWithURL:cachePolicy:timeoutInterval:
        • NSURLRequest initWithURL:cachePolicy:timeoutInterval:
      • 响应response
        • NSHTTPURLResponse initWithURL:statusCode:HTTPVersion:headerFields:
      • 其他
        • Cronet
          • -[HAMCronetDataLoadTask startWithDelegate:delegateQueue:]

全部内容详见:

youtubeCallSequence.coffee

最后更新: 20220823

================================================================================

【第一个广告视频ID的产生来源:googlevideo.com/initplayback】

--------------------------------------------------------------------------------

最早的 initplayback 的 request (的 http body 的 data )的来源:

YTPlaybackDataLoader onlinePromise
    YTPlaybackDataLoader createPlaybackRequest
        YTPlaybackRequestFactory playbackRequestForPlayerTransition:visibility:viewportSizeProvider:mediaStickySettings:prefetchContext:
            YTPlaybackRequestFactory playbackRequestForNavigationEndpoint:autoplay:autonav:flungFromMDX:expiredForSeconds:visibility:viewportSizeProvider:mediaStickySettings:playerRequestDecorator:prefetchContext:latencyLogger:watchEndpointLoggingContext:
                YTPlaybackRequest initWithProtoRequest:URLRequestProperties:CPN:QOEController:latencyLogger:
                    参数:
                        URLRequestProperties={
                            MLOnesieRequestContext = "<MLOnesieRequestContext: 0x28240cd80>";
                            inline = 1;
                        }
                YTPlayerRequestFactory innerTubeRequestForPlayerWithVideoID:playlistID:playlistIndex:playbackContext:forOffline:clickTrackingParams:playerParams:
                    参数:
                        videoID=DpJ7BL6RdFM
                        playlistID=(null)
                        playlistIndex=0
                        playbackContext=<YTIPlaybackContext 0x282fbc480>: {
                            content_playback_context {
                                time_since_last_ad_seconds: 0
                                lact_milliseconds: 1834558
                                autoplays_since_last_ad: 0
                                conn: 3
                                vis: 5
                                fling: false
                                autoplay: true
                                adsense_client_params: "video_format=22&sdkv=i.17.08&output=xml_vast2"
                                autonav: true
                            }
                        }
                        forOffline=False
                        clickTrackingParams={length = 26, bytes = 0x08001084 67221308 95b584e3 95ddf902 ... d494091d 560607d6 }
                        playerParams=CkkIDxAGQhd3LU1FWTViSkRJUE5vOWtQaU1tdHlBa4oDKSADKAIwBzgFShMI1raF45Xd-QIVg-YoBR2IZAuZUgYIBT........TElUWV0mZ3Y9W0dPT0dMRV9WSUVXQUJJTElUWV0Y0A8YAfAEAfgEAQ%3D%3D

                    返回值:
                        <YTIPlayerRequest 0x2838233a0>: {
                            context {
                                client {
                                    hl: "zh-CN"
                                    gl: "CN"
                                    device_make: "Apple"
                                    device_model: "iPhone9,1"
                                    client_name: IOS
                                    client_version: "17.08.2"
                                    os_name: "iOS"
                                    os_version: "13.3.1.17D50"
                                    raw_device_id: "FC1C0EA4-13EB-4B2E-AB49-32609F28DC8B"
                                    screen_width_points: 375
                                    screen_height_points: 667
                                    screen_pixel_density: 2
                                    client_form_factor: SMALL_FORM_FACTOR
                                    window_width_points: 375
                                    window_height_points: 667
                                    connection_type: CONN_WIFI
                                    config_info {
                                        cold_config_data: "CMvakJgGENLcrQUQjPKtBRCl760FEMaFrQUQmNStBRCFta4FEKedrgUQgYauBRDXka0FEOK5rgUQx7GtBRCHqq4FEJOvrgUQhqGuBRCBxa0FEI6lrQUQkJmuBRCvs64FEOW4rgUQz4WuBRDxuq0FEIjprQUQj5SuBRDBvK4FEIy9rgUQxZquBRDtiq0FELytrgUQjZSuBRDqna0FEL22rgUQqM-oFxCcva4FEJyxrgUQy6KuBRD0x60FEIH4rQUQuIuuBRDUg64FEKmqrgUQnv2tBRCFka4FELTPqBcQibGuBRD3iK4FEOK8rgUQ0_GtBRDYvK4FEIG4rgUQpbCuBRCboK4FENm7rQUQ4a2uBRCX-60FEMWFrgUQt8utBRDrma0FEJaarQUQzeCtBRDr5K0FEPy6rgUQ6pesBRDX9a0FEO-3rgUaMkFDS0c1cG5XU0dZOFRhMFRnNkJ5VjlieWtLUGRUVmxQUkxCWHhkRktXclJ5XzVNNmxRIjJBQ0tHNXBuV1NHWThUYTBUZzZCeVY5YnlrS1BkVFZsUFJMQlh4ZEZLV3JSeV81TTZsUSoYQ0FNU0RBMERzTXlxQWhVRGdvdTVEQT09"
                                        cold_hash_data: "CPnFk5gGEhQxMTU5NDYyMDIxMjM1NDQwNDMxOBjL2pCYBii0z6gXKOK8rgUoibGuBSj3iK4FKJugrgUogbiuBSilsK4FKNi8rgUo0_GtBSiB-K0FKMuirgUonLGuBSiFka4FKJ79rQUouIuuBSipqq4FKPTHrQUo1IOuBSj8uq4FKNf1rQUo77euBSjql6wFKJf7rQUo4a2uBSjZu60FKLfLrQUolpqtBSjr5K0FKMWFrgUo65mtBSjN4K0FKJOvrgUoh6quBSjXka0FKOK5rgUox7GtBSiOpa0FKK-zrgUokJmuBSiBxa0FKIahrgUo0tytBSinna4FKMaFrQUogYauBSil760FKIW1rgUojPKtBSjqna0FKI2UrgUovK2uBSi9tq4FKJjUrQUoxZquBSjtiq0FKKjPqBconL2uBSjxuq0FKIjprQUoj5SuBSjluK4FKIy9rgUoz4WuBSjBvK4FMjJBQ0tHNXBuV1NHWThUYTBUZzZCeVY5YnlrS1BkVFZsUFJMQlh4ZEZLV3JSeV81TTZsUToyQUNLRzVwbldTR1k4VGEwVGc2QnlWOWJ5a0tQZFRWbFBSTEJYeGRGS1dyUnlfNU02bFFCGENBTVNEQTBEc015cUFoVURnb3U1REE9PQ%3D%3D"
                                        hot_hash_data: "CPnFk5gGEhQxNjEzNDg0MTcwMTQ4MTYyODk3Nxj5xZOYBijJ-f0SKPne_RIo1P_9EiiRvv0SKIPt_RIoy639Eijc4P0SKOK__RIo0979Eii7_v0SKILG_RIopdD9Eijizv0SKNLL_RIopqr9EiiFrP0SKKXv_RIonv_8EijI8f0SKL3K_RIope39EijU-f0SKIrg_RIo4az9EiibzP0SKNfM_RIomcb9EiiLqP0SKM7A_RIolOT8EiifgP4SKLn1_BIo89_9EijC_v0SKMvs_RIoytj9EiikxP0SKNGf_RIoyvD9EiiZ-f0SKML2_RIovL79EijGsv0SKNCy_RIo3JP9EiiqtP0SKOO4_RIo4Oz9Eiir1v0SKOPJ_RIo-Pn9EiiBgv0SKKbw_RIoqar9Eii93v0SKMTs_RIyMkFDS0c1cG5XU0dZOFRhMFRnNkJ5VjlieWtLUGRUVmxQUkxCWHhkRktXclJ5XzVNNmxROjJBQ0tHNXBuV1NHWThUYTBUZzZCeVY5YnlrS1BkVFZsUFJMQlh4ZEZLV3JSeV81TTZsUUIcQ0FNU0VRMEJvdGY2RlpzcEZRRGR6OElNbk13RQ%3D%3D"
                                    }
                                    screen_density_float: 2
                                    utc_offset_minutes: 480
                                    user_interface_theme: USER_INTERFACE_THEME_DARK
                                    time_zone: "Asia/Shanghai"
                                    eml_template_context: " \313\334\314\373\331\206\352\310\001 \206\327\321\205\205\213\346\323\361\001 \212\221\203\351\370\266\265\3168 \270\361\327\226\250\315\324\301) \221\307\376\333\240\306\304\357\370\001 \204\255\254\350\361\275\307\370\203\001 \365\360\247\340\223\316\264\322\016 \263\301\327\347\206\371\271\266. \320\301\200\233\321\362\214\245\027 \220\364\314\240\332\360\264\300\314\001 \270\365\242\255\321\241\372\326y \360\322\224\360\247\344\261\322\033 \310\335\301\224\261\262\275\372> \346\261\374\316\345\221\323\350\321\001 \217\375\340\345\313\225\361\264% \206\370\205\214\332\344\367\272\247\001 \343\237\335\242\271\344\250\261\023 \333\236\251\262\323\323\306\322\200\001 \201\311\332\214\371\363\217\252\267\001 \223\240\255\221\227\300\300\301\267\001 \332\271\246\252\206\257\225\273~ \214\327\321\232\303\213\204\363\251\001 \250\321\220\302\333\240\347\222\327\001 \307\306\342\230\345\316\241\330~ \233\311\261\225\335\357\225\226\030 \214\222\262\254\377\315\326\267\365\001 \207\251\305\212\325\337\205\206\345\001 \252\207\217\352\236\264\232\265r"
                                    memory_total_kbytes: 2099249
                                    notification_permission_info {
                                        notifications_setting: NOTIFICATIONS_SETTING_ENABLED
                                        last_device_opt_in_change_time_ago_sec: 5707596
                                    }
                                    client_store_info {
                                        ios_store_country: "CHN"
                                    }
                                }
                                user {
                                }
                                request {
                                }
                                click_tracking {
                                    click_tracking_params: "\010\000\020\204g\"\023\010\225\265\204\343\225\335\371\002\025=\324\224\t\035V\006\007\326"
                                }
                                ad_signals_info {
                                    params {
                                        key: "ms"
                                        value: "zNCgkMGJRpQCc6aMdpeOGv6ez_sOHNtGlWj7lg6EjWr7O7ZqIEwzYOOSsfzRnPhx3kY3I33makVsgrtFOzKammmPQqrf9Jq_eK18MyBdl-obQx_U8oanWw-_NlQf7l191piuk2G3xzWMnXXln426o9M5jcbqwVPf5Nf8opchuOQBNPYwEbDXj6uTpkZl47lPLlO0BZpF5xWpjI14zuD3co0YMnBQHEcZv3AKQlp0UEksZdiohp69QkO1ZoUPZrZrjty7kzuy6swSY7C5Baex2ZA11fj7Qkd_oxnqRxRlsMQuxaBF5CjfVUE5DMAQyxDg3aC3iCqE83h7TJTnSRhOIQ"
                                    }
                                }
                            }
                            video_id: "DpJ7BL6RdFM"
                            playback_context {
                                content_playback_context {
                                    time_since_last_ad_seconds: 0
                                    lact_milliseconds: 1834558
                                    autoplays_since_last_ad: 0
                                    conn: 3
                                    vis: 5
                                    fling: false
                                    autoplay: true
                                    adsense_client_params: "video_format=22&sdkv=i.17.08&output=xml_vast2"
                                    autonav: true
                                    mdx_context { mdx_context {} }
                                }
                            }
                            racy_check_ok: false
                            for_offline: false
                            params: "CkkIDxAGQhd3LU1FWTViSkRJUE5vOWtQaU1tdHlBa4oDKSADKAIwBzgFShMI1raF45Xd-QIVg-YoBR2IZAuZUgYIBTABWAFoAXAJEpkaEpYaCAESkRoSDXByb21vdGVkVmlkZW9K_xkIARL6GSKpCwgTEp0LaHR0cHM6Ly93d3cuZ29vZ2xl ... ... tDTElDS19NU10mYWRfbXQ9W0FEX01UXSZhY3Z3PVtWSUVXQUJJTElUWV0mZ3Y9W0dPT0dMRV9WSUVXQUJJTElUWV0Y0A8YAfAEAfgEAQ%3D%3D"
                            cpn: "Fmq_1vPSmpZkjLS0"
                            override_muted_at_start: false
                            caption_params {
                                device_captions_on: false
                            }
                            video_quality_setting_params {
                                video_quality_setting_mobile_network: VIDEO_QUALITY_SETTING_UNKNOWN
                                video_quality_setting_wifi: VIDEO_QUALITY_SETTING_UNKNOWN
                                video_quality_last_written_ms: 0
                            }
                        }

                    YTIPlayerRequest init
                        GPBMessage


注:

GPBMessage ~= General Protocol Buffer Message


--------------------------------------------------------------------------------

调用 HAMDataLoadRequest 时 传入了 POST的application/x-protobuf的NSData:

Module_Framework`-[YTTimedAction startTimerWithFireDate:timeInterval:repeats:runLoopMode:]_block + 40
    Module_Framework`-[YTTimedAction triggerAction] + 124
        YouTube`-[YTInlineMutedPlaybackContainerController startPlaybackImmediately] + 324
            YouTube`-[YTInlineMutedPlaybackWatchController loadVideoAndAttachView:] + 256
                Module_Framework`-[YTPlayerViewController prepareToLoadWithPlayerTransition:expectedLayout:] + 276
                    Module_Framework`-[YTLocalPlaybackController prepareToLoadWithPlayerTransition:expectedLayout:] + 556
                        Module_Framework`-[YTPlaybackDataLoader startLoading] + 1060
                            Module_Framework`-[YTPlaybackDataLoader onlinePromise] + 332
                                Module_Framework`-[YTPlayerService makePlaybackRequest:responseBlock:errorBlock:] + 524
                                    Module_Framework`-[YTPlayerServiceTask sendRequest] + 248
                                        Module_Framework`-[YTInnerTubeRequestor makeInnerTubeRequest:withParser:completionBlock:retryEnabled:timeoutInterval:enableLatencyTicks:mutableSharedData:] + 28
                                            Module_Framework`-[YTInnerTubeRequestor makeInnerTubeRequest:withParser:completionBlock:retryEnabled:timeoutInterval:enableLatencyTicks:mutableSharedData:nilIdentityIsSignedOut:] + 36
                                                Module_Framework`-[YTBaseInnerTubeService makePOSTRequest:withParser:completionBlock:retryEnabled:timeoutInterval:enableLatencyTicks:mutableSharedData:nilIdentityIsSignedOut:] + 540
                                                    Module_Framework`-[YTBaseInnerTubeService performHTTPRequest:service:withIdentity:dataBlock:errorBlock:retryEnabled:nilIdentityIsSignedOut:] + 628
                                                        Module_Framework`-[YTVisitorDataRequestDecorator decorateRequest:withCompletionBlock:] + 260
                                                            sub_186AB30 = Module_Framework`___lldb_unnamed_symbol14785$$Module_Framework + 608
                                                                Module_Framework`-[YTBaseNetworkService performHTTPRequest:withAuthorizer:responseBlock:errorBlock:retryConfig:] + 184
                                                                    Module_Framework`-[YTBaseNetworkService performHTTPRequest:withAuthorizer:backgroundCompletionBlock:retryConfig:] + 928
                                                                        Module_Framework`-[MLOnesieUMPFetcherTask resume] + 208
                                                                            Module_Framework`-[MLOnesieRequestFactory onesieRequestForPlayerRequest:authorization:dataLoader:context:cryptor:requestNumber:completionHandler:] + 432
                                                                                Module_Framework`-[MLOnesieRequestFactory onesieRequestForPlayerRequest:authorization:dataLoader:context:cryptor:requestNumber:completionHandler:]_block + 64
                                                                                    Module_Framework`-[MLOnesieRequestFactory onesieRequestForPlayerRequest:dataLoader:context:cryptor:requestNumber:error:] + 5628
                                                                                        参数:
                                                                                            request=<NSMutableURLRequest: 0x282e83150> {
                                                                                                URL: "https://youtubei.googleapis.com/youtubei/v1/player?key=AIzaSyB-63vPrdThhKuerbB2N_l7Kwwcxj6yUAc&id=r17kWuxKXKs&t=DA5C7286-F10C-4EBC-942E-96B8CA551C57"
                                                                                            }
                                                                                            dataLoader=<HAMCronetDataLoader: 0x283c621f0>
                                                                                            context=<MLOnesieRequestContext: 0x2809ae3a0>
                                                                                            cryptor=<MLOnesiePlayerServiceCryptor: 0x283c68930>
                                                                                            requestNumber=1
                                                                                            error=0x16d760c08

                                                                                        HAMDataLoadRequest initWithRangedURL:timeoutInterval:HTTPMethod:HTTPContentType:HTTPBody:idempotent:
                                                                                            参数:
                                                                                                rangeUrl=<HAMRangedURL: 0x281963320>
                                                                                                    URL = "https://rr1---sn-hp57kndr.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&rbqsm=fr&msp=1&odeak=1&odepv=1&osfc=1&id=fd97bcf151a359c8&initcwndbps=1645000&mt=1661156982&pxtags=Cg4KAnR4EggyNDE5NzI3NQ&rxtags=Cg4KAnR4EggyNDE5NzI3NQ,Cg4KAnR4EggyNDE5NzI3Ng,Cg4KAnR4EggyNDE5NzI3Nw&ack=1&cpn=AuykYLjoeyBPVKWO&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140"
                                                                                                timeoutInterval=60
                                                                                                HTTPMethod="POST"
                                                                                                HTTPContentType="application/x-protobuf"
                                                                                                HTTPBody=7647 bytes
                                                                                                idempotent=true

--------------------------------------------------------------------------------

googlevideo.com/initplayback 的调用顺序:

[case 1]

MLOnesieUMPFetcherTask onRequestFactoryCompletionWithRequest:error:
    参数:
        request=<HAMDataLoadRequest: 0x282027040>
            _idempotent (BOOL): YES
            _rangedURL (HAMRangedURL*): <HAMRangedURL: 0x283831120>
            _timeoutInterval (double): 60
            _HTTPMethod (NSString*): @"POST"
            _HTTPContentType (NSString*): @"application/x-protobuf"
            _HTTPBody (NSData*): <NSConcreteData: 0x283831140>
        error=(null)

    startRequestTask_104238C = -[MLOnesieUMPFetcherTask onRequestFactoryCompletionWithRequest:error:]_block + 64
        -[HAMCronetDataLoader taskWithRequest:userInfo:] + 140
            -[HAMDataLoadRequest buildURLRequest] + 140
                NSURLRequest requestWithURL:cachePolicy:timeoutInterval:
                    参数:
                        URL="https://rr5---sn-p5qddn76.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&rbqsm=fr&msp=1&odeak=1&odepv=1&osfc=1&id=a52feece777301a2&initcwndbps=1786250&mt=1660899670&pxtags=Cg4KAnR4EggyNDE5NzI3NQ&rxtags=Cg4KAnR4EggyNDE5NzI3NQ,Cg4KAnR4EggyNDE5NzI3Ng,Cg4KAnR4EggyNDE5NzI3Nw&ack=1&cpn=Bu494mABvg3R6sCr&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140"
                        cachePolicy=NSURLRequestUseProtocolCachePolicy
                        timeoutInterval=60

[case 2]

callPrewarmConnection_10470B8
    startTask_1048AA0 = ___lldb_unnamed_symbol12576$$Module_Framework + 72
        -[HAMCronetDataLoader taskWithRequest:userInfo:] + 140
            -[HAMDataLoadRequest buildURLRequest] + 380
                NSURLRequest requestWithURL:cachePolicy:timeoutInterval:
                    参数:
                        URL="https://rr2---sn-p5qs7nsr.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&rbqsm=fr&msp=1&odeak=1&odepv=1&osfc=1&id=8bfb111f4c684ce5&initcwndbps=1683750&mt=1660916238&pxtags=Cg4KAnR4EggyNDE5NzI3NQ&rxtags=Cg4KAnR4EggyNDE5NzI3NQ,Cg4KAnR4EggyNDE5NzI3Ng,Cg4KAnR4EggyNDE5NzI3Nw&cpn=YCXS_oBo1TcIotC0&pai=0&pvi=0&owc=1"
                        cachePolicy=NSURLRequestUseProtocolCachePolicy
                        timeoutInterval=60

--------------------------------------------------------------------------------

MLServerABRLoader dataLoadTask:didReceiveData: 的后续response的data的parse解析过程

当 禁用广告过滤 正常加载广告时的流程:

(1) MLServerABRLoader -> HAMMP4InitializationChunk

-[HAMCronetDataLoadTask startWithDelegate:delegateQueue:]_block_block + 36
    -[MLServerABRDataLoadTask dataLoadTask:didReceiveData:] + 292
        MLServerABRLoader dataLoadTask:didReceiveData:
            serverABRUMPParserParseResponseData_FE2F90 = ___lldb_unnamed_symbol12192$$Module_Framework + 136
                parserParseData_32CAA84 = ___lldb_unnamed_symbol84370$$Module_Framework + 160
                    extractMediaHeaderBytes_32CAC60
                    callParseData_32CAE80 = ___lldb_unnamed_symbol84372$$Module_Framework + 52
                        sub_FE4C80 = ___lldb_unnamed_symbol12224$$Module_Framework
                            BaseUMPParser_parseData_FE37D4 = ___lldb_unnamed_symbol12209$$Module_Framework + 172
                                citer 的 videoplayback
                                    for youtube::media::ServerABRUMPParser + 16 => checkMediaHeaderUmpBadPartid_107DD4C = ___lldb_unnamed_symbol12801$$Module_Framework
                                        MLQOEError QOEErrorWithCode:details:
                                            参数:
                                                code=ump.badpartid
                                                details={ partid = 0xA; }

                                其他情况,比如: 正常流程 或  oad 的 initplayback
                                    for youtube::media::OnesieUMPParser + 504 => checkMediaHeaderUmpBadPartid_1046494 = ___lldb_unnamed_symbol12555$$Module_Framework
                                        toCallProcessMediaHeader_FE2EB0 = ___lldb_unnamed_symbol12191$$Module_Framework + 108
                                            validateMediaHeader_FE72BC = ___lldb_unnamed_symbol12318$$Module_Framework + 144
                                                parseAndSaveChunk_107D850 = ___lldb_unnamed_symbol12797$$Module_Framework + 64
                                                    -[MLServerABRLoader chunkForMediaHeader:] + 324
                                                        -[MLMP4ChunkFactory initializationChunkWithURL:] + 72
                                                            HAMMP4InitializationChunk initWithFormat:rangedURL:preferTrackTimescale:
                                                                参数: case 1
                                                                    arg1=0x0000000282ca6b80
                                                                    arg2=0x000000028116c800
                                                                    arg3=false

(2) MLOnesieUMPFetcherTask -> HAMMP4InitializationChunk

-[HAMCronetDataLoadTask startWithDelegate:delegateQueue:]_block_block + 36
    -[MLOnesieUMPFetcherTask dataLoadTask:didReceiveData:] + 196
        ___lldb_unnamed_symbol12192$$Module_Framework + 136
            ___lldb_unnamed_symbol84370$$Module_Framework + 160
                ___lldb_unnamed_symbol84372$$Module_Framework + 52
                    ___lldb_unnamed_symbol12209$$Module_Framework + 312
                        sub_1045904 = ___lldb_unnamed_symbol12549$$Module_Framework + 168
                            ___lldb_unnamed_symbol12191$$Module_Framework + 108
                                processOnesieMediaHeader_10482D8 = ___lldb_unnamed_symbol12575$$Module_Framework + 1120
                                    -[MLMP4ChunkFactory initializationChunkWithURL:] + 72
                                        HAMMP4InitializationChunk initWithFormat:rangedURL:preferTrackTimescale:

(3) MLServerABRDataLoadTask -> HAMChunk

-[HAMCronetDataLoadTask startWithDelegate:delegateQueue:]_block_block + 36
    -[MLServerABRDataLoadTask dataLoadTask:didReceiveData:] + 292
        ___lldb_unnamed_symbol12192$$Module_Framework + 136
            ___lldb_unnamed_symbol84370$$Module_Framework + 160
                ___lldb_unnamed_symbol84372$$Module_Framework + 52
                    ___lldb_unnamed_symbol12209$$Module_Framework + 336
                        sub_107DAB0 = ___lldb_unnamed_symbol12800$$Module_Framework + 232
                            HAMChunk loadDidCompleteWithError:

(4) MLOnesieChunkLoadTask -> HAMChunk

-[MLOnesieChunkLoadTask initWithRange:chunks:dataBuffer:cache:delegate:queue:latencyLogger:]_block_block + 100
    -[HAMBaseChunkLoadTask didReceiveData:error:] + 656
        -[HAMBaseChunkLoadTask currentChunkDidComplete] + 256
            -[HAMMediaChunk loadDidCompleteWithError:] + 48
                HAMChunk loadDidCompleteWithError:

(5) -> MLServerABRLoader recordInvalidFormatQOEErrorWithFormatID:extraDetails:

-[HAMCronetDataLoadTask startWithDelegate:delegateQueue:]_block_block + 36
    -[MLServerABRDataLoadTask dataLoadTask:didReceiveData:] + 292
        ___lldb_unnamed_symbol12192$$Module_Framework + 136
            ___lldb_unnamed_symbol84370$$Module_Framework + 160
                ___lldb_unnamed_symbol84372$$Module_Framework + 52
                    ___lldb_unnamed_symbol12209$$Module_Framework + 624
                        chekAndCallProcessMediaHeader_FE43F4 = ___lldb_unnamed_symbol12214$$Module_Framework + 276
                            ___lldb_unnamed_symbol12191$$Module_Framework + 108
                                void youtube::media::BaseUMPParser::AccumulateDataAndParseProto<video_streaming::FormatInitializationMetadata>(unsigned int, absl::string_view, video_streaming::UMPPartID, std::__1::function<void (video_streaming::FormatInitializationMetadata)>)::'lambda'(absl::string_view)::operator()(absl::string_view) const + 436
                                    sub_FE61AC = ___lldb_unnamed_symbol12275$$Module_Framework + 160
                                        callDidParseFormatInitializationMetadata_107E5FC = ___lldb_unnamed_symbol12805$$Module_Framework + 44
                                            -[MLServerABRLoader didParseFormatInitializationMetadata:] + 268
                                                MLServerABRLoader recordInvalidFormatQOEErrorWithFormatID:extraDetails:
                                                    参数:
                                                        formatID="140_1629449114196897"
                                                        extraDetails="init_metadata_badid"



相关函数:

[callParseData_32CAE80]
核心代码逻辑:
  return (*(*curServerABRUMPParserOffset0x20Value + 0x30LL))();// 
                                                // call: sub_FE4C80 = ___lldb_unnamed_symbol12224:
                                                //   x0 = curServerABRUMPParserOffset0x20Value
                                                //   x1 = curServerABRUMPParserOffset0x40Ptr
                                                //   x2 = remainBufferSizePtr
                                                //   x3 = mediaHeaderBytesPtr

[sub_FE4C80]
核心逻辑:
  return BaseUMPParser_parseData_FE37D4(*(_QWORD *)(a1 + 8), *a2, *a3, *a4);

[BaseUMPParser_parseData_FE37D4]
核心逻辑:
    result = (*(__int64 (**)(void))(*(_QWORD *)result + 0x70LL))();
    // 实际调试 = 出错流程?: checkMediaHeaderUmpBadPartid_107DD4C

[chekAndCallProcessMediaHeader_FE43F4]
核心逻辑:
    toCallProcessMediaHeader_FE2EB0(v10, v9, v8, v7, (__int64)&v21);

[toCallProcessMediaHeader_FE2EB0]
核心逻辑:
    result = (*(__int64 (**)(void))(*(_QWORD *)v9 + 0x30LL))();
    // for MLServerABRDataLoadTask(MLServerABRLoader) is: validateMediaHeader_FE72BC
    // for MLOnesieUMPFetcherTask is: processOnesieMediaHeader_10482D8

[validateMediaHeader_FE72BC]
核心逻辑:
    (*(void (__fastcall **)(__int64, char *))(*(_QWORD *)v2 + 32LL))(v2, &v10); // = parseAndSaveChunk_107D850

[parseAndSaveChunk_107D850]
核心逻辑:
  v7 = (struct objc_object *)objc_msgSend_3E84298(curMLServerABRLoader_, "chunkForMediaHeader:", mediaHeader);

[youtube::media::BaseUMPParser::AccumulateDataAndParseProto<video_streaming::FormatInitializationMetadata>(unsigned int,absl::string_view,video_streaming::UMPPartID,std::__1::function<void ()(video_streaming::FormatInitializationMetadata)>)::{lambda(absl::string_view)]
核心逻辑:
  (*(void (**)(void))(*(_QWORD *)v20 + 0x30LL))(); // sub_FE61AC

[sub_FE61AC]
核心逻辑:
  (*(void (**)(void))(**(_QWORD **)(v3 + 8) + 0x50LL))();// callDidParseFormatInitializationMetadata_107E5FC


================================================================================

ctier 重发请求 死循环的调用逻辑:

-[MLServerABRLoader continueLoading]
    shouldSendRequest==True:
        -[MLServerABRDataLoader createDataLoadTaskForRequest:] + 128
            -[MLServerABRDataLoader dataLoadTaskForHTTPBody:isPrimaryHostProbing:] + 424
                -[HAMCronetDataLoader taskWithRequest:userInfo:] + 140
                    -[HAMDataLoadRequest buildURLRequest] + 140
                        NSURLRequest requestWithURL:cachePolicy:timeoutInterval:

        -[MLServerABRDataLoadTask startWithDelegate:delegateQueue:] + 88
            HAMCronetDataLoadTask startWithDelegate:delegateQueue:
                Cronet_UrlRequestCallback_OnResponseStarted_194CCE4 = ___lldb_unnamed_symbol15676$$Module_Framework
                    generateNewHttpResponse_194D6D8 = ___lldb_unnamed_symbol15681$$Module_Framework + 376 = sub_194D6D8
                        NSHTTPURLResponse initWithURL:statusCode:HTTPVersion:headerFields: -> 创建新的 ctier 的response

                    -[MLServerABRDataLoadTask dataLoadTask:didReceiveResponse:] + 424
                        -[MLServerABRLoader dataLoadTask:didReceiveResponse:]   -> 当 ctier 报错时
                            NSError HAMErrorWithURLResponse:userInfo:request:
                                    NSError HAMErrorWithCode:userInfo:

                Cronet_UrlRequestCallback_OnSucceeded_194D248 = ___lldb_unnamed_symbol15678$$Module_Framework
                    MLServerABRDataLoadTask dataLoadTask:didCompleteWithError:
                        MLServerABRLoader dataLoadTask:didCompleteWithError:
                            MLServerABRLoader updateLoadRetryPolicyOnLoadCompletionWithError:
                                MLDefaultLoadRetryPolicy didCompleteLoadWithError:
                                    error==NULL: MLDefaultLoadRetryPolicy cancelRetryAndResetBackoff:
                                        retryID++

                                error!=NULL: MLDefaultLoadRetryPolicy scheduleRetryWithBlock:
                                    canRetry==True: callExecuteRetryBlockWithRetryID_FF3070 = -[MLDefaultLoadRetryPolicy scheduleRetryWithBlock:]_block + 44
                                        -[MLDefaultLoadRetryPolicy executeRetryBlockWithRetryID:] + 68
                                            callMLServerABRLoaderContinueLoading_107B5A8
                                                -[MLServerABRLoader continueLoading] + 924
                                                    -[MLServerABRDataLoadTask startWithDelegate:delegateQueue:] + 88
                                                        HAMCronetDataLoadTask startWithDelegate:delegateQueue: -> 进入 ctier 的死循环 重复请求

                                    canRetry==False: callMLServerABRLoaderFailWithError_107B5B8
                                        MLServerABRLoader failWithError:



================================================================================

相关函数详解:

MLServerABRLoader dataLoadTask:didCompleteWithError:
    if ( curServerABRUMPParser )
        parseResponseError_107E6B0(curServerABRUMPParser, inputError_1);

    if ( !inputError_1
        && !curMLServerABRLoader->_didReceiveChunkForCurrentRequest
        && !curMLServerABRLoader->_didReceiveNextRequestPolicyForCurrentRequest )
    {
        defaultBackOffTimeMs = curMLServerABRLoader->_defaultBackOffTimeMs;
        if ( defaultBackOffTimeMs >= 1 )
        {
            ...
        }
    }

    objc_msgSend_3E84298(curMLServerABRLoader, "updateLoadRetryPolicyOnLoadCompletionWithError:", inputError_3);


MLServerABRLoader updateLoadRetryPolicyOnLoadCompletionWithError:
    参数:
        case 1
            arg1={
                Error Domain=com.google.ios.hamplayer
                Code=10000 "(null)"
                UserInfo={
                    HAMRequestNumberLoadTaskKey=1,
                    HAMErrorURLRequest=<NSMutableURLRequest: 0x280ab2470> {
                        URL: https://rr1---sn-8xgp1vo-p5ql.googlevideo.com/videoplayback?expire=1654546559&ei=HwyeYrH5DJWN_9EPouqpqA8&ip=70.110.26.104&id=o-ABMZsKNB0GJ_BmboM7YSytnAHB7ASC_Y7GC6jO056wJe&source=youtube&requiressl=yes&mh=ji&mm=31,29&mn=sn-8xgp1vo-p5ql,sn-p5qlsndz&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=20&ctier=L&initcwndbps=1490000&svpuc=1&sabr=1&mt=1654524545&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRgIhAPnD2xwm1J-b9yvruQe1aozyNm_9xaCQvtdIM7n32vA5AiEA4mVXjIUgf7425J8XlwfLdVhMyDiZHFtRhRE1jHxtWZo%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRQIgd3ooIz7fpF6JTB11opldSL1WIPtx4L5FaBEqhdEZBLwCIQChh18q1sc8T2XEIwlQBI8O9cF_DI2FPVLjVCNRHhRPCQ%3D%3D&cpn=sjOhS6zpDL-OE-pP&rn=1
                    }
                }
            }

        case 2:
            arg1=domain: "com.google.ios.hamplayer" - code: 6009

        case 3:
            Error Domain=com.google.ios.hamplayer
            Code=6009 "(null)"
            UserInfo={
                HAMErrorHTTPURLResponse=<NSHTTPURLResponse: 0x28095cd60> {
                    URL: https://rr1---sn-8xgp1vo-p5ql.googlevideo.com/videoplayback?expire=1654546559&ei=HwyeYrH5DJWN_9EPouqpqA8&ip=70.110.26.104&id=o-ABMZsKNB0GJ_BmboM7YSytnAHB7ASC_Y7GC6jO056wJe&source=youtube&requiressl=yes&mh=ji&mm=31,29&mn=sn-8xgp1vo-p5ql,sn-p5qlsndz&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=20&ctier=L&initcwndbps=1490000&svpuc=1&sabr=1&mt=1654524545&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRgIhAPnD2xwm1J-b9yvruQe1aozyNm_9xaCQvtdIM7n32vA5AiEA4mVXjIUgf7425J8XlwfLdVhMyDiZHFtRhRE1jHxtWZo%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRQIgd3ooIz7fpF6JTB11opldSL1WIPtx4L5FaBEqhdEZBLwCIQChh18q1sc8T2XEIwlQBI8O9cF_DI2FPVLjVCNRHhRPCQ%3D%3D&cpn=sjOhS6zpDL-OE-pP&rn=2
                    }
                    {
                        Status Code: 302,
                        Headers {
                            Connection = close
                            Content-Length = 0
                            Location = "https://rr1---sn-8xgp1vo-p5ql.googlevideo.com/videoplayback?expire=1654546559&ei=HwyeYrH5DJWN_9EPouqpqA8&ip=70.110.26.104&id=o-ABMZsKNB0GJ_BmboM7YSytnAHB7ASC_Y7GC6jO056wJe&source=youtube&requiressl=yes&mh=ji&mm=31,29&mn=sn-8xgp1vo-p5ql,sn-p5qlsndz&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=20&ctier=A&initcwndbps=1490000&svpuc=1&sabr=1&mt=1654524545&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRgIhAPnD2xwm1J-b9yvruQe1aozyNm_9xaCQvtdIM7n32vA5AiEA4mVXjIUgf7425J8XlwfLdVhMyDiZHFtRhRE1jHxtWZo%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRQIgd3ooIz7fpF6JTB11opldSL1WIPtx4L5FaBEqhdEZBLwCIQChh18q1sc8T2XEIwlQBI8O9cF_DI2FPVLjVCNRHhRPCQ%3D%3D&cpn=sjOhS6zpDL-OE-pP&rn=2"
                            Server = "atomos-tproxy 1.0"
                        }
                    },
                HAMRequestNumberLoadTaskKey=2,
                HAMErrorURLRequest=<NSMutableURLRequest: 0x280ab1f50> {
                    URL: https://rr1---sn-8xgp1vo-p5ql.googlevideo.com/videoplayback?expire=1654546559&ei=HwyeYrH5DJWN_9EPouqpqA8&ip=70.110.26.104&id=o-ABMZsKNB0GJ_BmboM7YSytnAHB7ASC_Y7GC6jO056wJe&source=youtube&requiressl=yes&mh=ji&mm=31,29&mn=sn-8xgp1vo-p5ql,sn-p5qlsndz&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=20&ctier=L&initcwndbps=1490000&svpuc=1&sabr=1&mt=1654524545&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRgIhAPnD2xwm1J-b9yvruQe1aozyNm_9xaCQvtdIM7n32vA5AiEA4mVXjIUgf7425J8XlwfLdVhMyDiZHFtRhRE1jHxtWZo%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRQIgd3ooIz7fpF6JTB11opldSL1WIPtx4L5FaBEqhdEZBLwCIQChh18q1sc8T2XEIwlQBI8O9cF_DI2FPVLjVCNRHhRPCQ%3D%3D&cpn=sjOhS6zpDL-OE-pP&rn=2
                }
            }

    核心代码逻辑:
        objc_msgSend_3E84298((void *)curMLServerABRLoader->_loadRetryPolicy, "didCompleteLoadWithError:", error_);
        if ( error_ )
        {
            if ( (unsigned int)objc_msgSend_3E84298((void *)curMLServerABRLoader->_loadRetryPolicy, "canRetry") )
            {
                blockInvoke = callMLServerABRLoaderContinueLoading_107B5A8;

                objc_msgSend_3E84298((void *)loadRetryPolicy, "scheduleRetryWithBlock:", &StackBlock);
            }
            else
            {
                blockInvoke1 = callMLServerABRLoaderFailWithError_107B5B8;
            }
        }

    调用到:
        MLDefaultLoadRetryPolicy canRetry

        MLDefaultLoadRetryPolicy didCompleteLoadWithError:

        MLDefaultLoadRetryPolicy scheduleRetryWithBlock:

        callMLServerABRLoaderContinueLoading_107B5A8

        callMLServerABRLoaderFailWithError_107B5B8


MLDefaultLoadRetryPolicy didCompleteLoadWithError:
    参数:
        case 1: error=NULL
        case 2: NSError(
                    Error Domain=com.google.ios.hamplayer
                    Code=10000 "(null)"
                    UserInfo={
                        HAMRequestNumberLoadTaskKey=1,
                        HAMErrorURLRequest=<NSMutableURLRequest: 0x2838e9480>{
                            URL: https://rr4---sn-a5msenes.googlevideo.com/videoplayback?expire=1654443385&ei=GXmcYoryCa-RsfIP1Oy_mAs&ip=104.172.170.169&id=o-ANzDZ3h7N5rZAloUCdQGuYMBEb80Uu_e4KPc7xaAyG1K&source=youtube&requiressl=yes&mh=_h&mm=31,29&mn=sn-a5msenes,sn-a5mekn6k&ms=au,rdu&mv=m&mvi=4&pl=17&ctier=L&initcwndbps=1842500&svpuc=1&sabr=1&mt=1654421335&fvip=1&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRQIgLJQmm-EOXj9xFFyjCBHlgn2RiukSzRseDFdGPROqJ8ACIQCdoic9p3flB3FJOu2lqys31IE4I-wBZKNPR-hjkf0HHA%3D%3D&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgULlnjQq0nkVEN6oLDPNPfvxUrcF1uFeiOfQiUhNE9RMCIGbuOCNl2TVJp2VegKsJVujYtW_j53A1zYzznjVe3xp3&cpn=q6v1kI3_nWlzP4Qd&rn=1 
                        }
                    }
                )
    核心代码逻辑:
        if ( inputError )
        {
            if ( objc_msgSend_3E84298(inputError, "code") != &zero_2710 && objc_msgSend_3E84298(inputError_, "code") != algn0x20_1779 )
            {
                objc_msgSend_3E84298((void *)curMLDefaultLoadRetryPolicy->_errors, "addObject:", inputError_);
                objc_msgSend_3E84298(curMLDefaultLoadRetryPolicy->_backoffCalculator, "updateInterval");
            }
        }
        else
        {
            objc_msgSend_3E84298((void *)curMLDefaultLoadRetryPolicy->_errors, "removeAllObjects");
            objc_msgSend_3E84298(curMLDefaultLoadRetryPolicy->_backoffCalculator, "resetInterval");
            objc_msgSend_3E84298(curMLDefaultLoadRetryPolicy, "cancelRetryAndResetBackoff:", 0LL);
        }
    调用到:
        MLDefaultLoadRetryPolicy cancelRetryAndResetBackoff:


MLDefaultLoadRetryPolicy cancelRetryAndResetBackoff:
    核心逻辑:
        ++self->_retryID;
        curMLDefaultLoadRetryPolicy->_retryBlock = 0LL;


MLDefaultLoadRetryPolicy scheduleRetryWithBlock:
    核心逻辑:
        curMLDefaultLoadRetryPolicy->_retryBlock = newRetryBlock_2;
        if ( !curRetryBlock )
        {
            retryID = curMLDefaultLoadRetryPolicy->_retryID;
            objc_msgSend_3E84298(curMLDefaultLoadRetryPolicy->_backoffCalculator, "interval");
            dispathTime_backoffInterval = dispatch_time(0LL, (signed __int64)(backoffInterval * 1000000000.0));

            blockInvoke = callExecuteRetryBlockWithRetryID_FF3070;
        }

    调用到:
        callExecuteRetryBlockWithRetryID_FF3070


Cronet_UrlRequestCallback_OnResponseStarted_194CCE4 = ___lldb_unnamed_symbol15676$$Module_Framework + 80 = sub_194CCE4
    代码核心逻辑:
        if ( !curCronetDataLoadTask->taskCancelled_ )
        {
            newNSHTTPURLResponse = generateNewHttpResponse_194D6D8(responseInfo_);

            objc_msgSend_3E84298(
                (void *)curCronetDataLoadTask_->delegate_,
                "dataLoadTask:didReceiveResponse:",
                curCronetDataLoadTask_->parentTask_,
                curCronetDataLoadTask_->response_
            );

            if ( (signed int)getResponseStatusCode_3DFA210(responseInfo_) < 400 )
            {
                curCronetDataLoadTask_->bufferData_ = malloc(curCronetDataLoadTask_->bufferDataSize_);

                tryResetTimeoutTimer_194C704(curCronetDataLoadTask_);

                cronetUrlRequestReadResult = callCronetUrlRequestRead_3DF9370(request_);

                if ( (_DWORD)cronetUrlRequestReadResult ) // read error
                {
                    ...
                }
            }
            else
            {
                newHamError = objc_msgSend_3E84298(
                    &OBJC_CLASS___NSError,
                    "HAMErrorWithURLResponse:userInfo:request:",
                    curCronetDataLoadTask_->response_,
                    curCronetDataLoadTask_->userInfo_,
                    curCronetDataLoadTask_->URLRequest_
                );

                objc_msgSend_3E84298(
                    (void *)curCronetDataLoadTask_->delegate_,
                    "dataLoadTask:didCompleteWithError:",
                    curCronetDataLoadTask_->parentTask_,
                    newHamError_
                );
                objc_msgSend_3E84298(
                    (void *)curCronetDataLoadTask_->observer_,
                    "dataLoadTask:didCompleteWithError:",
                    curCronetDataLoadTask_->parentTask_,
                    newHamError_
                );

                objc_msgSend_3E84298(curCronetDataLoadTask_->timeoutTimer_, "invalidate");
            }
        }

================================================================================


--------------------------------------------------------------------------------

新生成 ctier=L 的 NSMutableURLRequest 请求 的函数调用顺序:

-[HAMPlayerInternal playerLoop] + 1736
    -[HAMBaseTrackRenderer prepareAndReturnError:] + 48
        -[HAMSBARAudioTrackRenderer internalPrepareAndReturnError:] + 40
            -[HAMQueueingRootSampleBufferSource prepareAndReturnError:] + 704
                -[HAMDASHSampleBufferSource prepareAndReturnError:] + 100
                    -[MLServerABRController prepareAndReturnError:] + 40
                        -[MLServerABRLoader continueLoading] + 840
                            -[MLServerABRDataLoader createDataLoadTaskForRequest:] + 128
                                -[MLServerABRDataLoader dataLoadTaskForHTTPBody:isPrimaryHostProbing:] + 424
                                    -[HAMCronetDataLoader taskWithRequest:userInfo:] + 140
                                        -[HAMDataLoadRequest buildURLRequest] + 140
                                            NSURLRequest requestWithURL:cachePolicy:timeoutInterval:
                                                某次参数:
                                                    URL="https://rr4---sn-nx57ynsz.googlevideo.com/videoplayback?expire=1655759112&ei=p4ywYoCpO-GMsfIP9c-j-A0&ip=72.174.144.110&id=o-AOtW_cgK5DpGSlTFzlnNQ5jG-qYf6YbO-W_J4o6Z7Bg0&source=youtube&requiressl=yes&mh=mR&mm=31,29&mn=sn-nx57ynsz,sn-nx5s7n7y&ms=au,rdu&mv=m&mvi=4&pl=19&ctier=L&initcwndbps=1712500&svpuc=1&sabr=1&mt=1655737257&fvip=1&keepalive=yes&fexp=24001373,24007246,24208264&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgdJbzVTf5BpT1a0Qd-15luRpD3uxu9oqoIBFYuNPFrw0CIHogAdP_kVZFI1gE2yvIbih1AY5458ViOpGC77ywCY1Y&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgUMelUGd_HH1szTAu1xTcLTCTp0LZCwG81qqdxbtYQoMCIB1IHI2PgnSgrenK-M60dwFaKwacbIvmjERFx0ri9OG9&cpn=G0hmRCCW6nH0wNIr&rn=1"
                                                    cachePolicy=NSURLRequestUseProtocolCachePolicy
                                                    timeoutInterval=60
                                                CFNetwork`___lldb_unnamed_symbol231$$CFNetwork + 64
                                                    NSURLRequest initWithURL:cachePolicy:timeoutInterval:
                                                        某次参数:
                                                            URL="https://rr4---sn-nx57ynsz.googlevideo.com/videoplayback?expire=1655759112&ei=p4ywYoCpO-GMsfIP9c-j-A0&ip=72.174.144.110&id=o-AOtW_cgK5DpGSlTFzlnNQ5jG-qYf6YbO-W_J4o6Z7Bg0&source=youtube&requiressl=yes&mh=mR&mm=31,29&mn=sn-nx57ynsz,sn-nx5s7n7y&ms=au,rdu&mv=m&mvi=4&pl=19&ctier=L&initcwndbps=1712500&svpuc=1&sabr=1&mt=1655737257&fvip=1&keepalive=yes&fexp=24001373,24007246,24208264&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgdJbzVTf5BpT1a0Qd-15luRpD3uxu9oqoIBFYuNPFrw0CIHogAdP_kVZFI1gE2yvIbih1AY5458ViOpGC77ywCY1Y&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgUMelUGd_HH1szTAu1xTcLTCTp0LZCwG81qqdxbtYQoMCIB1IHI2PgnSgrenK-M60dwFaKwacbIvmjERFx0ri9OG9&cpn=G0hmRCCW6nH0wNIr&rn=1"
                                                            cachePolicy=NSURLRequestUseProtocolCachePolicy
                                                            timeoutInterval=60

--------------------------------------------------------------------------------

触发 HAMCronetDataLoadTask startWithDelegate:delegateQueue: 的调用顺序:

[第一次 rn=1 ctiler=L]

-[HAMPlayerInternal playerLoop] + 1736
    -[HAMBaseTrackRenderer prepareAndReturnError:] + 48
        -[HAMSBARAudioTrackRenderer internalPrepareAndReturnError:] + 40
            -[HAMQueueingRootSampleBufferSource prepareAndReturnError:] + 704
                -[HAMDASHSampleBufferSource prepareAndReturnError:] + 100
                    -[MLServerABRController prepareAndReturnError:] + 40
                        _logos_method$_ungrouped$MLServerABRLoader$continueLoading(self=0x000000012e689210, _cmd="continueLoading") at youtubeCronet.xm:289:5
                            -[MLServerABRLoader continueLoading] + 924
                                -[MLServerABRDataLoadTask startWithDelegate:delegateQueue:] + 88
                                    HAMCronetDataLoadTask startWithDelegate:delegateQueue:
                                        某次的参数:
                                            arg1=delegate=<MLServerABRDataLoadTask: 0x284243690>
                                            arg2=delegateQueue=<OS_dispatch_queue_serial: MLHAMPlayer>
                                        此时:
                                            reqUrl
                                                rn=1: https://rr1---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1658155941&ei=RR_VYqa6GJTlNsC6gIgE&ip=162.253.45.206&id=o-AGLA8-7MEt9wIIkvKGany12Vu6HmM4t-R27oa-wU3eyG&source=youtube&requiressl=yes&mh=Mk&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnsd&ms=au,rdu&mv=m&mvi=1&pl=22&ctier=L&initcwndbps=1168750&svpuc=1&sabr=1&mt=1658133649&fvip=5&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRQIhAMoq1fU-fdprDjIkRanRHLMJLg-mISEmElCC7_OqigFVAiBpC6IpBGXN_mWIzoPn8nG2Ah4WNEIauk5j3_y4uUJooQ%3D%3D&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRQIgaeU1mBeqHILR9DlKWm0nihNijdMhZgAFvJjbZKW1FrUCIQDFRyVh1aMUMdMDCNfmmOPgasbwsu5dLSdY3JFfsKFiKw%3D%3D&cpn=2oxmwItyhlTlzWXv&rn=1

[第二次 rn=2 ctiler=L]

-[MLDefaultLoadRetryPolicy scheduleRetryWithBlock:]_block + 44
    -[MLDefaultLoadRetryPolicy executeRetryBlockWithRetryID:] + 68
        -[MLServerABRLoader continueLoading] + 924
            -[MLServerABRDataLoadTask startWithDelegate:delegateQueue:] + 88
                HAMCronetDataLoadTask startWithDelegate:delegateQueue:
                    某次的参数:
                        arg1=delegate=<MLServerABRDataLoadTask: 0x286198f00>
                        arg2=delegateQueue=<OS_dispatch_queue_serial: MLHAMPlayer[0x280218180] = { xref = 34, ref = 5, sref = 2, target = com.apple.root.user-initiated-qos.overcommit[0x11050d080], width = 0x1, state = 0x006000a500001801, enqueued, dirty, max qos 5, draining on 0x1803, in-barrier}>
                    此时:
                        reqUrl
                            rn=2: https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1658305786&ei=mWjXYuCLOOucir4P3c6AiAQ&ip=162.253.45.206&id=o-AMnr7yIbmMhFTmywfJSN8wAIx4A4Qoq0hGO91N7dCzIp&source=youtube&requiressl=yes&mh=hx&mm=31,29&mn=sn-phvo-jpql,sn-vgqsknek&ms=au,rdu&mv=m&mvi=2&pcm2cms=yes&pl=22&ctier=L&initcwndbps=1031250&svpuc=1&sabr=1&mt=1658283891&fvip=1&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRgIhANNsZzr74YwYCad-wykDLNs7C6jNLkdlTSuiVTHlI2v0AiEA4JnoG-7SCvNPKqt9iFwCbPDyHgfX8NtTULRDqp6HnRM%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRQIgXZKQOPCBuuyxe3Bdk0qXJbgIxsJqr_7LpKHE7xQ1OnQCIQDq4WnBDfATQNkxbpOWAQ_RM4NEThcpb0aqUFqbjUC1vg%3D%3D&cpn=aCkM2ux19mPWYM5x&rn=2

[第三次 rn=2&rn=3 ctiler=A]
    调用顺序同上
    但是URL略有不同
                    此时:
                        reqUrl
                            rn=3: https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1658305786&ei=mWjXYuCLOOucir4P3c6AiAQ&ip=162.253.45.206&id=o-AMnr7yIbmMhFTmywfJSN8wAIx4A4Qoq0hGO91N7dCzIp&source=youtube&requiressl=yes&mh=hx&mm=31,29&mn=sn-phvo-jpql,sn-vgqsknek&ms=au,rdu&mv=m&mvi=2&pcm2cms=yes&pl=22&ctier=A&initcwndbps=1031250&svpuc=1&sabr=1&mt=1658283891&fvip=1&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRgIhANNsZzr74YwYCad-wykDLNs7C6jNLkdlTSuiVTHlI2v0AiEA4JnoG-7SCvNPKqt9iFwCbPDyHgfX8NtTULRDqp6HnRM%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRQIgXZKQOPCBuuyxe3Bdk0qXJbgIxsJqr_7LpKHE7xQ1OnQCIQDq4WnBDfATQNkxbpOWAQ_RM4NEThcpb0aqUFqbjUC1vg%3D%3D&cpn=aCkM2ux19mPWYM5x&rn=2&rn=3

--------------------------------------------------------------------------------

ctier=L 的 请求 NSMutableURLRequest 也返回 NSError 出错 的函数调用顺序

-[HAMPlayerInternal playerLoop] + 1736
    -[HAMBaseTrackRenderer prepareAndReturnError:] + 48
        -[HAMPixelBufferVideoTrackRenderer internalPrepareAndReturnError:] + 40
            -[HAMVideoDecoderSampleBufferSource prepareAndReturnError:] + 80
                -[HAMQueueingRootSampleBufferSource prepareAndReturnError:] + 632
                    -[HAMDASHSampleBufferSource seekToTime:] + 140
                        -[MLServerABRController seekToTime:] + 36
                            -[MLServerABRLoader seekDidOccur] + 148
                                ___lldb_unnamed_symbol15667$$Module_Framework + 112
                                    NSError HAMErrorWithCode:userInfo:
                                        某次的参数:
                                            arg1=10000
                                            arg2={
                                                    HAMErrorURLRequest = "<NSMutableURLRequest: 0x28302c0b0> { URL: https://rr2---sn-nx5s7nel.googlevideo.com/videoplayback?expire=1655754561&ei=4HqwYt29JNSDkwbAt5vQDg&ip=72.174.144.110&id=o-AJjQlPwnnZAb4c4XmDyophxk9bxSybJHNgVtg0xPnY5B&source=youtube&requiressl=yes&mh=Vb&mm=31,29&mn=sn-nx5s7nel,sn-nx57ynsl&ms=au,rdu&mv=m&mvi=2&pl=19&ctier=L&initcwndbps=1721250&svpuc=1&sabr=1&mt=1655732690&fvip=2&keepalive=yes&fexp=24001373,24007246,24208264&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRQIhAIoI_-R65dCbFSiymVXG3fMpNeJO5LUNC-t_O1IRl6aJAiBy8tnuzG_Gag61Wwu-Pk1DAyQd1MvY4t2MVxvfYVA5mg%3D%3D&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRQIhAPgKcNRbTnALWCxhsV7ZpQ48EmZyL8VzBjUOIbM1y6SfAiAMJA2YCB4AUnlHaS9MuE1aWCkpY5JLkHyY5yooEGQU9Q%3D%3D&cpn=uDxkagKFinGD-plw&rn=1 }";
                                                    HAMRequestNumberLoadTaskKey = 1;
                                                }
                                    NSError errorWithDomain:code:userInfo:
                                        某次的参数:
                                            arg1="com.google.ios.hamplayer"
                                            arg2=10000
                                            arg3={
                                                    HAMErrorURLRequest = "<NSMutableURLRequest: 0x28302c0b0> { URL: https://rr2---sn-nx5s7nel.googlevideo.com/videoplayback?expire=1655754561&ei=4HqwYt29JNSDkwbAt5vQDg&ip=72.174.144.110&id=o-AJjQlPwnnZAb4c4XmDyophxk9bxSybJHNgVtg0xPnY5B&source=youtube&requiressl=yes&mh=Vb&mm=31,29&mn=sn-nx5s7nel,sn-nx57ynsl&ms=au,rdu&mv=m&mvi=2&pl=19&ctier=L&initcwndbps=1721250&svpuc=1&sabr=1&mt=1655732690&fvip=2&keepalive=yes&fexp=24001373,24007246,24208264&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRQIhAIoI_-R65dCbFSiymVXG3fMpNeJO5LUNC-t_O1IRl6aJAiBy8tnuzG_Gag61Wwu-Pk1DAyQd1MvY4t2MVxvfYVA5mg%3D%3D&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRQIhAPgKcNRbTnALWCxhsV7ZpQ48EmZyL8VzBjUOIbM1y6SfAiAMJA2YCB4AUnlHaS9MuE1aWCkpY5JLkHyY5yooEGQU9Q%3D%3D&cpn=uDxkagKFinGD-plw&rn=1 }";
                                                    HAMRequestNumberLoadTaskKey = 1;
                                                }

--------------------------------------------------------------------------------

说明:下面是 ctier=A 的 NSURLRequest 的调用顺序

[case 1]

-[MLDefaultLoadRetryPolicy scheduleRetryWithBlock:]
    -[MLDefaultLoadRetryPolicy scheduleRetryWithBlock:]_block + 44
        -[MLDefaultLoadRetryPolicy executeRetryBlockWithRetryID:] + 68
            某次的参数:arg1=3

            MLServerABRLoader continueLoading
                -[MLServerABRLoader continueLoading] + 840
                    -[MLServerABRDataLoader createDataLoadTaskForRequest:] + 128
                        -[MLServerABRDataLoader dataLoadTaskForHTTPBody:isPrimaryHostProbing:] + 424
                            -[HAMCronetDataLoader taskWithRequest:userInfo:] + 140
                                [HAMDataLoadRequest buildURLRequest] + 140
                                    NSURLRequest requestWithURL:cachePolicy:timeoutInterval:
                                        某次的参数:
                                            URL="https://rr1---sn-bvvbax4pcxg-najl.googlevideo.com/videoplayback?expire=1654284469&ei=VAyaYvi5G4eHsfIPqoK1kAg&ip=136.36.116.116&id=o-AD4uH0_eMoADlcTGlFs1Uw5dhdYtelrEPN9konw5oPZb&source=youtube&requiressl=yes&mh=_u&mm=31,29&mn=sn-bvvbax4pcxg-najl,sn-o097znsl&ms=au,rdu&mv=m&mvi=1&pl=20&ctier=A&initcwndbps=1786250&svpuc=1&sabr=1&mt=1654262462&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRQIgRHLJbeJI4tvvoD9pV1KThMgoBW8xgE27L2nGFfXaX6YCIQC6SEOoNiuui3-5O_gkauy6nXCQZN1Es1omMAH7ZoPfyQ%3D%3D&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRQIhAKMDmxqaOMD0YMFLUgG8otkDKKVPLHSBRuD3yKVVpd-DAiB73wqU9tdTRN5zW-yIL3kXDXwNuQ7L4ua7n00tb6YnFA%3D%3D&cpn=WPioc6dOPwVsC718&rn=2&rn=5"
                                            cachePolicy=NSURLRequestUseProtocolCachePolicy
                                            timeoutInterval=60

                                        某次的返回值:
                                            <NSMutableURLRequest: 0x280ab2460> {
                                                URL: https://rr1---sn-8xgp1vo-p5ql.googlevideo.com/videoplayback?expire=1654546559&ei=HwyeYrH5DJWN_9EPouqpqA8&ip=70.110.26.104&id=o-ABMZsKNB0GJ_BmboM7YSytnAHB7ASC_Y7GC6jO056wJe&source=youtube&requiressl=yes&mh=ji&mm=31,29&mn=sn-8xgp1vo-p5ql,sn-p5qlsndz&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=20&ctier=L&initcwndbps=1490000&svpuc=1&sabr=1&mt=1654524545&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRgIhAPnD2xwm1J-b9yvruQe1aozyNm_9xaCQvtdIM7n32vA5AiEA4mVXjIUgf7425J8XlwfLdVhMyDiZHFtRhRE1jHxtWZo%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRQIgd3ooIz7fpF6JTB11opldSL1WIPtx4L5FaBEqhdEZBLwCIQChh18q1sc8T2XEIwlQBI8O9cF_DI2FPVLjVCNRHhRPCQ%3D%3D&cpn=sjOhS6zpDL-OE-pP&rn=1
                                            }

                                        CFNetwork`___lldb_unnamed_symbol231$$CFNetwork + 64

                                            NSURLRequest initWithURL:cachePolicy:timeoutInterval:
                                                参数 case 1:
                                                    URL="https://rr1---sn-bvvbax4pcxg-najl.googlevideo.com/videoplayback?expire=1654284469&ei=VAyaYvi5G4eHsfIPqoK1kAg&ip=136.36.116.116&id=o-AD4uH0_eMoADlcTGlFs1Uw5dhdYtelrEPN9konw5oPZb&source=youtube&requiressl=yes&mh=_u&mm=31,29&mn=sn-bvvbax4pcxg-najl,sn-o097znsl&ms=au,rdu&mv=m&mvi=1&pl=20&ctier=A&initcwndbps=1786250&svpuc=1&sabr=1&mt=1654262462&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRQIgRHLJbeJI4tvvoD9pV1KThMgoBW8xgE27L2nGFfXaX6YCIQC6SEOoNiuui3-5O_gkauy6nXCQZN1Es1omMAH7ZoPfyQ%3D%3D&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRQIhAKMDmxqaOMD0YMFLUgG8otkDKKVPLHSBRuD3yKVVpd-DAiB73wqU9tdTRN5zW-yIL3kXDXwNuQ7L4ua7n00tb6YnFA%3D%3D&cpn=WPioc6dOPwVsC718&rn=2&rn=5"
                                                    cachePolicy=NSURLRequestUseProtocolCachePolicy
                                                    timeoutInterval=60

                                                参数 case 2:
                                                    URL="https://rr1---sn-8xgp1vo-p5ql.googlevideo.com/videoplayback?expire=1654546559&ei=HwyeYrH5DJWN_9EPouqpqA8&ip=70.110.26.104&id=o-ABMZsKNB0GJ_BmboM7YSytnAHB7ASC_Y7GC6jO056wJe&source=youtube&requiressl=yes&mh=ji&mm=31,29&mn=sn-8xgp1vo-p5ql,sn-p5qlsndz&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=20&ctier=A&initcwndbps=1490000&svpuc=1&sabr=1&mt=1654524545&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRgIhAPnD2xwm1J-b9yvruQe1aozyNm_9xaCQvtdIM7n32vA5AiEA4mVXjIUgf7425J8XlwfLdVhMyDiZHFtRhRE1jHxtWZo%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRQIgd3ooIz7fpF6JTB11opldSL1WIPtx4L5FaBEqhdEZBLwCIQChh18q1sc8T2XEIwlQBI8O9cF_DI2FPVLjVCNRHhRPCQ%3D%3D&cpn=sjOhS6zpDL-OE-pP&rn=2&rn=3"
                                                    cachePolicy=NSURLRequestUseProtocolCachePolicy
                                                    timeoutInterval=60

                                                return <NSMutableURLRequest: 0x28063c790> {
                                                    URL: https://rr1---sn-bvvbax4pcxg-najl.googlevideo.com/videoplayback?expire=1654284469&ei=VAyaYvi5G4eHsfIPqoK1kAg&ip=136.36.116.116&id=o-AD4uH0_eMoADlcTGlFs1Uw5dhdYtelrEPN9konw5oPZb&source=youtube&requiressl=yes&mh=_u&mm=31,29&mn=sn-bvvbax4pcxg-najl,sn-o097znsl&ms=au,rdu&mv=m&mvi=1&pl=20&ctier=A&initcwndbps=1786250&svpuc=1&sabr=1&mt=1654262462&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRQIgRHLJbeJI4tvvoD9pV1KThMgoBW8xgE27L2nGFfXaX6YCIQC6SEOoNiuui3-5O_gkauy6nXCQZN1Es1omMAH7ZoPfyQ%3D%3D&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRQIhAKMDmxqaOMD0YMFLUgG8otkDKKVPLHSBRuD3yKVVpd-DAiB73wqU9tdTRN5zW-yIL3kXDXwNuQ7L4ua7n00tb6YnFA%3D%3D&cpn=WPioc6dOPwVsC718&rn=2&rn=5
                                                }


[case 2]

-[HAMPlayerInternal playerLoop] + 1736
    -[HAMBaseTrackRenderer prepareAndReturnError:] + 48
        -[HAMSBARAudioTrackRenderer internalPrepareAndReturnError:] + 40
            -[HAMQueueingRootSampleBufferSource prepareAndReturnError:] + 704
                -[HAMDASHSampleBufferSource prepareAndReturnError:] + 100
                    -[MLServerABRController prepareAndReturnError:] + 40
                        -[MLServerABRLoader continueLoading] + 840
                            -[MLServerABRDataLoader createDataLoadTaskForRequest:] + 128
                                -[MLServerABRDataLoader dataLoadTaskForHTTPBody:isPrimaryHostProbing:] + 424
                                    -[HAMCronetDataLoader taskWithRequest:userInfo:] + 140
                                        -[HAMDataLoadRequest buildURLRequest] + 140
                                            NSURLRequest requestWithURL:cachePolicy:timeoutInterval:
                                                CFNetwork`___lldb_unnamed_symbol231$$CFNetwork + 64
                                                    NSURLRequest initWithURL:cachePolicy:timeoutInterval:

--------------------------------------------------------------------------------

说明:下面是 ctier=A 的 response = NSHTTPURLResponse 的调用顺序

-[HAMCronetDataLoadTask startWithDelegate:delegateQueue:]_block_block + 36 = sub_194D978
    ___lldb_unnamed_symbol110205$$Module_Framework + 40 = sub_38FCE24
        ___lldb_unnamed_symbol171000$$Module_Framework + 28 = sub_3DF8048
            ___lldb_unnamed_symbol170908$$Module_Framework + 52 = sub_3DF60E8
                Cronet_UrlRequestCallback_OnResponseStarted_194CCE4 = ___lldb_unnamed_symbol15676$$Module_Framework + 80 = sub_194CCE4
                    generateNewHttpResponse_194D6D8 = ___lldb_unnamed_symbol15681$$Module_Framework + 376 = sub_194D6D8
                        NSHTTPURLResponse initWithURL:statusCode:HTTPVersion:headerFields:
                            某次参数:
                                url="https://rr1---sn-8xgp1vo-p5ql.googlevideo.com/videoplayback?expire=1654546559&ei=HwyeYrH5DJWN_9EPouqpqA8&ip=70.110.26.104&id=o-ABMZsKNB0GJ_BmboM7YSytnAHB7ASC_Y7GC6jO056wJe&source=youtube&requiressl=yes&mh=ji&mm=31,29&mn=sn-8xgp1vo-p5ql,sn-p5qlsndz&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=20&ctier=A&initcwndbps=1490000&svpuc=1&sabr=1&mt=1654524545&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRgIhAPnD2xwm1J-b9yvruQe1aozyNm_9xaCQvtdIM7n32vA5AiEA4mVXjIUgf7425J8XlwfLdVhMyDiZHFtRhRE1jHxtWZo%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRQIgd3ooIz7fpF6JTB11opldSL1WIPtx4L5FaBEqhdEZBLwCIQChh18q1sc8T2XEIwlQBI8O9cF_DI2FPVLjVCNRHhRPCQ%3D%3D&cpn=sjOhS6zpDL-OE-pP&rn=2&rn=3",
                                statusCode=200,
                                HTTPVersion=0x0000000000000000,
                                headerFields=4 key/value pairs

                            某次的返回值:
                                <NSHTTPURLResponse: 0x280ee1d00> {
                                    URL: https://rr1---sn-8xgp1vo-p5ql.googlevideo.com/videoplayback?expire=1654546559&ei=HwyeYrH5DJWN_9EPouqpqA8&ip=70.110.26.104&id=o-ABMZsKNB0GJ_BmboM7YSytnAHB7ASC_Y7GC6jO056wJe&source=youtube&requiressl=yes&mh=ji&mm=31,29&mn=sn-8xgp1vo-p5ql,sn-p5qlsndz&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=20&ctier=A&initcwndbps=1490000&svpuc=1&sabr=1&mt=1654524545&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRgIhAPnD2xwm1J-b9yvruQe1aozyNm_9xaCQvtdIM7n32vA5AiEA4mVXjIUgf7425J8XlwfLdVhMyDiZHFtRhRE1jHxtWZo%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRQIgd3ooIz7fpF6JTB11opldSL1WIPtx4L5FaBEqhdEZBLwCIQChh18q1sc8T2XEIwlQBI8O9cF_DI2FPVLjVCNRHhRPCQ%3D%3D&cpn=sjOhS6zpDL-OE-pP&rn=2&rn=3
                                    }
                                    {
                                        Status Code: 200,
                                        Headers {
                                            Connection = "keep-alive"
                                            "Content-Length" = 0
                                            "Content-Type" = "application/vnd.yt-ump"
                                            Server = "atomos-tproxy 1.0"
                                        } 
                                    }


--------------------------------------------------------------------------------


触发了 HAMCronetDataLoadTask startWithDelegate:delegateQueue: 当第一次 ctier=A 的url 时的调用顺序:

-[MLDefaultLoadRetryPolicy scheduleRetryWithBlock:]_block + 44
    -[MLDefaultLoadRetryPolicy executeRetryBlockWithRetryID:] + 68
        某次参数:
            arg1=2
        -[MLServerABRLoader continueLoading] + 924
            -[MLServerABRDataLoadTask startWithDelegate:delegateQueue:] + 88
                某次的参数:
                    arg1=<MLServerABRDataLoadTask: 0x281226d00>
                    arg2=<OS_dispatch_queue_serial: MLHAMPlayer[0x282d34f00] = { xref = 33, ref = 6, sref = 2, target = com.apple.root.user-initiated-qos.overcommit[0x10c651080], width = 0x1, state = 0x006000a50001a401, enqueued, dirty, max qos 5, draining on 0x1a403, in-barrier}>

--------------------------------------------------------------------------------

下面是 ctier=A 的 response = NSHTTPURLResponse 在生成了之后,被调用到 statusCode 时的调用顺序

-[MLPlayerItemEventCenter networkRequestDidReceiveResponseWithEvent:] + 204
    -[MLQOEPingController networkRequestDidReceiveResponseWithEvent:] + 272
        NSHTTPURLResponse statusCode
            return 200;

--------------------------------------------------------------------------------

说明:下面是 ctier=A 的response后的,始终retry重发请求的相关的调用逻辑

[case 1]

cancelCronetDataLoadTask_194BFB8
    reportDataLoadTaskError_194DA94 = sub_194DA94 = ___lldb_unnamed_symbol15689$$Module_Framework + 40
        -[MLServerABRDataLoadTask dataLoadTask:didCompleteWithError:] + 368
            -[MLServerABRLoader dataLoadTask:didCompleteWithError:] + 260
                参数
                    case 1:
                        arg1=0x0000000281aaa490
                        arg2=domain: "com.google.ios.hamplayer" - code: 10000
                    case 2:
                        arg1=0x0000000280597a50
                        arg2=domain: "com.google.ios.hamplayer" - code: 6009

                MLServerABRLoader updateLoadRetryPolicyOnLoadCompletionWithError:

[case 2]

-[HAMCronetDataLoadTask startWithDelegate:delegateQueue:]_block_block + 36
    ___lldb_unnamed_symbol110205$$Module_Framework + 40
        ___lldb_unnamed_symbol171023$$Module_Framework + 32
            ___lldb_unnamed_symbol170906$$Module_Framework + 84
                Cronet_UrlRequestCallback_OnRedirectReceived_194C9D8 = ___lldb_unnamed_symbol15675$$Module_Framework + 620
                    -[MLServerABRDataLoadTask dataLoadTask:didCompleteWithError:] + 368
                        -[MLServerABRLoader dataLoadTask:didCompleteWithError:] + 260
                            MLServerABRLoader updateLoadRetryPolicyOnLoadCompletionWithError:


[case 3]

找到 死循环 多次重试的调用关系了:

callHAMTimerFire_199CFB8 = -[HAMTimer initWithQueue:startNanoseconds:intervalNanoseconds:leewayNanoseconds:repeats:block:]_block + 36
    -[HAMTimer fire] + 52
        callMLOnesieConnectionOpenerOnPingTimer_1039FB8 = sub_1039FB8 = -[MLOnesieConnectionOpener scheduleNextRequestUsingStartDelay:]_block + 36
            -[MLOnesieConnectionOpener onPingTimer] + 180
                -[HAMCronetDataLoadTask startWithDelegate:delegateQueue:] + 932
                    tryResetTimeoutTimer_194C704 = sub_194C704 = ___lldb_unnamed_symbol15674$$Module_Framework + 200
                        +[HAMTimer timerWithQueue:startNanoseconds:leewayNanoseconds:block:] + 104
                            -[HAMTimer initWithQueue:startNanoseconds:intervalNanoseconds:leewayNanoseconds:repeats:block:]

===>>>

-[HAMTimer initWithQueue:startNanoseconds:intervalNanoseconds:leewayNanoseconds:repeats:block:]
    -[HAMTimer initWithQueue:startNanoseconds:intervalNanoseconds:leewayNanoseconds:repeats:block:]_block + 36
        -[HAMTimer fire] + 52
            callMLOnesieConnectionOpenerOnPingTimer_1039FB8 = sub_1039FB8 = = -[MLOnesieConnectionOpener scheduleNextRequestUsingStartDelay:]_block + 36
                -[MLOnesieConnectionOpener onPingTimer] + 180
                    -[HAMCronetDataLoadTask startWithDelegate:delegateQueue:] + 648
                        某次参数:
                            arg1=<MLOnesieConnectionOpener: 0x2829dde00>
                            delegateQueue =<OS_dispatch_queue_serial: queue_serial[0x283868800] = { xref = 8, ref = 5, sref = 2, target = com.apple.root.default-qos.overcommit[0x104664f80], width = 0x1, state = 0x006000a500012805, enqueued, dirty, max qos 5, draining on 0x12807, in-barrier}>

                        核心代码:
                            sub_3DF9004(sub_194C27C);

                        Cronet_Executor_ExecuteFunc_194C27C = sub_194C27C = ___lldb_unnamed_symbol15668
                            -[HAMCronetDataLoadTask startWithDelegate:delegateQueue:]_block_block + 36 = sub_194D978
                                ___lldb_unnamed_symbol110205$$Module_Framework + 40 = sub_38FCE24
                                    ___lldb_unnamed_symbol171000$$Module_Framework + 28 = sub_3DF8048
                                        ___lldb_unnamed_symbol170908$$Module_Framework + 52 = sub_3DF60E8
                                            Cronet_UrlRequestCallback_OnResponseStarted_194CCE4 = sub_194CCE4 = ___lldb_unnamed_symbol15676$$Module_Framework + 124
                                                -[MLServerABRDataLoadTask dataLoadTask:didReceiveResponse:] + 424
                                                    -[MLServerABRLoader dataLoadTask:didReceiveResponse:]
                                                        某次的参数:
                                                            arg1=<MLServerABRDataLoadTask: 0x2806a7060>,
                                                            arg2=<NSHTTPURLResponse: 0x280ee1d00> {
                                                                    URL: https://rr1---sn-8xgp1vo-p5ql.googlevideo.com/videoplayback?expire=1654546559&ei=HwyeYrH5DJWN_9EPouqpqA8&ip=70.110.26.104&id=o-ABMZsKNB0GJ_BmboM7YSytnAHB7ASC_Y7GC6jO056wJe&source=youtube&requiressl=yes&mh=ji&mm=31,29&mn=sn-8xgp1vo-p5ql,sn-p5qlsndz&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=20&ctier=A&initcwndbps=1490000&svpuc=1&sabr=1&mt=1654524545&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRgIhAPnD2xwm1J-b9yvruQe1aozyNm_9xaCQvtdIM7n32vA5AiEA4mVXjIUgf7425J8XlwfLdVhMyDiZHFtRhRE1jHxtWZo%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRQIgd3ooIz7fpF6JTB11opldSL1WIPtx4L5FaBEqhdEZBLwCIQChh18q1sc8T2XEIwlQBI8O9cF_DI2FPVLjVCNRHhRPCQ%3D%3D&cpn=sjOhS6zpDL-OE-pP&rn=2&rn=3
                                                                }
                                                                {
                                                                    Status Code: 200, Headers {
                                                                        Connection = "keep-alive"
                                                                        "Content-Length" = 0
                                                                        "Content-Type" = "application/vnd.yt-ump"
                                                                        Server = "atomos-tproxy 1.0"
                                                                    }
                                                                }

                                                        NSError HAMErrorWithURLResponse:userInfo:request:
                                                            某次的参数:
                                                                response=<NSHTTPURLResponse: 0x281464760>,
                                                                userInfo={
                                                                    HAMRequestNumberLoadTaskKey = 2;
                                                                },
                                                                request=<NSMutableURLRequest: 0x2810f1090>

                                                            v22 = objc_msgSend((void *)v7, "HAMErrorWithCode:userInfo:", v20=6000, v14=userInfoDict);
                                                                NSError HAMErrorWithCode:userInfo:
                                                                    某次的参数:
                                                                        hamErrCode=6000,
                                                                        userInfo=dict

                                                                    return (id)objc_msgSend((void *)self, "errorWithDomain:code:userInfo:", CFSTR("com.google.ios.hamplayer"), a3, a4);

                                                                    某次的返回值:
                                                                        Error Domain=com.google.ios.hamplayer
                                                                        Code=6000 "(null)"
                                                                        UserInfo={
                                                                            HAMErrorHTTPURLResponse=<NSHTTPURLResponse: 0x281ceda60> {
                                                                                    URL: https://rr5---sn-q4flrnee.googlevideo.com/videoplayback?expire=1654110110&ei=PmOXYpHwG-6Rlu8P0LO9yAQ&ip=72.179.224.229&id=o-ANJ-ePUG7jWZMQ_icM7pjIuiwW8IEgTemHHlekQlItK_&source=youtube&requiressl=yes&mh=aT&mm=31,29&mn=sn-q4flrnee,sn-q4fl6ns7&ms=au,rdu&mv=m&mvi=5&pl=21&ctier=A&initcwndbps=1480000&svpuc=1&sabr=1&mt=1654088228&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgTokhxlKrvIZN4PZHmqi4CCoCk-_Bdgi_WTIIrlx1Y7ICIGr2dSn6txZUrrMdum-VwuQ8TbwSK-HTPVVZB28aPwO-&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRQIgGW-eIbWvW75lrbGlodLzWTMVtDL7KtlxEW-gROi_6_kCIQDwf7k8v2jZdCDAY9KKlCf_k_T4IsKDoL2nm-49RdhBfQ%3D%3D&cpn=F98L8S2i9bcH06us&rn=2&rn=3
                                                                                }
                                                                                {
                                                                                    Status Code: 200,
                                                                                    Headers {
                                                                                        Connection = "keep-alive"
                                                                                        "Content-Length" = 0
                                                                                        Server = "atomos-tproxy 1.0"
                                                                                    }
                                                                                },
                                                                            HAMRequestNumberLoadTaskKey=3,
                                                                            HAMErrorURLRequest=<NSMutableURLRequest: 0x281886580> {
                                                                                URL: https://rr5---sn-q4flrnee.googlevideo.com/videoplayback?expire=1654110110&ei=PmOXYpHwG-6Rlu8P0LO9yAQ&ip=72.179.224.229&id=o-ANJ-ePUG7jWZMQ_icM7pjIuiwW8IEgTemHHlekQlItK_&source=youtube&requiressl=yes&mh=aT&mm=31,29&mn=sn-q4flrnee,sn-q4fl6ns7&ms=au,rdu&mv=m&mvi=5&pl=21&ctier=A&initcwndbps=1480000&svpuc=1&sabr=1&mt=1654088228&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgTokhxlKrvIZN4PZHmqi4CCoCk-_Bdgi_WTIIrlx1Y7ICIGr2dSn6txZUrrMdum-VwuQ8TbwSK-HTPVVZB28aPwO-&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRQIgGW-eIbWvW75lrbGlodLzWTMVtDL7KtlxEW-gROi_6_kCIQDwf7k8v2jZdCDAY9KKlCf_k_T4IsKDoL2nm-49RdhBfQ%3D%3D&cpn=F98L8S2i9bcH06us&rn=2&rn=3
                                                                            }
                                                                        }

--------------------------------------------------------------------------------

当 去掉广告过滤 时,调用到 MLServerABRLoader onesieDataLoader:didCompleteChunks:withError: 的顺序:

-[MLOnesieChunkLoadTask initWithRange:chunks:dataBuffer:cache:delegate:queue:latencyLogger:]
    sub_10380F8 = -[MLOnesieChunkLoadTask initWithRange:chunks:dataBuffer:cache:delegate:queue:latencyLogger:]_block
        sub_10381F8 = -[MLOnesieChunkLoadTask initWithRange:chunks:dataBuffer:cache:delegate:queue:latencyLogger:]_block_block + 344 = 
            -[HAMBaseChunkLoadTask didCompleteWithError:] + 412
                -[MLServerABROnesieDataLoader chunks:didCompleteLoadingWithError:] + 92
                    MLServerABRLoader onesieDataLoader:didCompleteChunks:withError:
                        参数举例:
                            [case 1]: 
                                arg1=0x0000000282b42000,
                                arg2=1 element,
                                arg3=domain: "com.google.ios.hamplayer" - code: 10000
                            [case 2]: 
                                arg1=<MLServerABROnesieDataLoader: 0x282bd5e80>, 
                                arg2=<__NSSingleObjectArrayI 0x2807d1510>(
                                        <HAMMP4InitializationChunk: 0x282bc3b80>
                                    )
                                arg3=NULL

--------------------------------------------------------------------------------

下面是:MLServerABRLoader initWithQueue 的调用顺序

-[GPCPromise resolveChild:]_block + 128
    -[YTVideoResolver registerCompletionBlocksOnPlaybackDataLoader]_block + 64
        -[YTVideoResolver didLoadVideoWithPlaybackData:] + 108
            -[YTVideoResolver changeToState:] + 92
                -[YTLocalPlaybackController videoResolver:didChangeFromState:toState:] + 488
                    -[YTLocalPlaybackController startPlaybackWithVideoResolver:internallyPrebufferedVideoController:] + 2184
                        YTAdsControlFlowPlaybackCoordinator startPrerollAdBreak
                            -[YTAdsControlFlowPlaybackCoordinator startPrerollAdBreak] + 52
                                -[YTAdsControlFlowPlaybackCoordinator doneWithPlayerBytesSlotWithBreakType:] + 80
                                    -[YTLocalPlaybackController adsPlaybackCoordinator:didFinishBreakWithBreakType:] + 68
                                        -[YTSingleVideoSequencer activateContentSequence] + 224
                                            -[YTSingleVideoSequencer activateVideoController:reloadContext:] + 248
                                                -[YTSingleVideoController initializeAndLoadWithViewportSizeProvider:playerVisibility:reloadContext:] + 860
                                                    -[MLHAMQueuePlayer load] + 220
                                                        -[MLHAMPlayerItem load] + 3088

                                                            MLServerABRLoader initWithQueue:dataLoader:playerEventCenter:playerItemEventCenter:streamingData:mediaCommonConfig:hamplayerConfig:onesieVideoData:QOEController:loadRetryPolicy:isLiveSource:livePlayerConfig:windowedLiveConfig:metadata
                                                                说明:某次调试时参数:
                                                                    arg1=<OS_dispatch_queue_serial: MLHAMPlayer>,
                                                                    dataLoader=<HAMCronetDataLoader: 0x281782e20>,
                                                                    playerEventCenter=(null),
                                                                    playerItemEventCenter=<MLPlayerItemEventCenter: 0x2833eb6b0>,
                                                                    streamingData=<MLStreamingData: 0x2801f8940>,
                                                                    mediaCommonConfig=<YTIMediaCommonConfig 0x282a39200>: {
                                                                        dynamic_readahead_config {
                                                                            max_read_ahead_media_time_ms: 8000
                                                                            min_read_ahead_media_time_ms: 15000
                                                                            read_ahead_growth_rate_ms: 1000
                                                                        }
                                                                        media_ustreamer_request_config {
                                                                            video_playback_use_ump: true
                                                                            video_playback_ustreamer_config: "\n\317\003\n\326\002\010\000\020\200\005\030\350\002%\372~\252>-\000\000\200?5=\n\227?h\001r9\n\022mfs2_cmfs_v3_1_043\022\037\n\035\n\014device_model\022\r\n\013\n\tiphone9,1\030\000 \001r\026\n\022mfs2_cmfs_v3_1_043\030\000x\350\002\200\001\001\250\001\001\265\001\366(\334?\240\002\350\002\332\002\\\020\260\352\001\030\250F \240\234\001(\33060\230uH\001P\001X\001h\001p\210\'\200\001\364\003\270\001\001\300\001\001\340\001\003\370\001\001\210\002\001\220\002\001\230\002\014\240\002\001\250\002\001\260\002\001\270\002\001\300\002\001\310\002\001\320\002\002\340\002\001\350\002\002\200\003\002\220\003\001\370\265\221\345\014\001\372\002-\010\014\020\030\0302 2-\000\000pB5\000\000\214B@\001H\001P\nX\ne\000\000\200@h\300pp\001\210\001\001\315\001\000\000\200?\202\003\000\210\003\001\220\003\001\240\003\001\250\003\001\260\003\003\310\003\001\320\003\001\330\003\001\340\003\220N\270\004\001\312\004\035\n\024\010\300>\020\230u\030\350\007%\000\000\000\000(\0000\000@\001\020\340\324\003\030\320\017\360\004\001\370\004\001\030\001 \0012\014\010\211\001\020\257\267\220\271\236\212\367\0022\014\010\210\001\020\314\203\356\267\236\212\367\0022\014\010\207\001\020\343\206\301\271\236\212\367\0022\014\010\206\001\020\366\305\356\267\236\212\367\0022\014\010\205\001\020\306\327\220\271\236\212\367\0022\014\010\240\001\020\236\312\314\270\236\212\367\0022\014\010\213\001\020\217\354\253\267\236\212\367\0022\014\010\214\001\020\266\312\253\267\236\212\367\002:\000\022L\000\362\330\357\3010E\002!\000\230\215\'\203G\270\247?\020\342\310\337E\255\271;\354\266\367\210\342\0247\233~\206\3612l\177\363\200\002 ^\262\221\336\225\324\217B\213H\327r\217\352\327]\335\253E*Y_\210\216\tI\336\027bA\274\177\032\002ei"
                                                                        }
                                                                        server_readahead_config {
                                                                            enable: true
                                                                            next_request_policy {
                                                                                target_audio_readahead_ms: 120000
                                                                                target_video_readahead_ms: 120000
                                                                            }
                                                                        }
                                                                        use_server_driven_abr: true
                                                                        sabr_client_config {
                                                                            default_back_off_time_ms: 0
                                                                            enable_host_fallback: true
                                                                            primary_probing_delay_ms: 5000
                                                                            max_failure_attempts_before_fallback: 2
                                                                        }
                                                                    },
                                                                    hamplayerConfig=<YTIHamplayerConfig 0x110ca4440>: {
                                                                        enable_on_cellular: true
                                                                        qos_class: IOS_QOS_CLASS_USER_INITIATED
                                                                        decode_qos_class: IOS_QOS_CLASS_USER_INITIATED
                                                                        video_track_renderer {
                                                                            hamplayer_pixel_buffer_video_track_renderer_config {
                                                                                min_frame_queue_size: 3
                                                                                target_frame_queue_size: 22
                                                                                max_frame_fall_behind_ms: 500
                                                                                queue_more_frames_on_render: true
                                                                            }
                                                                        }
                                                                        stall_predictor {
                                                                            hamplayer_default_stall_predictor_config {
                                                                                max_buffer_readahead_ms: 8000
                                                                                min_buffer_readahead_ms: 1500
                                                                                bandwidth_tweak_scalar: 0.95
                                                                                bandwidth_tweak_constant: -48000
                                                                            }
                                                                        }
                                                                        live {
                                                                            enable_accurate_seek: false
                                                                            accurate_seek_retry_limit: 3
                                                                            enable_accurate_seek_after_prepared: false
                                                                            enable_ss_dai_emsg_parsing: true
                                                                            enable_ss_dai_update_chunk_start_time: true
                                                                            fix_post_live_head_segment: false
                                                                            finish_live_playback_if_stream_completed: false
                                                                        }
                                                                        async_decode: true
                                                                        network_stats_sampler_config {
                                                                            minimum_sample_size: 8192
                                                                            minimum_sample_duration_ms: 1
                                                                            target_sample_duration_ms: 400
                                                                        }
                                                                        decode_teardown_on_decode_queue: true
                                                                        decode_wait_for_frames_before_teardown: true
                                                                        decode_separate_queues: true
                                                                        decode_no_wait_for_terminate: true
                                                                        resync_policy_config {
                                                                            target_readahead_ms: 2000
                                                                            min_required_time_ms: 500
                                                                            max_elapsed_time_ms: 10000
                                                                            seek_tolerance_ms: 1000
                                                                        }
                                                                        audio_abr_config {
                                                                            downshift_scalar: 3
                                                                            downshift_constant: 0
                                                                            upshift_scalar: 6
                                                                            upshift_constant: 0
                                                                            max_downshift_readahead_ms: 30000
                                                                            min_upshift_readahead_ms: 0
                                                                            upshift_replace_media: false
                                                                            buffer_target_readahead: 8
                                                                            buffer_max_size_bytes: 107374182
                                                                            buffer_trim_behind: 60
                                                                            buffer_trim_ahead: 120
                                                                            max_chunks_per_request: 0
                                                                            sync_readahead: 10
                                                                            stun_duration: 0
                                                                            max_consecutive_errors: 0
                                                                            min_upshift_replace_chunks_readahead_ms: 5000
                                                                            low_memory_warn_buffer_size_bytes: 107374182
                                                                            low_memory_critical_buffer_size_bytes: 107374182
                                                                            low_memory_buffer_size_cool_down_ms: 0
                                                                            disable_hdr_in_low_power_mode: true
                                                                            observe_network_active_controller: false
                                                                        }
                                                                        video_abr_config {
                                                                            downshift_scalar: 1
                                                                            downshift_constant: 48000
                                                                            upshift_scalar: 1
                                                                            upshift_constant: 48000
                                                                            oversend_factor: 1.18
                                                                            max_downshift_readahead_ms: 30000
                                                                            min_upshift_readahead_ms: 0
                                                                            upshift_replace_media: false
                                                                            local_max_bitrate_readahead: 15
                                                                            buffer_target_readahead: 8
                                                                            buffer_max_size_bytes: 751619276
                                                                            buffer_trim_behind: 60
                                                                            buffer_trim_ahead: 120
                                                                            max_chunks_per_request: 0
                                                                            min_readahead_for_average_bitrate: 10000
                                                                            load_extra_formats: false
                                                                            sync_readahead: 10
                                                                            stun_duration: 10
                                                                            use_high_replication_formats_while_stunned: true
                                                                            max_consecutive_errors: 4
                                                                            min_upshift_replace_chunks_readahead_ms: 5000
                                                                            max_media_seconds_per_request: 11
                                                                            low_memory_warn_buffer_size_bytes: 751619276
                                                                            low_memory_critical_buffer_size_bytes: 751619276
                                                                            low_memory_buffer_size_cool_down_ms: 0
                                                                            disable_hdr_in_low_power_mode: true
                                                                            hpq_oversend_factor: 1.72
                                                                            observe_network_active_controller: false
                                                                        }
                                                                        enable_airplay_audio: true
                                                                        chunk_loader_config {
                                                                            enable_fallback_host: true
                                                                            max_failure_attempts_before_fallback: 3
                                                                            primary_probing_delay: 5000
                                                                            treat_no_media_as_cancellation: true
                                                                        }
                                                                        sbar_audio_track_renderer {
                                                                            samples_per_buffer: 10
                                                                            flush_on_return_from_background: true
                                                                            trim_priming: false
                                                                            feed_media_data: true
                                                                            handle_automatic_flush: true
                                                                            renderer_max_retry_count: 2
                                                                            use_all_tracks_for_playability_status: false
                                                                        }
                                                                        use_multiple_periods_player: true
                                                                        load_retry_config {
                                                                            max_non_network_errors: 2
                                                                        }
                                                                        render_view_type: HAMPLAYER_RENDER_VIEW_TYPE_IOSURFACE_MAIN_THREAD
                                                                        server_abr_config {
                                                                            fallback_on_error: true
                                                                            fallback_disable_server_abr_duration_seconds: 5
                                                                            enable_local_streams: false
                                                                            log_partial_chunk_eviction: false
                                                                            max_fallback_attempts: 5
                                                                            seek_through_medialib_when_receiving_partial_chunk: false
                                                                            continue_loading_timer_interval_ms: 1000
                                                                            continue_loading_timer_leeway_ms: 100
                                                                            cover_chunk_discontinuity: true
                                                                            keep_stall_for_live_when_close_to_seekable_end: false
                                                                            allow_multiple_server_seek: true
                                                                            use_reload_context_for_fallback: true
                                                                        }
                                                                        use_new_sample_buffer_source: true
                                                                        stop_track_renderer_before_disabling: true
                                                                        log_debug_details_on_long_wait_threshold_ms: 15000
                                                                        deprecate_stall_predictor: true
                                                                        player_loop_timer_interval_ms: 20
                                                                        player_loop_timer_leeway_ms: 0
                                                                        offline_config {
                                                                            downloader_apply_audio_track_filter: false
                                                                            downloader_apply_abr_filter: false
                                                                        }
                                                                        select_default_track_for_multi_audio: true
                                                                        use_reload_context_request_number: true
                                                                    },
                                                                onesieVideoData=(null),
                                                                QOEController=<MLQOEPingController: 0x115df0ef0>,
                                                                loadRetryPolicy=<MLDefaultLoadRetryPolicy: 0x28385b160>,
                                                                isLiveSource=False,
                                                                livePlayerConfig=(null),
                                                                windowedLiveConfig=(null),
                                                                metadataRelay=<MLHAMManifestlessMetadataCollector: 0x281551f80>,
                                                                delegate=<MLHAMPlayerItem: 0x122203240>,
                                                                latencyLogger=<YTWatchLatencyTickLogger: 0x2801ea200>,
                                                                watchEndpointUstreamerConfig=(null),
                                                                periodID=0,
                                                                firstRequestNumber=1,
                                                                cache=(null)

results matching ""

    No results matching ""