使用移动 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。
我在 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。