debugly / ijkplayer

iOS/macOS/tvOS video player based on ijkplayer, using FFmpeg 6, support Metal、hw accel、HDR、ass subtitle effect...
https://ijkplayer.debugly.cn/
GNU General Public License v2.0
116 stars 20 forks source link

怎么监听 metadata 变化? #28

Closed zhoudajun-ola closed 4 months ago

zhoudajun-ola commented 4 months ago

radio 源:http://stream-uk1.radioparadise.com/aac-320 开始播放会打印如下 metadata 相关日志: [IJKMEDIA] Metadata: icy-br : 320 icy-description : DJ-mixed blend of modern and classic rock, electronica, world music, and more. Always 100% commercial-free icy-genre : Eclectic icy-name : Radio Paradise (320k aac) icy-pub : 1 icy-url : https://radioparadise.com StreamTitle : Montaigne - Gravity (feat. David Byrne) StreamUrl : http://img.radioparadise.com/covers/l/19255_32719d4a-7ef6-4d38-a1da-0bcf96118848.jpg

如何监听 这个MetaData有变化呢;

debugly commented 4 months ago

IJK 当前只解析了通用的一部分Key,如下: https://github.com/debugly/ijkplayer/blob/28eb304416622daadb2e38e43a7788f59979a376/ijkmedia/ijkplayer/ijkmeta.h#L30-L77

你列举的这些应该是自己定义的,meta 处理逻辑没有解析。

zhoudajun-ola commented 4 months ago

我找到了相关信息: https://stackoverflow.com/questions/15245046/how-to-retrieve-http-headers-from-a-stream-in-ffmpeg

https://github.com/wseemann/FFmpegMediaPlayer/blob/788ca8bbd30c0d6dfcd05b7b00c5f72219318366/core/src/main/jni/player/ffmpeg_utils.c#L36 是可以读取icy_metadata 相关信息的; 就是不知道如何监听有变化,大佬能再指教一下吗?感谢

debugly commented 4 months ago

你能告诉我 icy信息多久变化一次吗?我需要测试下

zhoudajun-ola commented 4 months ago

就这个流:http://stream-uk1.radioparadise.com/aac-320 每首歌播放完,推新歌时就会变;

代码中字段:https://www.ffmpeg.org/doxygen/3.0/structHTTPContext.html#a5215502e4b3ef0521e57381151352d08 文档出处:@item icy_metadata_packet https://github.com/FFmpeg/FFmpeg/blob/master/doc/protocols.texi

debugly commented 4 months ago

icy meta 标准都包含了哪些字段知道吗?

zhoudajun-ola commented 4 months ago

可以参考这个说明:https://cast.readme.io/docs/icy 一般只包含 StreamTitle 和 StreamURL

debugly commented 4 months ago

已经支持,使用 https://github.com/debugly/ijkplayer/releases/tag/k0.11.3 试试。

zhoudajun-ola commented 4 months ago

不好意思,大佬才看到; 测试发现2个问题:

  1. Meta 变化后,输出的信息总是第一次拉取到的mate信息;
  2. 第一次取到Meta 信息后,需要输出,不然只能等到有变化后才能拿到Meta信息;
debugly commented 4 months ago

第一次的Meta信息在收到IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification之后可以获取到。 meta信息没更新这个我修复下。

debugly commented 4 months ago

用这个包试试 https://github.com/debugly/ijkplayer/releases/download/k0.11.4/IJKMediaPlayerKit.zip

zhoudajun-ola commented 4 months ago

ღ( ´・ᴗ・` )比心,可以了,大佬雷厉风行啊

debugly commented 4 months ago

你赶的巧,这会刚好有时间