iOS mp3播放 CoreMediaErrorDomain Code=-12939

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豪冷啊

你的鼓励是对我的认可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值