debugly / ijkplayer

【持续更新】macOS/iOS video player based on ijkplayer, using FFmpeg 5.1, support Metal、hw accel、HDR、ass subtitle effect...
GNU General Public License v2.0
69 stars 14 forks source link

在有导航栏的页面,播放器出现被压缩现象 #2

Closed NUKisZ closed 2 years ago

NUKisZ commented 2 years ago

IMG_0823 使用Xcode 13.0 、Xcode 13.3.1编译出来的SDK在iOS 14.0 iOS14.4 iOS 15.4真机及模拟器等多种环境下测试均出现如图所示问题。

问题复现条件,当前竖屏状态下,当前页面由导航栏推出,代码中宝播放器大小为青蓝色视图+视频视图大小,真实展现出来视频画面被压缩为原来的1/3.

debugly commented 2 years ago

不知道你使用的是哪次提交,我这里使用 develop 最新代码,examples/ios 目录下的demo测试没有问题;很可能是你业务逻辑的问题,你可以进一步给我提供信息排查,让我能够复现这一问题。

验证效果如下:

IMG_4425 PNG

NUKisZ commented 2 years ago

我的项目文件如下:http://lovediary-oss.uilucky.com/uPic/20220509133122ook5al.zip 其播放器设置大小为:整个青蓝色视图。 e144cee196498a6d74e37d1818cdba4c

我使用的编译方式是:latest k0.9.0.5版本。

f4fb15e8dbcdb66d0bc6ea80547076f5

Xcode 版本为13.3.1 App Store下载,手机版本为iOS15.4、14.4 、14.0

同时,修改了部分文件: 添加ftp、rtsp、udp播放协议。

修改ff_ffplay.c文件 b65c309ae82780b3fce7461c88efc97e

static int packet_queue_get_or_buffering(FFPlayer ffp, PacketQueue q, AVPacket pkt, int serial, int finished) { while (1) { int new_packet = packet_queue_get(q, pkt, 1, serial); if (new_packet < 0){ new_packet = packet_queue_get(q, pkt, 0, serial); if(new_packet < 0) return -1; }else if (new_packet == 0) { if (!finished) ffp_toggle_buffering(ffp, 1); new_packet = packet_queue_get(q, pkt, 1, serial); if (new_packet < 0) return -1; } if (finished == *serial) {

        av_free_packet(pkt);
        continue;
    }
    else
        break;
}
return 1;

}

添加支持协议

4fa5a310246ff86ce57da35589edc5d8

d2949b3f38fa4abc8844a3600204ee4f

336469b54b4f7b1168bb04338a4f6e4f

ed5a1af25bfd27ce6c3e4e094a84d833

NUKisZ commented 2 years ago

补充播放器的的修改及播放视频效果。 image

https://user-images.githubusercontent.com/20527415/167347759-c7380bbf-dace-4b8e-abf0-3290aadc4d70.MP4

debugly commented 2 years ago

好的,我这里复现了,跟修改frame有关系:

//    self.player.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
//    self.player.view.frame = self.view.bounds;
    self.player.view.frame = CGRectMake(0, 0, 414, 232);

我抽时间看下。

debugly commented 2 years ago

develop 分支,最新提交 https://github.com/debugly/ijkplayer/commit/4997737258be5ca4a76ccf9add69c6b7ab392760 修复了这个问题。