我正在尝试制作一个可以使用 ffmpeg 和 sdl2 播放各种视频格式的视频播放器,并且我需要在 UIView 中显示视频帧。在查看了 SDL api 及其示例后,它找不到解决方法。SDL 用于SDL_Renderer
将图像渲染到 aSDL_Window
中,其中包含对 a UIWindow
(应用程序的主 UIWindow)的引用,而不是特定的UIView
.
有什么建议吗?
嗯...这里有很多内容要介绍,但我会尝试的。
我怀疑除了我们之外没有多少开发人员做过这件事。
首先,我不知道任何使用 sdl2 的解决方案,但它肯定可以使用 sdl 1.3 。
https://github.com/mooncatventures-group/RTSPPlay
注意 app delegate ,它创建了一个视图控制器,它创建了一个 sdl 窗口并启动了播放器。
注意文件夹 uikit,uikit 是 sdl 与 sdl 接口的部分。这里的appdelegate是可以修改的,这个是设置为使用两个windows并在它们之间交换,但是我们也使用了下面的方法来交换views。
-(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 一起播放,tableviews 特别麻烦,它们往往会变得迟缓,如果你编写一个像 rtspplay 这样有 sdl 限制的应用程序,你会得到一个不错的视频播放器,但添加到现有应用程序可能会出现问题。
在同一个 git 中有本地应用程序的示例。工作 sdl 有时可能是一种痛苦的经历,祝你好运