I just tried it and it seems to work fine on my computer.
Resizing the window works fine.
Even a custom popup menu to change the player style seems to be working.
I don't know if the video link keeps working as it's just something I found online, not something I'm hosting.
Code: Select all
ImportC "-framework AVKit" : EndImport
Procedure AVPlayerGadget(Gadget, x, y, Width, Height, Flags = 0)
Protected Result, ContainerID, Viewer, Frame.NSRect
Result = ContainerGadget(Gadget, x, y, Width, Height, Flags)
CloseGadgetList()
If Gadget = #PB_Any
ContainerID = GadgetID(Result)
Else
ContainerID = GadgetID(Gadget)
EndIf
Viewer = CocoaMessage(0, CocoaMessage(0, 0, "AVPlayerView alloc"), "initWithFrame:@", @Frame)
CocoaMessage(0, ContainerID, "setContentView:", Viewer)
CocoaMessage(0, Viewer, "release")
ProcedureReturn Result
EndProcedure
Procedure AVPlayerGadget_GetPlayerView(Gadget)
Protected Result
If IsGadget(Gadget) And GadgetType(Gadget) = #PB_GadgetType_Container
Result = CocoaMessage(0, GadgetID(Gadget), "contentView")
EndIf
ProcedureReturn Result
EndProcedure
; >>> Main code <<<
Enumeration
#AVPlayerViewControlsStyleNone
#AVPlayerViewControlsStyleInline
#AVPlayerViewControlsStyleFloating
#AVPlayerViewControlsStyleMinimal
EndEnumeration
Procedure SizeWindowHandler()
ResizeGadget(0, #PB_Ignore, #PB_Ignore, WindowWidth(EventWindow())-20, WindowHeight(EventWindow())-20)
EndProcedure
Procedure Player_SetURL(Player, URL.s)
Protected NSURL, Item
NSURL = CocoaMessage(0, 0, "NSURL URLWithString:$", @URL)
Item = CocoaMessage(0, 0, "AVPlayerItem playerItemWithURL:", NSURL)
CocoaMessage(0, Player, "replaceCurrentItemWithPlayerItem:", Item)
EndProcedure
Procedure Player_SetFile(Player, Filename.s)
Protected NSURL, Item
NSURL = CocoaMessage(0, 0, "NSURL fileURLWithPath:$", @Filename)
Item = CocoaMessage(0, 0, "AVPlayerItem playerItemWithURL:", NSURL)
CocoaMessage(0, Player, "replaceCurrentItemWithPlayerItem:", Item)
EndProcedure
If OpenWindow(0, 0, 0, 620, 420, "AVPlayerView example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
WindowBounds(0, 320, 200, #PB_Ignore, #PB_Ignore)
; Create custom popup menu for AVPlayerView
CreatePopupMenu(0)
MenuItem(1, "Inline menu style")
MenuItem(2, "Floating menu style")
MenuBar()
MenuItem(3, "Movie 1")
MenuItem(4, "Movie 2")
MenuItem(5, "BBC Radio 1")
NSMenu = CocoaMessage(0, MenuID(0), "objectAtIndex:", 0)
; Init AVPlayerView
AVPlayerGadget(0, 10, 10, 600, 400, #PB_Container_Flat)
PlayerView = AVPlayerGadget_GetPlayerView(0)
CocoaMessage(0, PlayerView, "setControlsStyle:", #AVPlayerViewControlsStyleFloating)
CocoaMessage(0, PlayerView, "setActionPopUpButtonMenu:", NSMenu)
; Set content
Player = CocoaMessage(0, 0, "AVPlayer new")
CocoaMessage(0, PlayerView, "setPlayer:", Player)
Player_SetURL(Player, "http://download.blender.org/peach/trailer/trailer_480p.mov")
; Bind resize event
BindEvent(#PB_Event_SizeWindow, @SizeWindowHandler())
; Handle popup menu events
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu()
Case 1
CocoaMessage(0, PlayerView, "setControlsStyle:", #AVPlayerViewControlsStyleInline)
Case 2
CocoaMessage(0, PlayerView, "setControlsStyle:", #AVPlayerViewControlsStyleFloating)
Case 3
Player_SetURL(Player, "http://download.blender.org/peach/trailer/trailer_480p.mov")
Case 4
Player_SetURL(Player, "http://www.html5videoplayer.net/videos/toystory.mp4")
Case 5
Player_SetURL(Player, "http://www.listenlive.eu/bbcradio1.m3u")
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf