1

我正在尝试制作一个可以使用 ffmpeg 和 sdl2 播放各种视频格式的视频播放器,并且我需要在 UIView 中显示视频帧。在查看了 SDL api 及其示例后,它找不到解决方法。SDL 用于SDL_Renderer将图像渲染到 aSDL_Window中,其中包含对 a UIWindow(应用程序的主 UIWindow)的引用,而不是特定的UIView.

有什么建议吗?

4

1 回答 1

1

嗯...这里有很多内容要介绍,但我会尝试的。

我怀疑除了我们之外没有多少开发人员做过这件事。

首先,我不知道任何使用 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 有时可能是一种痛苦的经历,祝你好运

于 2012-10-18T04:04:30.303 回答