使用移动 VLC 在 iOS 上播放 rtsp 流时出现绿屏

Green screen when using mobile VLC to play rtsp streaming on iOS

我在 iOS 上有一个基于 VLC 的播放器 mobileVLCKit.framework。

执行和播放 h264 rtsp 流时,iPhone 将正确显示视频。但是,在开始的几秒钟内,会显示绿色屏幕。我想是因为I-Frame没有到,yuv=000映射到rgb中的绿色。

我可以添加一些选项或操作来强制播放器在收到 I-Frame 后播放吗?还是有其他方法可以避免绿屏问题?

这是我的代码

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super init];
    if (self) {
        self.player =  [[VLCMediaPlayer alloc] init];
        self.player.delegate = self;
        self.player.media = [VLCMedia mediaWithURL:[NSURL URLWithString:@"rtsp://...."]];
        self.player.drawable = self.contentView;
    }

    return self;
}

- (void)play
{
     if (self.player && !self.player.isPlaying) {
         [slef.player play];
     }
}

如有任何回复,我们将不胜感激。谢谢!

其实修改应该在/modules/codec/avcodec/video.c的函数static picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block )中。

DecodeVideo()函数开头添加如下代码,跳过非I帧,解决绿屏问题

if (p_sys->b_first_frame && b_gotpicture) {
    if (AV_PICTURE_TYPE_I != frame->pict_type) {
        av_frame_unref(frame);
        break;
    }
}

然后,自己构建 mobileVLCKit.framework。