Skip to content

Commit

Permalink
Add Function to Change/ADD subtitle and change the audio track (#91)
Browse files Browse the repository at this point in the history
  • Loading branch information
rikaweb authored Aug 26, 2020
1 parent 639c222 commit 6fcee85
Show file tree
Hide file tree
Showing 7 changed files with 95 additions and 4 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 3.0.7
* Updates MobileVLC to allow for changing of subtitles and adding subtiles .
credits to @rikaweb(https://github.com/rikaweb) and Mitch Ross (https://github.com/mitchross)

## 3.0.6
* Updates MobileVLC to allow for handling of vlc error.
credits to Alireza Setayesh (https://github.com/alr2413)
Expand Down
2 changes: 1 addition & 1 deletion android/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,18 @@ public void onMethodCall(MethodCall methodCall, @NonNull MethodChannel.Result re
case "dispose":
this.dispose();
break;
case "changeSound":
int audioNumber = Integer.parseInt((String) methodCall.argument("audioNumber"));
mediaPlayer.setAudioTrack(audioNumber);
break;
case "changeSubtitle":
int subtitleNumber = Integer.parseInt((String) methodCall.argument("subtitleNumber"));
mediaPlayer.setSpuTrack(subtitleNumber);
break;
case "addSubtitle":
String filePath =(String) methodCall.argument("filePath");
mediaPlayer.addSlave(0,filePath,true);
break;
case "changeURL":
if (libVLC == null)
result.error("VLC_NOT_INITIALIZED", "The player has not yet been initialized.", false);
Expand Down Expand Up @@ -285,6 +297,11 @@ public void onEvent(MediaPlayer.Event event) {
eventObject.put("height", height);
eventObject.put("width", width);
eventObject.put("length", mediaPlayer.getLength());
//add support for changing audio track and subtitle
eventObject.put("audioCount", mediaPlayer.getAudioTracksCount());
eventObject.put("activeAudioTracks", mediaPlayer.getAudioTrack());
eventObject.put("spuCount", mediaPlayer.getSpuTracksCount());
eventObject.put("activeSpu", mediaPlayer.getSpuTrack());
eventSink.success(eventObject.clone());
break;

Expand Down
2 changes: 1 addition & 1 deletion example/ios/Flutter/.last_build_id
Original file line number Diff line number Diff line change
@@ -1 +1 @@
b51a9eab8a58462f1b870a104119b683
fac0ff2a1b783f751f7b7af21b136b52
43 changes: 42 additions & 1 deletion ios/Classes/SwiftFlutterVlcPlayerPlugin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,32 @@ public class VLCView: NSObject, FlutterPlatformView {
result(nil)
return

case .changeSound:
let audioNumber = arguments["audioNumber"] as? String ?? ""
let audioNumberInt = Int32(audioNumber) ?? 0
self.player.audioChannel = audioNumberInt
return

case .changeSubtitle:
let subtitleNumber = arguments["subtitleNumber"] as? String ?? ""
let subtitleInt = Int32(subtitleNumber) ?? 0

self.player.currentVideoSubTitleIndex = subtitleInt
return

case .addSubtitle:

guard let urlString = arguments["filePath"] as? String, let url = URL(string: urlString) else {

result(FlutterError(code: "500",
message: "subtitle file path failed",
details: nil)
)
return
}
self.player.addPlaybackSlave(url, type: .subtitle, enforce: true)
return

default:
result(FlutterMethodNotImplemented)
return
Expand Down Expand Up @@ -196,6 +222,13 @@ class VLCPlayerEventStreamHandler:NSObject, FlutterStreamHandler, VLCMediaPlayer
var height = 0
var width = 0

//subtitle
let audioCount = player?.numberOfAudioTracks ?? 0
let activeAudioTracks = player?.audioChannel ?? 0
let spuCount = player?.numberOfSubtitlesTracks ?? 0
let activeSpu = player?.currentVideoSubTitleIndex ?? 0


if player?.currentVideoTrackIndex != -1 {
if (player?.currentVideoTrackIndex) != nil {
track = tracks[0] as! NSDictionary
Expand Down Expand Up @@ -226,7 +259,12 @@ class VLCPlayerEventStreamHandler:NSObject, FlutterStreamHandler, VLCMediaPlayer
"ratio": NSNumber(value: ratio),
"height": height,
"width": width,
"length": value
"length": value,
"audioCount": audioCount,
"activeAudioTracks": activeAudioTracks,
"spuCount": spuCount,
"activeSpu": activeSpu

])
}
return
Expand Down Expand Up @@ -311,4 +349,7 @@ enum FlutterMethodCallOption :String {
case setPlaybackSpeed = "setPlaybackSpeed"
case setTime = "setTime"
case setVolume = "setVolume"
case changeSound = "changeSound"
case changeSubtitle = "changeSubtitle"
case addSubtitle = "addSubtitle"
}
29 changes: 29 additions & 0 deletions lib/flutter_vlc_player.dart
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,15 @@ class VlcPlayerController {
MethodChannel _methodChannel;
EventChannel _eventChannel;

int get audioCount => _audioCount;
int _audioCount = 1;
int get activeAudioNum => _activeAudioNum;
int _activeAudioNum = 1;
int get activeSubtitleNum => _activeSubtitleNum;
int _activeSubtitleNum;
int get subtitleCount => _subtitleCount;
int _subtitleCount = 0;

VoidCallback _onInit;
List<VoidCallback> _eventHandlers;

Expand Down Expand Up @@ -297,6 +306,12 @@ class VlcPlayerController {
_size = new Size(event['width'], event['height']);
if (event['length'] != null) _duration = event['length'];
if (event['ratio'] != null) _aspectRatio = event['ratio'];
if (event['audioCount'] != null) _audioCount = event['audioCount'];
if (event['activeAudioTracks'] != null)
_activeAudioNum = event['activeAudioTracks'];
if (event['spuCount'] != null) _subtitleCount = event['spuCount'];
if (event['activeSpu'] != null)
_activeSubtitleNum = event['activeSpu'];

_playingState =
event['value'] ? PlayingState.PLAYING : PlayingState.STOPPED;
Expand Down Expand Up @@ -375,4 +390,18 @@ class VlcPlayerController {
void dispose() {
_methodChannel.invokeMethod("dispose");
}

void changeSound(int audioNumber) {
_methodChannel
.invokeMethod("changeSound", {'audioNumber': audioNumber.toString()});
}

void changeSubtitle(int subtitleNumber) {
_methodChannel.invokeMethod(
"changeSubtitle", {'subtitleNumber': subtitleNumber.toString()});
}

void addSubtitle(String filePath) {
_methodChannel.invokeMethod("addSubtitle", {'filePath': filePath});
}
}
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: flutter_vlc_player
description: A VLC-powered alternative to Flutter's video_player. Supports multiple players on one screen.
version: 3.0.6
version: 3.0.7
homepage: https://github.com/solid-software/flutter_vlc_player

environment:
Expand Down

0 comments on commit 6fcee85

Please sign in to comment.