首页 > 解决方案 > NativeScript iOS VersaPlayer 实现

问题描述

我正在尝试为 iOS实现VersaPlayer ,如下所示:

公共播放器(){

let versa = TestViewController.new();
let appWindow = UIApplication.sharedApplication.keyWindow;
appWindow.rootViewController.presentViewControllerAnimatedCompletion(versa, true, null);

}

TestViewController:

导出类 TestViewController 扩展 UIViewController {

public viewDidLoad() {

    super.viewDidLoad();

    let url = NSURL.URLWithString("https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_10mb.mp4")
    let item = VersaPlayerItem.playerItemWithURL(url);

    let player = VersaPlayerView.alloc();
    player.setWithItem(item);

    this.view.addSubview(player);

} }

但我收到此错误:

NativeScript caught signal 11.
Native Stack:
1   0x10301d84f sig_handler(int)
2   0x107614b5d _sigtramp
3   0x0
4   0x10755ab4d libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::step()
5   0x10755ee4c _Unwind_RaiseException
6   0x1071374aa __cxa_throw
7   0x105b4ebfa _objc_exception_destructor(void*)
8   0x106cfa735 +[NSException raise:format:]
9   0x105ac8b89 $s11VersaPlayer0aB4ViewC6layout4view4intoySo6UIViewC_AHSgtF
10  0x105ac89c0 $s11VersaPlayer0aB4ViewC7prepareyyF
11  0x105ac96fa $s11VersaPlayer0aB4ViewC3set4itemyAA0aB4ItemCSg_tF
12  0x105ac9a7c $s11VersaPlayer0aB4ViewC3set4itemyAA0aB4ItemCSg_tFTo
13  0x1039b263d ffi_call_unix64
14  0x122a3b860
JS Stack:
1   setWithItem@[native code]
2   viewDidLoad@file:///src/app/item/items.component.ts:125:27
3   presentViewControllerAnimatedCompletion@[native code]
4   player@file:///src/app/item/items.component.ts:111:77
5   @:17:33
6   callWithDebugContext@file:///node_modules/@angular/core/fesm5/core.js:30308:0
7   dispatchEvent@file:///node_modules/@angular/core/fesm5/core.js:19858:0
8   @file:///node_modules/nativescript-angular/renderer.js:241:0
9   onInvoke@file:///node_modules/@angular/core/fesm5/core.js:26255:0
10  run@file:///node_modules/nativescript-angular/zone-js/dist/zone-nativescript.js:138:0
11  zonedCallback@file:///node_modules/nativescript-angular/renderer.js:240:0
12  notify@file:///node_modules/tns-core-modules/data/observable/observable.js:110:0
13  _emit@file:///node_modules/tns-core-modules/data/observable/observable.js:127:0
14  tap@file:///node_modules/tns-core-modules/ui/button/button.js:216:0
15  UIApplicationMain@[native code]
16  _start@file:///node_modules/tns-core-modules/application/application.js:277:0

我也试过Placeholder这样使用:

<Placeholder (creatingView)="creatingView($event)" height="200"></Placeholder>

public creatingView(args: CreateViewEventData) {


    let url = NSURL.URLWithString("https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_10mb.mp4")

    let player =   VersaPlayer.playerWithURL(url)

    args.view = player; 
}

错误:

NativeScript caught signal 11.
Native Stack:
1   0x1027cf84f sig_handler(int)
2   0x1064e0b5d _sigtramp
3   0x0
4   0x106426b4d libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::step()
5   0x10642ae4c _Unwind_RaiseException
6   0x1060034aa __cxa_throw
7   0x104a1abfa _objc_exception_destructor(void*)
8   0x105be4c94 -[NSObject(NSObject) doesNotRecognizeSelector:]
9   0x105bcb623 ___forwarding___
10  0x105bcd418 _CF_forwarding_prep_0
11  0x1083923d3 -[UIView(Internal) _addSubview:positioned:relativeTo:]
12  0x10316463d ffi_call_unix64
13  0x12214caa0
JS Stack:
1   addSubview@[native code]
2   _addViewToNativeVisualTree@file:///node_modules/tns-core-modules/ui/core/view/view.js:565:0
3   _setupUI@file:///node_modules/tns-core-modules/ui/core/view-base/view-base.js:529:0
4   @file:///node_modules/tns-core-modules/ui/core/view-base/view-base.js:533:0
5   eachChildView@file:///node_modules/tns-core-modules/ui/layouts/layout-base-common.js:125:0
6   eachChild@file:///node_modules/tns-core-modules/ui/core/view/view-common.js:992:0
7   _setupUI@file:///node_modules/tns-core-modules/ui/core/view-base/view-base.js:532:0
8   @file:///node_modules/tns-core-modules/ui/core/view-base/view-base.js:533:0
9   eachChildView@file:///node_modules/tns-core-modules/ui/layouts/layout-base-common.js:125:0
10  eachChild@file:///node_modules/tns-core-modules/ui/core/view/view-common.js:992:0
11  _setupUI@file:///node_modules/tns-core-modules/ui/core/view-base/view-base.js:532:0
12  @file:///node_modules/tns-core-modules/ui/core/view-base/view-base.js:533:0
13  eachChildView@file:///node_modules/tns-core-modules/ui/content-view/content-view.js:70:0
14  eachChildView@file:///node_modules/tns-core-modules/ui/page/page-common.js:126:0
15  eachChild@file:///node_modules/tns-core-modules/ui/core/view/view-common.js:992:0
16  _setupUI@file:///node_modules/tns-core-modules/ui/core/view-base/view-base.js:532:0
17  _addViewCore@file:///node_modules/tns-core-modules/ui/core/view-base/view-base.js:431:0
18  _addView@file:///node_modules/tns-core-modules/ui/core/view-base/view-base.js:420:0
19  viewWillAppear@file:///node_modules/tns-core-modules/ui/page/page.js:81:0
20  UIApplicationMain@[native code]
21  _start@file:///node_modules/tns-core-modules/application/application.js:277:0
22  run@file:///node_modules/tns-core-modules/application/application.js:305:0
23  bootstrapNativeScriptApp@fil<…&gt;

我在哪里做错了?请给我想法。

标签: iosnativescript

解决方案


我已经在我的一个应用程序中实现了versa player,这就是我的做法。
在情节提要上添加 UIView 并将类设置为 VersaPlayerView。
在您的视图控制器中将该视图的引用作为 videoView 或您想要的任何其他名称。

变量:

    @IBOutlet weak var videoView: VersaPlayerView!
     var playerItem: VersaPlayerItem?

加载我从 ViewDidLoad() 调用的视频函数

 fileprivate func loadVideo(url: String) {
    if let url = URL.init(string: url) {
        playerItem = VersaPlayerItem(url: url)
        videoView.set(item: playerItem)
        videoView.layer.backgroundColor = UIColor.black.cgColor
    }
}

推荐阅读