我正在尝试制作一个可以使用ffmpeg和sdl2播放各种视频格式的视频播放器,我需要在UIView中显示视频帧。在查看SDL api及其样本后,我找不到办法。 SDL使用SDL_Renderer
将图片呈现到SDL_Window
,其中包含对UIWindow
(应用的主UIWindow)的引用,而不是特定的UIView
。
有什么建议吗?
答案 0 :(得分:1)
我怀疑除了我们以外没有很多开发人员这样做过。
首先,我不知道任何使用sdl2的解决方案,但它当然可以使用sdl 1.3。
https://github.com/mooncatventures-group/RTSPPlay
注意app委托,它创建一个视图控制器,用于创建一个sdl窗口并启动播放器。
注意文件夹uikit,uikit是sdl与sdl接口的部分。这里的app委托可以修改,这个设置为使用两个窗口并在它们之间交换,但我们也使用以下方法交换视图。
-(void) swapViews {
UIWindow *windows = [[UIApplication sharedApplication] keyWindow];
NSLog(@"the app has %d views ",[windows.subviews count]);
//toggle_pause();
UIView *view = [window.subviews objectAtIndex:0];
[view removeFromSuperview];
[windows addSubview:view];
}
-(void) swapViewsWithTransition {
UIWindow *windows = [[UIApplication sharedApplication] keyWindow];
UIView *firstView = [window.subviews objectAtIndex:0];
UIView *secondView = [window.subviews objectAtIndex:1];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[UIView setAnimationTransition:([secondView superview] ? UIViewAnimationTransitionFlipFromRight : UIViewAnimationTransitionFlipFromLeft) forView:firstView cache:YES];
[firstView removeFromSuperview];
[windows addSubview:firstView];
[UIView commitAnimations];
}
前段时间,我在sdl论坛上写了一个帖子。
http://forums.libsdl.org/viewtopic.php?t=7352&sid=6b714337317597eaca026ae6be968b3e
使用这些技术有一些注意事项
RTSPPlay几乎可以播放任何你扔掉它的视频,但是sdl事件循环与苹果runloops没有很好的结合,如果你编写一个考虑了sdl限制的应用,那么它们往往会变得迟钝rtspplay你得到一个不错的视频播放器,但添加到现有的应用程序可能会有问题。
在同一个git中有本机应用程序的示例。工作sdl可能是一个痛苦的经历,有时好运