Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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>);
}