I’m developing a Flutter iOS app where I use AVPlayer to play videos and Google IMA SDK to manage ads. However, my video does not start playing automatically as intended. Here’s the relevant code snippet:
`import Foundation
import GoogleInteractiveMediaAds
import GSPlayer
import Flutter
class NativeViewFactory : NSObject, FlutterPlatformViewFactory {
private var messenger: FlutterBinaryMessenger
init(messenger: FlutterBinaryMessenger) {
self.messenger = messenger
super.init()
}
public func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
return FlutterStandardMessageCodec.sharedInstance()
}
func create(
withFrame frame: CGRect,
viewIdentifier viewId: Int64,
arguments args: Any?
) -> FlutterPlatformView {
return NativeView(
frame: frame,
viewIdentifier: viewId,
arguments: args,
binaryMessenger: messenger)
}
}
public class NativeView : NSObject, FlutterPlatformView, IMAAdsLoaderDelegate, IMAAdsManagerDelegate {
private var _view: UIView
var kTestAppContentUrl_MP4: String = ""
var playerView = VideoPlayerView()
var contentPlayhead: IMAAVPlayerContentPlayhead?
var adsLoader: IMAAdsLoader!
var adsManager: IMAAdsManager!
init(
frame: CGRect,
viewIdentifier viewId: Int64,
arguments args: Any?,
binaryMessenger messenger: FlutterBinaryMessenger?
) {
_view = UIView()
super.init()
if let argumentsDictionary = args as? Dictionary<String, Any> {
self.kTestAppContentUrl_MP4 = argumentsDictionary["videoURL"] as! String
}
setUpContentPlayer(view: _view)
setUpAdsLoader()
}
func setUpContentPlayer(view _view: UIView) {
guard let contentURL = URL(string: kTestAppContentUrl_MP4) else {
print("ERROR: Invalid URL")
return
}
let player = AVPlayer(url: contentURL)
playerView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 400)
playerView.play(for: contentURL)
_view.addSubview(playerView)
contentPlayhead = IMAAVPlayerContentPlayhead(avPlayer: player)
}
func setUpAdsLoader() {
adsLoader = IMAAdsLoader(settings: nil)
adsLoader.delegate = self
}
public func view() -> UIView {
return _view
}
}
`
What I’ve Tried
- Ensured the URL is valid.
- Called playerView.play(for: contentURL) to start playing the video.
- Added playerView.resume() to attempt starting the video immediately.
Despite these efforts, the video does not play automatically. Any insights on what might be going wrong or how to ensure the video starts playing automatically?
Suvankar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.