Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions packages/video_player/video_player_avfoundation/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## 2.11.0

* Implements `setPreventsDisplaySleepDuringVideoPlayback` using
`AVPlayer.preventsDisplaySleepDuringVideoPlayback`.

## 2.10.0

* Implements `getVideoTracks()` and `selectVideoTrack()` methods for video track (quality) selection using AVFoundation.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,26 @@ private let hlsAudioTestURI =
#expect((inspectableAVPlayer.afterTolerance?.intValue ?? 0) > 0)
}

@Test func setPreventsDisplaySleepDuringVideoPlayback() {
let stubAVFactory = StubFVPAVFactory(player: AVPlayer())
let player = FVPVideoPlayer(
playerItem: StubPlayerItem(),
avFactory: stubAVFactory,
viewProvider: StubViewProvider())
let listener = StubEventListener()
player.eventListener = listener

var error: FlutterError?
// The setter should update the underlying AVPlayer in both directions.
player.setPreventsDisplaySleepDuringVideoPlayback(false, error: &error)
#expect(error == nil)
#expect(player.player.preventsDisplaySleepDuringVideoPlayback == false)

player.setPreventsDisplaySleepDuringVideoPlayback(true, error: &error)
#expect(error == nil)
#expect(player.player.preventsDisplaySleepDuringVideoPlayback == true)
}

/// Sanity checks a video player playing the given URL with the actual AVPlayer. This is essentially
/// a mini integration test of the player component.
///
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -661,6 +661,11 @@ - (void)selectAudioTrackAtIndex:(NSInteger)trackIndex
}
}

- (void)setPreventsDisplaySleepDuringVideoPlayback:(BOOL)preventsDisplaySleepDuringVideoPlayback
error:(FlutterError *_Nullable *_Nonnull)error {
self.player.preventsDisplaySleepDuringVideoPlayback = preventsDisplaySleepDuringVideoPlayback;
}

#pragma mark - Private

- (int64_t)duration {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -741,4 +741,32 @@ void SetUpFVPVideoPlayerInstanceApiWithSuffix(id<FlutterBinaryMessenger> binaryM
[channel setMessageHandler:nil];
}
}
{
FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
initWithName:[NSString stringWithFormat:@"%@%@",
@"dev.flutter.pigeon.video_player_avfoundation."
@"VideoPlayerInstanceApi."
@"setPreventsDisplaySleepDuringVideoPlayback",
messageChannelSuffix]
binaryMessenger:binaryMessenger
codec:FVPGetVideoPlayerInstanceMessagesCodec()];
if (api) {
NSCAssert([api respondsToSelector:@selector(setPreventsDisplaySleepDuringVideoPlayback:
error:)],
@"FVPVideoPlayerInstanceApi api (%@) doesn't respond to "
@"@selector(setPreventsDisplaySleepDuringVideoPlayback:error:)",
api);
[channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
NSArray<id> *args = message;
BOOL arg_preventsDisplaySleepDuringVideoPlayback =
[GetNullableObjectAtIndex(args, 0) boolValue];
FlutterError *error;
[api setPreventsDisplaySleepDuringVideoPlayback:arg_preventsDisplaySleepDuringVideoPlayback
error:&error];
callback(wrapResult(nil, error));
}];
} else {
[channel setMessageHandler:nil];
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ NSObject<FlutterMessageCodec> *FVPGetVideoPlayerInstanceMessagesCodec(void);
/// Pass 0 to enable auto quality selection.
- (void)selectVideoTrackWithBitrate:(NSInteger)bitrate
error:(FlutterError *_Nullable *_Nonnull)error;
- (void)setPreventsDisplaySleepDuringVideoPlayback:(BOOL)preventsDisplaySleepDuringVideoPlayback
error:(FlutterError *_Nullable *_Nonnull)error;
@end

extern void SetUpFVPVideoPlayerInstanceApi(id<FlutterBinaryMessenger> binaryMessenger,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,16 @@ class AVFoundationVideoPlayer extends VideoPlayerPlatform {
return _api.setMixWithOthers(mixWithOthers);
}

@override
Future<void> setPreventsDisplaySleepDuringVideoPlayback(
int playerId,
bool preventsDisplaySleepDuringVideoPlayback,
) {
return _playerWith(
id: playerId,
).setPreventsDisplaySleepDuringVideoPlayback(preventsDisplaySleepDuringVideoPlayback);
}
Comment thread
stuartmorgan-g marked this conversation as resolved.

@override
Future<List<VideoAudioTrack>> getAudioTracks(int playerId) async {
final List<MediaSelectionAudioTrackData> nativeData = await _playerWith(
Expand Down Expand Up @@ -341,6 +351,10 @@ class _PlayerInstance {

Future<void> setPlaybackSpeed(double speed) => _api.setPlaybackSpeed(speed);

Future<void> setPreventsDisplaySleepDuringVideoPlayback(
bool preventsDisplaySleepDuringVideoPlayback,
) => _api.setPreventsDisplaySleepDuringVideoPlayback(preventsDisplaySleepDuringVideoPlayback);

Future<void> seekTo(Duration position) {
return _api.seekTo(position.inMilliseconds);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -588,4 +588,22 @@ class VideoPlayerInstanceApi {

_extractReplyValueOrThrow(pigeonVar_replyList, pigeonVar_channelName, isNullValid: true);
}

Future<void> setPreventsDisplaySleepDuringVideoPlayback(
bool preventsDisplaySleepDuringVideoPlayback,
) async {
final pigeonVar_channelName =
'dev.flutter.pigeon.video_player_avfoundation.VideoPlayerInstanceApi.setPreventsDisplaySleepDuringVideoPlayback$pigeonVar_messageChannelSuffix';
final pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[
preventsDisplaySleepDuringVideoPlayback,
]);
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;

_extractReplyValueOrThrow(pigeonVar_replyList, pigeonVar_channelName, isNullValid: true);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,7 @@ abstract class VideoPlayerInstanceApi {
/// Pass 0 to enable auto quality selection.
@ObjCSelector('selectVideoTrackWithBitrate:')
void selectVideoTrack(int bitrate);

@ObjCSelector('setPreventsDisplaySleepDuringVideoPlayback:')
void setPreventsDisplaySleepDuringVideoPlayback(bool preventsDisplaySleepDuringVideoPlayback);
}
4 changes: 2 additions & 2 deletions packages/video_player/video_player_avfoundation/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: video_player_avfoundation
description: iOS and macOS implementation of the video_player plugin.
repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_avfoundation
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22
version: 2.10.0
version: 2.11.0

environment:
sdk: ^3.10.0
Expand All @@ -25,7 +25,7 @@ dependencies:
flutter:
sdk: flutter
meta: ^1.10.0
video_player_platform_interface: ^6.7.0
video_player_platform_interface: ^6.8.0

dev_dependencies:
build_runner: ^2.3.3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,24 @@ void main() {
verify(playerApi.setPlaybackSpeed(speed));
});

group('setPreventsDisplaySleepDuringVideoPlayback', () {
test('passes true', () async {
final (AVFoundationVideoPlayer player, _, MockVideoPlayerInstanceApi playerApi) =
setUpMockPlayer(playerId: 1);
await player.setPreventsDisplaySleepDuringVideoPlayback(1, true);

verify(playerApi.setPreventsDisplaySleepDuringVideoPlayback(true));
});

test('passes false', () async {
final (AVFoundationVideoPlayer player, _, MockVideoPlayerInstanceApi playerApi) =
setUpMockPlayer(playerId: 1);
await player.setPreventsDisplaySleepDuringVideoPlayback(1, false);

verify(playerApi.setPreventsDisplaySleepDuringVideoPlayback(false));
});
});

test('seekTo', () async {
final (AVFoundationVideoPlayer player, _, MockVideoPlayerInstanceApi playerApi) =
setUpMockPlayer(playerId: 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,4 +244,17 @@ class MockVideoPlayerInstanceApi extends _i1.Mock implements _i3.VideoPlayerInst
returnValueForMissingStub: _i5.Future<void>.value(),
)
as _i5.Future<void>);

@override
_i5.Future<void> setPreventsDisplaySleepDuringVideoPlayback(
bool? preventsDisplaySleepDuringVideoPlayback,
) =>
(super.noSuchMethod(
Invocation.method(#setPreventsDisplaySleepDuringVideoPlayback, [
preventsDisplaySleepDuringVideoPlayback,
]),
returnValue: _i5.Future<void>.value(),
returnValueForMissingStub: _i5.Future<void>.value(),
)
as _i5.Future<void>);
}
Loading