【QA】播放音乐的时候突然中断
大佬 我最近播放音频的时候发现一个问题,就是播放途中突然音频中断,log如下: [IJKMEDIA]stream_close will close [IJKMEDIA]will destroy avcodec:mjpeg,flush buffers. [IJKMEDIA]convert image convert_frame_count = 0,err = -1 [IJKMEDIA]stream_close did close
看起来跟音乐封面有关系,你把这个音乐文件发给我看看。
看起来跟音乐封面有关系,你把这个音乐文件发给我看看。 大佬您可以看下,但是这个不是必现的 半生.mp3.zip
你播放了多久遇到的停止啊,按日志来看应该立马就停了啊
你播放了多久遇到的停止啊,按日志来看应该立马就停了啊
这个大概播放了一分钟左右,但是也不一定,有时候播放结束都没事
无法复现,对于音乐而言,这里的 convert image convert_frame_count = 0,err = -1没有问题,封面就一张图,视频流解完码就关闭了。
需要提供复现的日志。
无法复现,对于音乐而言,这里的
convert image convert_frame_count = 0,err = -1没有问题,封面就一张图,视频流解完码就关闭了。需要提供复现的日志。
我有播放了几遍也没有复现这个问题,等我复现了再把log发给您吧😂
无法复现,对于音乐而言,这里的
convert image convert_frame_count = 0,err = -1没有问题,封面就一张图,视频流解完码就关闭了。需要提供复现的日志。
大佬我复现了一下这个问题,就是上面那个歌曲循环播放,大概4,5遍左右的时候就会突然中断,然后就出现上面的log [IJKMEDIA]IJKMetalView: videiPicture is nil Response data: {"subsonic-response":{"status":"ok","version":"1.16.1","type":"navidrome","serverVersion":"0.54.5 (287079a9)","openSubsonic":true}} [IJKMEDIA]stream_close will close [IJKMEDIA]will destroy avcodec:mjpeg,flush buffers. [IJKMEDIA]convert image convert_frame_count = 0,err = -1 [IJKMEDIA]stream_close did close
这是我的配置,您看下有什么问题吗? let options = IJKFFOptions.byDefault() // options?.setPlayerOptionIntValue(1024 * 16, forKey: "max-buffer-size") // 在读取流时使用tcp(不使用udp) options.setFormatOptionValue("tcp", forKey: "rtsp_transport") // 减少首次加载时间 options.setPlayerOptionIntValue(60, forKey: "timeout") options.setPlayerOptionIntValue(1, forKey: "http-detect-range-support") options.setPlayerOptionIntValue(1, forKey: "reconnect") options.setPlayerOptionIntValue(1, forKey: "enable-accurate-seek") options.setFormatOptionValue("fastseek", forKey: "fflags") options.setPlayerOptionIntValue(1, forKey: "videotoolbox_hwaccel")
我这边每首歌结束都会把player关闭,然后创建新的 // 释放当前的 if let p = self.player { NotificationCenter.default.removeObserver(p) } player?.shutdown() // 关闭播放器
这么用没啥问题啊,播放的是本地的还是网络的?我上次本地播放了好久没问题。
这么用没啥问题啊,播放的是本地的还是网络的?我上次本地播放了好久没问题。
不是本地的,是网络的,我是下载下来的
这么用没啥问题啊,播放的是本地的还是网络的?我上次本地播放了好久没问题。
大佬找到问题了,是我代码的问题,非常抱歉耽误大佬时间啦。 另外我想问一个问题,就是我想设置超时时间,但网络不好的时候好像没有按照这个时间来执行,很快就会提示失败,您看我这样设置对吗? options.setFormatOptionIntValue(60 * 1000 * 1000, forKey: "timeout") options.setFormatOptionIntValue(60 * 1000 * 1000, forKey: "connect_timeout") options.setFormatOptionIntValue(60 * 1000 * 1000, forKey: "listen_timeout")
好吧,我说我试了很多次都没问题呢。
设置超时的代码没问题,不知道你什么情况呢,失败时错误码是啥?
好吧,我说我试了很多次都没问题呢。
设置超时的代码没问题,不知道你什么情况呢,失败时错误码是啥?
大佬看下,就是这种,貌似就不会等到超时的时间了,直接就回返回错误 音乐播放结束 {"msg":"End of file","IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey":1,"code":-541478725} 音乐播放结束 {"msg":"End of file","IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey":1,"code":-541478725}
是 http 协议吗?
是 http 协议吗?
大佬是https协议
有测试地址吗?这种情况是读流结束了,ffmpeg认为读到末尾了。
服务器响应头有这个吗:Transfer-Encoding: chunked
服务器响应头有这个吗:Transfer-Encoding: chunked
有这个的
有测试地址吗?这种情况是读流结束了,ffmpeg认为读到末尾了。
这种还不太好搞出来,我是用了用户的VPN,然后手机改成弱网测试出来的,但VPN现在用不了了
我这找不到 chunked 的流无法测试ffmepg的逻辑,我的确看到 chunked 这种方式读不到数据就会认为读完的逻辑,也许弱网下就读不到数据了,导致了 End of file 错误。
我这找不到 chunked 的流无法测试ffmepg的逻辑,我的确看到 chunked 这种方式读不到数据就会认为读完的逻辑,也许弱网下就读不到数据了,导致了 End of file 错误。
大佬抱歉我说错了,一般接口请求里面有Transfer-Encoding: chunked,但是音频流的地址返回响应头里没有的
我这找不到 chunked 的流无法测试ffmepg的逻辑,我的确看到 chunked 这种方式读不到数据就会认为读完的逻辑,也许弱网下就读不到数据了,导致了 End of file 错误。
我可以给您一个地址,您看下,我发您邮箱吧
没有这个响应头的测试地址,我还没有遇到这个情况,你给我这个地址能复现吗?
如果确定是 chunked 传输的流,可以加上 reconnect_at_eof 让他重试。
没有这个响应头的测试地址,我还没有遇到这个情况,你给我这个地址能复现吗?
如果确定是 chunked 传输的流,可以加上 reconnect_at_eof 让他重试。
大佬我把地址发您邮箱了,是一个Navidrome的服务,您可以看下Gmail邮箱
我的 gmail 没收到
我的 gmail 没收到
我又发了一遍,您看下
我在网页上打开了,随便找了一首歌下载呢,然后服务器 502 了???
我在网页上打开了,随便找了一首歌下载呢,然后服务器 502 了???
奇怪,我这里是可以的呢,您试试能在线播放吗?
刚开始能播放,然后才想着通过下载拿到地址,我然后用ijkplayer播放呢,就 502 了,现在整个网页都打不开了,难道是 ipv6 的事?
刚开始能播放,然后才想着通过下载拿到地址,我然后用ijkplayer播放呢,就 502 了,现在整个网页都打不开了,难道是 ipv6 的事?
那应该是IPv6的问题,您的路由器支持IPv6访问吗?我这边没有公网的IPv4,所以只能用公网的IPv6
有问题在 fsplayer 上提吧,这里不再更新了。