tplayerdemo播放任意在线mp3 http/https流,刚开始播放约几秒后,执行命令 seek to: 100 ,会从0开始播放。
注意:出现以上问题的码流为包含ID3V2.3标签的mp3流,且仅在网络播放时才会复现该问题。该类问题码流可通过工具HxD查看识别,如下图所示:
红框是在文件的首部顺序记录的10个字节的ID3V2.4的头部。数据结构如下:
char Header[3]; //必须为"ID3"否则认为标签不存在
char Ver; //版本号 ID3V2.4就记录4
char Revision; //副版本号 此版本记录为0
char Flag; //存放标志的字节,这个版本只定义了三位
char Size[4]; //标签大小,包括标签头的10 个字节和所有的标签帧的大小
具有以上类似标签的为问题码流,可复现以上seek失败的问题。
https://openfreetystvip.migu.cn/ ... 2/2020/10/0117/2020年10月01日14点12分紧急内容准入咪咕音乐自有版权4222首/标清高清/MP3_128_16_Stero/69905304100175532.mp3?channelid=08&msisdn=c9ae4994-20fb-4019-a62f-462bf83f4841&k=0112e08c04770255&t=1603096249914
- 因为客户提供的MP3文件包含ID3V2部分,该ID3 tag信息位于文件开头,所以文件播放时会有一个 baseOffset 偏移。在执行seek时,由于 baseOffset 的偏移值非0,导致控制流函数进入了错误的else分支,startPos未能正确的设置给函数 CdxHttpSetField(httpHdr, str) ,而是错误的将baseOffset设置给函数 CdxHttpSetField(httpHdr, str) ,导致每次seek都会从头开始播放。