ffmpegとsdl2でさまざまなビデオ形式を再生できるビデオプレーヤーを作成しようとしていますが、UIView内にビデオフレームを表示する必要があります。SDL APIとそのサンプルを調べた後、私はそれを行う方法を見つけることができませんでした。SDLは、特定のではなく、(アプリのメインUIWindow)への参照を保持するにSDL_Renderer
画像をレンダリングするために使用します。SDL_Window
UIWindow
UIView
なにか提案を?
うーん...それはここでカバーするための多くの根拠ですが、私は試してみます。
私たち以外の多くの開発者がこれを行ったのではないかと思います。
まず第一に、私はsdl2を使用するソリューションを知りませんが、sdl1.3で確かに可能です。
https://github.com/mooncatventures-group/RTSPPlay
アプリデリゲートに注目してください。これは、sdlウィンドウを作成してプレーヤーを起動するViewControllerを作成します。
フォルダuikitに注意してください。uikitはsdlの一部であり、sdlとインターフェイスします。ここでのアプリデリゲートは変更できます。これは2つのウィンドウを使用してスワップするように設定されていますが、ビューをスワップするために次の方法も使用しました。
-(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ではうまく再生されません。テーブルビューは特に厄介で、動作が遅くなる傾向があります。rtspplayのようにsdlの制限を念頭に置いてアプリをコーディングすると、優れたビデオプレーヤーですが、既存のアプリに追加すると問題が発生する可能性があります。
同じgitにネイティブアプリの例があります。sdlを使用することは、時には幸運を伴う苦痛な経験になる可能性があります