0x00 错误信息
byte range length mismatch - should be length 16384 is length 82338
play error:Error Domain=NSURLErrorDomain Code=-1 "未知错误" UserInfo={NSLocalizedDescription=未知错误, NSUnderlyingError=0x283a26f70 {Error Domain=CoreMediaErrorDomain Code=-12939 "byte range length mismatch - should be length 16384 is length 82338" UserInfo={NSDescription=byte range length mismatch - should be length 16384 is length 82338, NSURL=https://xxx/xxx/xxx.mp3}}}
通过浏览器调试查看请求信息:
Response Headers:
Content-Length: 82338
只有这个对得上
然而也没什么实际作用
0x01 相关代码
// 对应 mp3 资源
AVPlayerItem *item = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:url]];
// 监听状态
[item addObserver:self forKeyPath:@"status"
options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)
context:nil];
// 添加到播放器
[_player replaceCurrentItemWithPlayerItem:aa];
0x02 解决方案
经过不断地调试,调试,调试…
发现了一个解决方案!
通过AVURLAsset
来请求资源
再创建AVPlayerItem
就不会有之前的错误了
即使有
可以重新播放一次
也能解决问题
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:url] options:nil];
AVPlayerItem *aa = [[AVPlayerItem alloc] initWithAsset:asset];
居然就这样搞定了!
另外一种相关方案
一个有趣点赞动画
https://github.com/xjh093/JHLikeButton