Skip to content

Commit 4f42473

Browse files
authored
Merge pull request #726 from josephdadams/contributiontally
add contribution tally protocol support
2 parents 4c1c04a + 5ba2b34 commit 4f42473

File tree

12 files changed

+1042
-63
lines changed

12 files changed

+1042
-63
lines changed

Diff for: UI/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tallyarbiter-ui",
3-
"version": "3.0.6",
3+
"version": "3.1.0",
44
"scripts": {
55
"prestart": "node git.version.js && cd .. && npm run redundancyjs",
66
"prebuild": "node git.version.js && cd .. && npm run redundancyjs",

Diff for: UI/src/app/_components/settings/settings.component.html

+8-3
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,7 @@ <h3>Bus Options</h3>
339339
</tbody>
340340
</table>
341341
</div>
342+
<button class="btn btn-sm btn-success" (click)="addBusOption(busOptionModal)"><i class="fas fa-plus"></i> Add </button>
342343
</div>
343344
</div>
344345
<div *ngIf="!configLoaded" class="d-flex justify-content-center mt-3 pt-3">
@@ -481,7 +482,7 @@ <h3>
481482
<table class="table table-hover align-middle" *ngIf="socketService.devices.length > 0">
482483
<thead>
483484
<tr>
484-
<th *ngFor="let bus of socketService.busOptions">{{bus.label}}</th>
485+
<th *ngFor="let bus of socketService.busOptionsVisible">{{bus.label}}</th>
485486
<th style="min-width: 100px;">Name</th>
486487
<th></th>
487488
<th style="min-width: 200px;">Description</th>
@@ -490,7 +491,7 @@ <h3>
490491
</thead>
491492
<tbody>
492493
<tr *ngFor="let device of socketService.devices; index as index" [class.text-muted]="!device.enabled">
493-
<td *ngFor="let bus of socketService.busOptions" [style.background-color]="deviceBusColors[device.id].includes(bus.id) ? bus.color : '#FFFFFF'"></td>
494+
<td *ngFor="let bus of socketService.busOptionsVisible" [style.background-color]="deviceBusColors[device.id].includes(bus.id) ? bus.color : '#FFFFFF'"></td>
494495
<td>
495496
<small><b>{{ index + 1 }}</b></small> {{ device.name }}
496497
</td>
@@ -635,7 +636,7 @@ <h4 class="modal-title" id="modal-basic-title">
635636
<div class="mb-3">
636637
<b>Linked Busses:</b><br>
637638
<small>
638-
By default busses are unlinked. That means the device will be (for example) in PVW if it is in PVW in <b>any</b> Device Source. All busses you select here will only be in that bus if it is in PVW across <b>all</b> Device Sources.
639+
By default busses are unlinked. That means the device will be (for example) in Preview if it is in Preview in <b>any</b> Device Source. By linking, all busses you select here will only be in that bus within Tally Arbiter if it is in Preview across <b>all</b> Device Sources.
639640
</small>
640641
<div>
641642
<select class="form-select" [(ngModel)]="currentDevice.linkedBusses" multiple="multiple">
@@ -903,6 +904,10 @@ <h4 class="modal-title" id="modal-basic-title">
903904
<label for="busColor" class="form-label">Color</label>
904905
<input type="color" class="form-control color-input" id="busColor" [(ngModel)]="currentBusOption.color" />
905906
</div>
907+
<div class="mb-3">
908+
<input type="checkbox" class="form-check-input" id="busVisible" [(ngModel)]="currentBusOption.visible" />
909+
<label class="form-check-label" for="busVisible">Visible in UI</label>
910+
</div>
906911
<div class="d-flex justify-content-end">
907912
<button class="btn btn-primary" (click)="saveCurrentBusOption()">
908913
<i class="fas fa-save"></i> {{ editingBusOption ? "Save Changes" : "Add Bus Option" }}

Diff for: UI/src/app/_components/settings/settings.component.ts

+11
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,10 @@ export class SettingsComponent {
234234
type: "device_source",
235235
device_source: deviceSourceObj,
236236
};
237+
238+
//reset the currentDeviceSource
239+
this.currentDeviceSource = {} as DeviceSource;
240+
237241
this.socketService.socket.emit('manage', arbiterObj);
238242
}
239243

@@ -743,6 +747,13 @@ export class SettingsComponent {
743747
} as CloudDestination;
744748
this.modalService.open(modal);
745749
}
750+
751+
public addBusOption(modal: any) {
752+
this.editingBusOption = false;
753+
this.currentBusOption = { } as BusOption;
754+
this.modalService.open(modal);
755+
}
756+
746757
public editBusOption(bus: BusOption, modal: any) {
747758
this.editingBusOption = true;
748759
this.currentBusOptionSelectedTypeIdx = this.socketService.busOptions.findIndex((t) => t.id == bus.id);

Diff for: UI/src/app/_services/socket.service.ts

+2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export class SocketService {
4242
public vmixClients: VmixClient[] = [];
4343
public sources: Source[] = [];
4444
public busOptions: BusOption[] = [];
45+
public busOptionsVisible: BusOption[] = [];
4546
public remoteErrorOpt: boolean = true;
4647
public initialDataLoaded = false;
4748
public version?: string;
@@ -231,6 +232,7 @@ export class SocketService {
231232
this.outputTypes = outputTypes;
232233
this.outputTypeDataFields = outputTypesDataFields;
233234
this.busOptions = busOptions;
235+
this.busOptionsVisible = busOptions.filter((b) => b.visible);
234236
this.sources = this.prepareSources(sourcesData);
235237
this.devices = devicesData;
236238
this.deviceSources = deviceSources;

Diff for: docs/docs/usage/sections/sources.md

+38-30
Original file line numberDiff line numberDiff line change
@@ -6,49 +6,35 @@ sidebar_position: 2
66
Sources represent all of the tally data that is generated. This is usually your video switcher or mixing software. Multiple sources can be added and they can all be different types.
77

88
The following source types are supported:
9-
* TSL 3.1/5.0 UDP/TCP (Ross switchers, Streamstar, FOR-A, etc. - any device that uses the TSL UMD protocol)
9+
* Analog Way Livecore Image Processors
1010
* Blackmagic ATEM
1111
* Blackmagic VideoHub
12+
* Grass Valley Contribution Tally
13+
* Newtek Tricaster
1214
* OBS Studio
15+
* Open Sound Control (OSC)
16+
* Panasonic AV-HS410
1317
* StudioCoast VMix
18+
* Riedel SimplyLive
1419
* Roland Smart Tally
1520
* Roland VR-50HD-MKII
21+
* Ross Vision (through GV Contribution Tally Protocol)
1622
* Ross Carbonite/Carbonite Black/Carbonite Black Solo/Carbonite Ultra/Graphite
17-
* Newtek Tricaster
18-
* Open Sound Control (OSC)
19-
* Panasonic AV-HS410
20-
* Analog Way Livecore Image Processors
21-
* Riedel SimplyLive
23+
* TSL 3.1/5.0 UDP/TCP (Ross switchers, Streamstar, FOR-A, etc. - any device that uses the TSL UMD protocol)
2224

2325
When you add a source and the connection to the tally source (video switcher, software, etc.) is successfully made, the source will be green. If there is an error, the source will be red. Look at the logs for more error information.
2426

25-
## TSL 3.1 UDP/TCP
26-
Your switcher or service that uses this protocol must be configured to send the data to Tally Arbiter at the port you specify.
27+
## Analog Way Livecore Image Processors
28+
You will need the IP address of the device, and the port (standard port is 10600).
2729

2830
## Blackmagic ATEM
2931
You will need the IP address of the ATEM. The ATEM can only have 5 simultaneous connections, so you may need to disconnect another connection in order for Tally Arbiter to connect to the ATEM.
3032

3133
## Blackmagic VideoHub
3234
You will need the IP address of the VideoHub. You can choose to have any destination be configured as a preview bus, program bus, or both. Enter multiple destination routes by separating them with commas.
3335

34-
## OBS Studio
35-
For OBS Studio v27 (or older) the `obs-websockets` plugin must be installed and configured in order for Tally Arbiter to connect. You can get the plugin here: https://github.com/Palakis/obs-websocket/releases.
36-
37-
For OBS Studio v28 and later is `obs-websockets` included with OBS Studio. Note that the included `obs-websockets` in OBS Studio uses port 4455. This will cause a port conflict with TallyArbiter. In OBS Studion can an alternative port be configured in Tools -> WebSocket Server Settings. An alternative is to re-configure Tally Aribiter with another port by editing the [config file](../../usage/control-interface.md).
38-
39-
You will need to supply the IP address, port, and password configured in the OBS Websockets plugin.
40-
41-
## StudioCoast VMix
42-
You will need the IP address of the computer running VMix.
43-
44-
## Roland Smart Tally
45-
You will need the IP address of the Roland switcher.
46-
47-
## Roland VR-50HD-MKII
48-
You will need the IP address of the Roland switcher.
49-
50-
## Ross Carbonite Models
51-
You will need the IP address of the Ross Carbonite switcher. Your Carbonite must be configured to send the data to Tally Arbiter at the port you specify. All Ross products use the TSL 3.1/5.0 protocols, however this specific source type allows you to process tally information by specific supported busses (ME1, MME1, Auxes, etc.) regardless of the "OnAir" setting that is configured on the Carbonite itself.
36+
## Grass Valley Contribution Tally
37+
It's an older protocol sir, but it checks out. Any Grass Valley switcher that uses this protocol. Choose whether the data is arriving via TCP or UDP, and the port you are sending data on.
5238

5339
## Newtek Tricaster
5440
You will need the IP address of the Tricaster.
@@ -66,12 +52,34 @@ OSC paths must be one of the following:
6652

6753
The device source address should be sent as an integer or a string. Send one argument of any type (integer, float, or string). If you send multiple arguments, they will be ignored.
6854

55+
## OBS Studio
56+
For OBS Studio v27 (or older) the `obs-websockets` plugin must be installed and configured in order for Tally Arbiter to connect. You can get the plugin here: https://github.com/Palakis/obs-websocket/releases.
57+
58+
For OBS Studio v28 and later is `obs-websockets` included with OBS Studio. Note that the included `obs-websockets` in OBS Studio uses port 4455. This will cause a port conflict with TallyArbiter. In OBS Studion can an alternative port be configured in Tools -> WebSocket Server Settings. An alternative is to re-configure Tally Aribiter with another port by editing the [config file](../../usage/control-interface.md).
59+
60+
You will need to supply the IP address, port, and password configured in the OBS Websockets plugin.
61+
6962
## Panasonic AV-HS410
7063
You will need the IP address of the switcher. Multicast must also be enabled on the switcher and your network in order to receive the tally data, therefore Tally Arbiter and the Panasonic device must reside on the same subnet.
7164

72-
## Analog Way Livecore Image Processors
73-
You will need the IP address of the device, and the port (standard port is 10600).
74-
7565
## Riedel SimplyLive
7666
You need to configure TSL in the SimplyLive backend to send the data to Tally Arbiter at the port you specify.
77-
Uses an TSL v5 UDP connection internally.
67+
Uses an TSL v5 UDP connection internally.
68+
69+
## Roland Smart Tally
70+
You will need the IP address of the Roland switcher.
71+
72+
## Roland VR-50HD-MKII
73+
You will need the IP address of the Roland switcher.
74+
75+
## Ross Vision (through Contrib Tally)
76+
Some of Ross's older Vision models use the Contribution Tally protocol instead of TSL.
77+
78+
## Ross Carbonite Models
79+
You will need the IP address of the Ross Carbonite switcher. Your Carbonite must be configured to send the data to Tally Arbiter at the port you specify. All Ross products use the TSL 3.1/5.0 protocols, however this specific source type allows you to process tally information by specific supported busses (ME1, MME1, Auxes, etc.) regardless of the "OnAir" setting that is configured on the Carbonite itself.
80+
81+
## StudioCoast VMix
82+
You will need the IP address of the computer running VMix.
83+
84+
## TSL 3.1 UDP/TCP
85+
Your switcher or service that uses this protocol must be configured to send the data to Tally Arbiter at the port you specify.

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tallyarbiter",
3-
"version": "3.0.10",
3+
"version": "3.1.0",
44
"description": "The flexible and customizable tally system",
55
"keywords": [
66
"util",

Diff for: src/_helpers/config.ts

+11-4
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,17 @@ export const ConfigDefaults: Config = {
3333
tsl_clients: [],
3434
tsl_clients_1secupdate: false,
3535
bus_options: [
36-
{ id: 'e393251c', label: 'Preview', type: 'preview', color: '#3fe481', priority: 50},
37-
{ id: '334e4eda', label: 'Program', type: 'program', color: '#e43f5a', priority: 200},
38-
{ id: '12c8d699', label: 'Aux 1', type: 'aux', color: '#0000FF', priority: 100},
39-
{ id: '12c8d689', label: 'Aux 2', type: 'aux', color: '#0000FF', priority: 100}
36+
{ id: 'e393251c', label: 'Preview', type: 'preview', color: '#3fe481', priority: 50, visible: true},
37+
{ id: '334e4eda', label: 'Program', type: 'program', color: '#e43f5a', priority: 200, visible: true},
38+
{ id: '12c8d699', label: 'Aux 1', type: 'aux', color: '#0000FF', priority: 100, visible: true},
39+
{ id: '0449b0c7', label: 'Aux 2', type: 'aux', color: '#0000FF', priority: 100, visible: true},
40+
{ id: '5d94f273', label: 'Aux 3', type: 'aux', color: '#0000FF', priority: 100, visible: false},
41+
{ id: '77ffb605', label: 'Aux 4', type: 'aux', color: '#0000FF', priority: 100, visible: false},
42+
{ id: '09d4975d', label: 'Aux 5', type: 'aux', color: '#0000FF', priority: 100, visible: false},
43+
{ id: 'e2c2e192', label: 'Aux 6', type: 'aux', color: '#0000FF', priority: 100, visible: false},
44+
{ id: '734f7395', label: 'Aux 7', type: 'aux', color: '#0000FF', priority: 100, visible: false},
45+
{ id: '3011d34a', label: 'Aux 8', type: 'aux', color: '#0000FF', priority: 100, visible: false},
46+
4047
],
4148
externalAddress: "http://0.0.0.0:4455/#/tally",
4249
remoteErrorReporting: false,

Diff for: src/_models/BusOption.ts

+1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ export interface BusOption {
44
id: string;
55
color: string;
66
priority: number;
7+
visible: boolean;
78
}

0 commit comments

Comments
 (0)