Skip to content

Commit 6fcee85

Browse files
authored
Add Function to Change/ADD subtitle and change the audio track (#91)
1 parent 639c222 commit 6fcee85

File tree

7 files changed

+95
-4
lines changed

7 files changed

+95
-4
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 3.0.7
2+
* Updates MobileVLC to allow for changing of subtitles and adding subtiles .
3+
credits to @rikaweb(https://github.com/rikaweb) and Mitch Ross (https://github.com/mitchross)
4+
15
## 3.0.6
26
* Updates MobileVLC to allow for handling of vlc error.
37
credits to Alireza Setayesh (https://github.com/alr2413)

android/gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

android/src/main/java/software/solid/fluttervlcplayer/FlutterVideoView.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,18 @@ public void onMethodCall(MethodCall methodCall, @NonNull MethodChannel.Result re
185185
case "dispose":
186186
this.dispose();
187187
break;
188+
case "changeSound":
189+
int audioNumber = Integer.parseInt((String) methodCall.argument("audioNumber"));
190+
mediaPlayer.setAudioTrack(audioNumber);
191+
break;
192+
case "changeSubtitle":
193+
int subtitleNumber = Integer.parseInt((String) methodCall.argument("subtitleNumber"));
194+
mediaPlayer.setSpuTrack(subtitleNumber);
195+
break;
196+
case "addSubtitle":
197+
String filePath =(String) methodCall.argument("filePath");
198+
mediaPlayer.addSlave(0,filePath,true);
199+
break;
188200
case "changeURL":
189201
if (libVLC == null)
190202
result.error("VLC_NOT_INITIALIZED", "The player has not yet been initialized.", false);
@@ -285,6 +297,11 @@ public void onEvent(MediaPlayer.Event event) {
285297
eventObject.put("height", height);
286298
eventObject.put("width", width);
287299
eventObject.put("length", mediaPlayer.getLength());
300+
//add support for changing audio track and subtitle
301+
eventObject.put("audioCount", mediaPlayer.getAudioTracksCount());
302+
eventObject.put("activeAudioTracks", mediaPlayer.getAudioTrack());
303+
eventObject.put("spuCount", mediaPlayer.getSpuTracksCount());
304+
eventObject.put("activeSpu", mediaPlayer.getSpuTrack());
288305
eventSink.success(eventObject.clone());
289306
break;
290307

example/ios/Flutter/.last_build_id

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
b51a9eab8a58462f1b870a104119b683
1+
fac0ff2a1b783f751f7b7af21b136b52

ios/Classes/SwiftFlutterVlcPlayerPlugin.swift

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,32 @@ public class VLCView: NSObject, FlutterPlatformView {
147147
result(nil)
148148
return
149149

150+
case .changeSound:
151+
let audioNumber = arguments["audioNumber"] as? String ?? ""
152+
let audioNumberInt = Int32(audioNumber) ?? 0
153+
self.player.audioChannel = audioNumberInt
154+
return
155+
156+
case .changeSubtitle:
157+
let subtitleNumber = arguments["subtitleNumber"] as? String ?? ""
158+
let subtitleInt = Int32(subtitleNumber) ?? 0
159+
160+
self.player.currentVideoSubTitleIndex = subtitleInt
161+
return
162+
163+
case .addSubtitle:
164+
165+
guard let urlString = arguments["filePath"] as? String, let url = URL(string: urlString) else {
166+
167+
result(FlutterError(code: "500",
168+
message: "subtitle file path failed",
169+
details: nil)
170+
)
171+
return
172+
}
173+
self.player.addPlaybackSlave(url, type: .subtitle, enforce: true)
174+
return
175+
150176
default:
151177
result(FlutterMethodNotImplemented)
152178
return
@@ -196,6 +222,13 @@ class VLCPlayerEventStreamHandler:NSObject, FlutterStreamHandler, VLCMediaPlayer
196222
var height = 0
197223
var width = 0
198224

225+
//subtitle
226+
let audioCount = player?.numberOfAudioTracks ?? 0
227+
let activeAudioTracks = player?.audioChannel ?? 0
228+
let spuCount = player?.numberOfSubtitlesTracks ?? 0
229+
let activeSpu = player?.currentVideoSubTitleIndex ?? 0
230+
231+
199232
if player?.currentVideoTrackIndex != -1 {
200233
if (player?.currentVideoTrackIndex) != nil {
201234
track = tracks[0] as! NSDictionary
@@ -226,7 +259,12 @@ class VLCPlayerEventStreamHandler:NSObject, FlutterStreamHandler, VLCMediaPlayer
226259
"ratio": NSNumber(value: ratio),
227260
"height": height,
228261
"width": width,
229-
"length": value
262+
"length": value,
263+
"audioCount": audioCount,
264+
"activeAudioTracks": activeAudioTracks,
265+
"spuCount": spuCount,
266+
"activeSpu": activeSpu
267+
230268
])
231269
}
232270
return
@@ -311,4 +349,7 @@ enum FlutterMethodCallOption :String {
311349
case setPlaybackSpeed = "setPlaybackSpeed"
312350
case setTime = "setTime"
313351
case setVolume = "setVolume"
352+
case changeSound = "changeSound"
353+
case changeSubtitle = "changeSubtitle"
354+
case addSubtitle = "addSubtitle"
314355
}

lib/flutter_vlc_player.dart

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,15 @@ class VlcPlayerController {
175175
MethodChannel _methodChannel;
176176
EventChannel _eventChannel;
177177

178+
int get audioCount => _audioCount;
179+
int _audioCount = 1;
180+
int get activeAudioNum => _activeAudioNum;
181+
int _activeAudioNum = 1;
182+
int get activeSubtitleNum => _activeSubtitleNum;
183+
int _activeSubtitleNum;
184+
int get subtitleCount => _subtitleCount;
185+
int _subtitleCount = 0;
186+
178187
VoidCallback _onInit;
179188
List<VoidCallback> _eventHandlers;
180189

@@ -297,6 +306,12 @@ class VlcPlayerController {
297306
_size = new Size(event['width'], event['height']);
298307
if (event['length'] != null) _duration = event['length'];
299308
if (event['ratio'] != null) _aspectRatio = event['ratio'];
309+
if (event['audioCount'] != null) _audioCount = event['audioCount'];
310+
if (event['activeAudioTracks'] != null)
311+
_activeAudioNum = event['activeAudioTracks'];
312+
if (event['spuCount'] != null) _subtitleCount = event['spuCount'];
313+
if (event['activeSpu'] != null)
314+
_activeSubtitleNum = event['activeSpu'];
300315

301316
_playingState =
302317
event['value'] ? PlayingState.PLAYING : PlayingState.STOPPED;
@@ -375,4 +390,18 @@ class VlcPlayerController {
375390
void dispose() {
376391
_methodChannel.invokeMethod("dispose");
377392
}
393+
394+
void changeSound(int audioNumber) {
395+
_methodChannel
396+
.invokeMethod("changeSound", {'audioNumber': audioNumber.toString()});
397+
}
398+
399+
void changeSubtitle(int subtitleNumber) {
400+
_methodChannel.invokeMethod(
401+
"changeSubtitle", {'subtitleNumber': subtitleNumber.toString()});
402+
}
403+
404+
void addSubtitle(String filePath) {
405+
_methodChannel.invokeMethod("addSubtitle", {'filePath': filePath});
406+
}
378407
}

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: flutter_vlc_player
22
description: A VLC-powered alternative to Flutter's video_player. Supports multiple players on one screen.
3-
version: 3.0.6
3+
version: 3.0.7
44
homepage: https://github.com/solid-software/flutter_vlc_player
55

66
environment:

0 commit comments

Comments
 (0)