Abschluss dieser Version:
[Features / Changelog]
- Multicamdatei kann erstellt und geladen werden (Damit muss man nicht mehr jedes einzelne Video in die Player laden)
- Player synchronisieren sich jetzt gegenseitig an den Sprungmarken
- Echtes Bind in Bild
- Player-Steuerelemente des verkleinerten Players werden ausgeblendet
- Bild in Bild kann kann eine der vier Ecken zugewiesen werden
- Freie Wahl der Audiospur
- Optimierte Playergröße für 16:9
Anhang anzeigen 45298
[src=csharp]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;
using WMPLib;
namespace Multicam_View_PoC2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// Globale Variablen
int lastPlayer;
bool playerAusgangsstellung;
public void MediaPlayer1_Klick()
{
// Player nicht mehr in Ausgangsstellung
playerAusgangsstellung = false;
// Größe der Player
axWindowsMediaPlayer1.Size = new Size(996, 625);
axWindowsMediaPlayer2.Size = new Size(284, 160);
// Position des großen Players
axWindowsMediaPlayer1.Location = new Point(0, 24);
// Kleiner gemachte Player in den vordergrund
axWindowsMediaPlayer2.BringToFront();
// Steuerelemente des kleineren Players ausblenden
axWindowsMediaPlayer2.uiMode = "none";
// Steuerelemente des großen Players (wieder) einblenden
axWindowsMediaPlayer1.uiMode = "full";
// Ton an / aus
axWindowsMediaPlayer1.settings.mute = false;
axWindowsMediaPlayer2.settings.mute = true;
radioButton1.Checked = true;
// Fenstergröße anpassen
this.Size = new Size(1010, 800);
}
public void MediaPlayer2_Klick()
{
// Player nicht mehr in Ausgangsstellung
playerAusgangsstellung = false;
// Größe der Player
axWindowsMediaPlayer2.Size = new Size(996, 625);
axWindowsMediaPlayer1.Size = new Size(284, 160);
// Position des großen Players
axWindowsMediaPlayer2.Location = new Point(0, 24);
// Kleiner gemachte Player in den vordergrund
axWindowsMediaPlayer1.BringToFront();
// Steuerelemente des kleineren Players ausblenden
axWindowsMediaPlayer1.uiMode = "none";
// Steuerelemente des großen Players (wieder) einblenden
axWindowsMediaPlayer2.uiMode = "full";
// Ton an / aus
axWindowsMediaPlayer1.settings.mute = true;
axWindowsMediaPlayer2.settings.mute = false;
radioButton2.Checked = true;
// Fenstergröße anpassen
this.Size = new Size(1010, 800);
}
public void keinBildInBild()
{
// Player in Ausgangsstellung
playerAusgangsstellung = true;
// Größe der Player
axWindowsMediaPlayer1.Size = new Size(640, 427);
axWindowsMediaPlayer2.Size = new Size(640, 427);
// Possition des Player nebeneinander anordnen
axWindowsMediaPlayer1.Location = new Point(0, 24);
axWindowsMediaPlayer2.Location = new Point(645, 24);
// Ton beider Player an
axWindowsMediaPlayer1.settings.mute = false;
axWindowsMediaPlayer2.settings.mute = false;
radioButton3.Checked = true;
// Steuerelemente beider Player (wieder) einblenden
axWindowsMediaPlayer1.uiMode = "full";
axWindowsMediaPlayer2.uiMode = "full";
// Fenstergröße anpassen
this.Size = new Size(1303, 800);
}
private void Form1_Load(object sender, EventArgs e)
{
playerAusgangsstellung = true;
}
// Datei öffnen für Player 1
private void dateiÖffnenKamera1ToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Videodateien (*.mp4)|*.mp4|Alle Dateien (*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.OK)
{
string file = ofd.FileName;
axWindowsMediaPlayer1.URL = ofd.FileName;
axWindowsMediaPlayer1.Ctlcontrols.stop();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
// Datei öffnen für Player 2
private void dateiÖffnenKamera2ToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Videodateien (*.mp4)|*.mp4|Alle Dateien (*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.OK)
{
string file = ofd.FileName;
axWindowsMediaPlayer2.URL = ofd.FileName;
axWindowsMediaPlayer2.Ctlcontrols.stop();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void mutlicamDateiErstellenToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Multicam View (*.mcv)|*.mcv";
if (sfd.ShowDialog() == DialogResult.OK)
{
string file = sfd.FileName;
string pfadVideo1 = axWindowsMediaPlayer1.URL;
string pfadVideo2 = axWindowsMediaPlayer2.URL;
File.WriteAllText(sfd.FileName, pfadVideo1 + "\r\n" + pfadVideo2, Encoding.UTF8);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void playlistÖffnenToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Multicam(*.mcv|*.mcv";
if(ofd.ShowDialog() == DialogResult.OK)
{
string file = ofd.FileName;
var lines = File.ReadAllLines(file);
// Teile 1 auslesen
axWindowsMediaPlayer1.URL = lines[0];
axWindowsMediaPlayer1.Ctlcontrols.stop();
// Zeile 2 auslesen
axWindowsMediaPlayer2.URL = lines[1];
axWindowsMediaPlayer2.Ctlcontrols.stop();
}
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
MessageBox.Show("Multicam View PoC2.1");
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
// Ton für Player 1 einschalten
axWindowsMediaPlayer1.settings.mute = false;
// Ton für Player 2 ausschalten
axWindowsMediaPlayer2.settings.mute = true;
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
// Ton für Player 1 ausschalten
axWindowsMediaPlayer1.settings.mute = true;
// Ton für Player 2 einschalten
axWindowsMediaPlayer2.settings.mute = false;
}
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
// Ton beider Player einschalten
axWindowsMediaPlayer1.settings.mute = false;
axWindowsMediaPlayer2.settings.mute = false;
}
private void cmdPlay_Click(object sender, EventArgs e)
{
// Beide Player gleichzeitig die Videos abspielen lassen
axWindowsMediaPlayer1.Ctlcontrols.play();
axWindowsMediaPlayer2.Ctlcontrols.play();
// Text des Play-Buttons (wieder) auf Play setzen.
cmdPlay.Text = "Play";
}
private void cmdPause_Click(object sender, EventArgs e)
{
// Videos pausieren
axWindowsMediaPlayer1.Ctlcontrols.pause();
axWindowsMediaPlayer2.Ctlcontrols.pause();
// Text des Play-Buttons wenn die Videos pausiert werden
cmdPlay.Text = "Weiter";
}
private void axWindowsMediaPlayer1_MouseDownEvent(object sender, AxWMPLib._WMPOCXEvents_MouseDownEvent e)
{
// Wird Player 1 (egal wo und wie) angeklickt den Player entsprechend markieren
// Wichtig um bei den Sprungmarken unterscheiden zu können welcher Player sich dem Anderen anpassen muss
lastPlayer = 1;
}
private void axWindowsMediaPlayer2_MouseDownEvent(object sender, AxWMPLib._WMPOCXEvents_MouseDownEvent e)
{
// Wird Player 2 (egal wo und wie) angeklickt den Player entsprechend markieren
// Wichtig um bei den Sprungmarken unterscheiden zu können welcher Player sich dem Anderen anpassen muss
lastPlayer = 2;
}
private void axWindowsMediaPlayer1_PositionChange(object sender, AxWMPLib._WMPOCXEvents_PositionChangeEvent e)
{
// Wird die Sprungmarke an Player 1 geändert zieht Player 2 gleich
if (lastPlayer == 1)
{
axWindowsMediaPlayer2.Ctlcontrols.currentPosition = axWindowsMediaPlayer1.Ctlcontrols.currentPosition;
}
}
private void axWindowsMediaPlayer2_PositionChange(object sender, AxWMPLib._WMPOCXEvents_PositionChangeEvent e)
{
// Wird die Sprungmarke an Player 2 geändert zieht Player 1 gleich
if (lastPlayer == 2)
{
axWindowsMediaPlayer1.Ctlcontrols.currentPosition = axWindowsMediaPlayer2.Ctlcontrols.currentPosition;
}
}
// <!-- Anfang Bild in Bild Possitionen --->
private void radioAus_CheckedChanged(object sender, EventArgs e)
{
playerAusgangsstellung = true;
keinBildInBild();
}
private void radioObenLinks_CheckedChanged(object sender, EventArgs e)
{
// Prüfen, ob beide Player in Ausstellungsstellung
// Falls ja nicht auf den Radio-button reagieren
if (playerAusgangsstellung == false)
{
// Prüfen an welchem Player die Steuerelemente ausgelendet sind
// Das ist dann der kleinere Player und wird entsprechend der Beschreibung des Radio-Buttons verschoben
if (axWindowsMediaPlayer1.uiMode != "full")
{
axWindowsMediaPlayer1.Location = new Point(0, 24);
}
else if (axWindowsMediaPlayer2.uiMode != "full")
{
axWindowsMediaPlayer2.Location = new Point(0, 24);
}
else { }
}
}
private void radioObenRechts_CheckedChanged(object sender, EventArgs e)
{
// Prüfen, ob beide Player in Ausstellungsstellung
// Falls ja nicht auf den Radio-button reagieren
if (playerAusgangsstellung == false)
{
// Prüfen an welchem Player die Steuerelemente ausgelendet sind
// Das ist dann der kleinere Player und wird entsprechend der Beschreibung des Radio-Buttons verschoben
if (axWindowsMediaPlayer1.uiMode != "full")
{
axWindowsMediaPlayer1.Location = new Point(712, 24);
}
else if (axWindowsMediaPlayer2.uiMode != "full")
{
axWindowsMediaPlayer2.Location = new Point(712, 24);
}
else { }
}
}
private void radioUntenLinks_CheckedChanged(object sender, EventArgs e)
{
// Prüfen, ob beide Player in Ausstellungsstellung
// Falls ja nicht auf den Radio-button reagieren
if (playerAusgangsstellung == false)
{
// Prüfen an welchem Player die Steuerelemente ausgelendet sind
// Das ist dann der kleinere Player und wird entsprechend der Beschreibung des Radio-Buttons verschoben
if (axWindowsMediaPlayer1.uiMode != "full")
{
axWindowsMediaPlayer1.Location = new Point(0, 425);
}
else if (axWindowsMediaPlayer2.uiMode != "full")
{
axWindowsMediaPlayer2.Location = new Point(0, 425);
}
else { }
}
}
private void radioUntenRechts_CheckedChanged(object sender, EventArgs e)
{
// Prüfen, ob beide Player in Ausstellungsstellung
// Falls ja nicht auf den Radio-button reagieren
if (playerAusgangsstellung == false)
{
// Prüfen an welchem Player die Steuerelemente ausgelendet sind
// Das ist dann der kleinere Player und wird entsprechend der Beschreibung des Radio-Buttons verschoben
if (axWindowsMediaPlayer1.uiMode != "full")
{
axWindowsMediaPlayer1.Location = new Point(712, 425);
}
else if (axWindowsMediaPlayer2.uiMode != "full")
{
axWindowsMediaPlayer2.Location = new Point(712, 425);
}
else { }
}
}
// <!-- Ende Bild in Bild Possitionen --->
private void axWindowsMediaPlayer1_ClickEvent(object sender, AxWMPLib._WMPOCXEvents_ClickEvent e)
{
if (radioAus.Checked)
{
playerAusgangsstellung = true;
keinBildInBild();
}
if (radioObenLinks.Checked)
{
playerAusgangsstellung = false;
axWindowsMediaPlayer2.Location = new Point(0, 24);
MediaPlayer1_Klick();
}
if (radioObenRechts.Checked)
{
playerAusgangsstellung = false;
axWindowsMediaPlayer2.Location = new Point(712, 24);
MediaPlayer1_Klick();
}
if (radioUntenLinks.Checked)
{
playerAusgangsstellung = false;
axWindowsMediaPlayer2.Location = new Point(0, 425);
MediaPlayer1_Klick();
}
if (radioUntenRechts.Checked)
{
playerAusgangsstellung = false;
axWindowsMediaPlayer2.Location = new Point(712, 425);
MediaPlayer1_Klick();
}
}
private void axWindowsMediaPlayer2_ClickEvent(object sender, AxWMPLib._WMPOCXEvents_ClickEvent e)
{
if (radioAus.Checked)
{
playerAusgangsstellung = true;
keinBildInBild();
}
if (radioObenLinks.Checked)
{
playerAusgangsstellung = false;
axWindowsMediaPlayer1.Location = new Point(0, 24);
MediaPlayer2_Klick();
}
if (radioObenRechts.Checked)
{
playerAusgangsstellung = false;
axWindowsMediaPlayer1.Location = new Point(712, 24);
MediaPlayer2_Klick();
}
if (radioUntenLinks.Checked)
{
playerAusgangsstellung = false;
axWindowsMediaPlayer1.Location = new Point(0, 425);
MediaPlayer2_Klick();
}
if (radioUntenRechts.Checked)
{
playerAusgangsstellung = false;
axWindowsMediaPlayer1.Location = new Point(712, 425);
MediaPlayer2_Klick();
}
}
// <!-- Ende Bild in Bild Possitionen --->
}
}[/src]