Streaming audio et video

Soyez le premier à donner votre avis sur cette source.

Vue 35 859 fois - Téléchargée 4 216 fois

Description

Voici une petite source geniale extra lissime !
Je l'ai recupérée sur The Code Project et l'ai modifié de maniere a la rendre plus accessible et a ce kelle accepte le son dans le .avi
Cette source utilise DirextX et DirectShow.
ATTENTION: fonctionne avec DX9 et DX8.1.

Les 2 DLL fournit possedent leur source en C# si besoin IM moi.

Source / Exemple :


Imports DirectX.Capture

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Code généré par le Concepteur Windows Form "

    Public Sub New()
        MyBase.New()

        'Cet appel est requis par le Concepteur Windows Form.
        InitializeComponent()

        'Ajoutez une initialisation quelconque après l'appel InitializeComponent()

    End Sub

    'La méthode substituée Dispose du formulaire pour nettoyer la liste des composants.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Requis par le Concepteur Windows Form
    Private components As System.ComponentModel.IContainer

    'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form
    'Elle peut être modifiée en utilisant le Concepteur Windows Form.  
    'Ne la modifiez pas en utilisant l'éditeur de code.
    Friend WithEvents ComboBox1 As System.Windows.Forms.ComboBox
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents ComboBox2 As System.Windows.Forms.ComboBox
    Friend WithEvents Panel1 As System.Windows.Forms.Panel
    Friend WithEvents Button2 As System.Windows.Forms.Button
    Friend WithEvents Button3 As System.Windows.Forms.Button
    Friend WithEvents Label1 As System.Windows.Forms.Label
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.ComboBox1 = New System.Windows.Forms.ComboBox()
        Me.Button1 = New System.Windows.Forms.Button()
        Me.ComboBox2 = New System.Windows.Forms.ComboBox()
        Me.Panel1 = New System.Windows.Forms.Panel()
        Me.Button2 = New System.Windows.Forms.Button()
        Me.Button3 = New System.Windows.Forms.Button()
        Me.Label1 = New System.Windows.Forms.Label()
        Me.SuspendLayout()
        '
        'ComboBox1
        '
        Me.ComboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
        Me.ComboBox1.Location = New System.Drawing.Point(60, 16)
        Me.ComboBox1.Name = "ComboBox1"
        Me.ComboBox1.Size = New System.Drawing.Size(368, 21)
        Me.ComboBox1.TabIndex = 0
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(60, 60)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(368, 23)
        Me.Button1.TabIndex = 1
        Me.Button1.Text = "Valider la configuration"
        '
        'ComboBox2
        '
        Me.ComboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
        Me.ComboBox2.Location = New System.Drawing.Point(60, 36)
        Me.ComboBox2.Name = "ComboBox2"
        Me.ComboBox2.Size = New System.Drawing.Size(368, 21)
        Me.ComboBox2.TabIndex = 2
        '
        'Panel1
        '
        Me.Panel1.BackColor = System.Drawing.Color.Black
        Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
        Me.Panel1.Location = New System.Drawing.Point(84, 128)
        Me.Panel1.Name = "Panel1"
        Me.Panel1.Size = New System.Drawing.Size(320, 240)
        Me.Panel1.TabIndex = 3
        Me.Panel1.Visible = False
        '
        'Button2
        '
        Me.Button2.Location = New System.Drawing.Point(84, 376)
        Me.Button2.Name = "Button2"
        Me.Button2.TabIndex = 4
        Me.Button2.Text = "Start"
        '
        'Button3
        '
        Me.Button3.Enabled = False
        Me.Button3.Location = New System.Drawing.Point(328, 376)
        Me.Button3.Name = "Button3"
        Me.Button3.TabIndex = 5
        Me.Button3.Text = "Stop"
        '
        'Label1
        '
        Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.Label1.ForeColor = System.Drawing.Color.Red
        Me.Label1.Location = New System.Drawing.Point(80, 224)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(328, 23)
        Me.Label1.TabIndex = 6
        Me.Label1.Text = "Enregistrement en cours ..."
        Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
        Me.Label1.Visible = False
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(492, 429)
        Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Label1, Me.Button3, Me.Button2, Me.Panel1, Me.ComboBox2, Me.Button1, Me.ComboBox1})
        Me.Name = "Form1"
        Me.Text = "Choisir la caméra"
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim j As Short
        Dim f As Filter

        'listage des peripheriques video installés sur la machine
        ComboBox1.Items.Clear()
        For j = 0 To Dispositivos.VideoInputDevices.Count - 1
            f = Dispositivos.VideoInputDevices(j)
            ComboBox1.Items.Add(f.Name)
        Next
        If j > 0 Then ComboBox1.SelectedIndex = 0

        'listage des peripheriques audio installés sur la machine
        ComboBox2.Items.Clear()
        For j = 0 To Dispositivos.AudioInputDevices.Count - 1
            f = Dispositivos.AudioInputDevices(j)
            ComboBox2.Items.Add(f.Name)
        Next
        If j > 0 Then ComboBox2.SelectedIndex = 0

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        'pre configuration du capturing
        'definission de la camera
        CaptureInformation.Camera = Dispositivos.VideoInputDevices(ComboBox1.SelectedIndex)
        'mise en place du stream video et audio
        CaptureInformation.CaptureInfo = New Capture(CaptureInformation.Camera, Dispositivos.AudioInputDevices(ComboBox2.SelectedIndex))
        'renseignement du panneau d'affichage de la video
        CaptureInformation.CaptureInfo.PreviewWindow = Panel1
        'compteur pour les capture d'image (frame video)
        CaptureInformation.Counter = 1
        CaptureInformation.CounterFrames = 1
        'configurations avancées
        Configurer()
        'pour faire plus joli
        Button1.Enabled = False
        Panel1.Visible = True

    End Sub

    Private Sub Configurer()

        'configurations avancées
        'configuration du systeme de compression video et audio
        CaptureInformation.CaptureInfo.VideoCompressor = Dispositivos.VideoCompressors(0) 'compression video
        'taille de la video
        CaptureInformation.CaptureInfo.FrameSize = New Size(320, 240) 'taille de la video
        'FPS de la video
        CaptureInformation.CaptureInfo.FrameRate = 15 'FPS
        'fichier .avi
        CaptureInformation.CaptureInfo.Filename = Application.StartupPath + "\\essai.avi"
        'lancement du streaming d'affichage
        CaptureInformation.CaptureInfo.RenderPreview()

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        'demarage du streaming avec enregistrement dans le .avi
        CaptureInformation.CaptureInfo.Start()
        'pour faire plus joli
        Button2.Enabled = False
        Button3.Enabled = True
        Panel1.Visible = False
        Label1.Visible = True

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        'arret du streaming
        CaptureInformation.CaptureInfo.Stop()
        'relancement de la configuration et de laffichage video
        Configurer()
        'encore pour faire plus jolie
        Panel1.Visible = True
        Button2.Enabled = True
        Button3.Enabled = False
        Panel1.Visible = True
        Label1.Visible = False

    End Sub
End Class

Conclusion :


Zip In The Mix

PS: pour plus de detail sur le fonctionnement, ou pour voir comment lancer la configuration de la camera allez voir sur The Code Project

PS2: EDITEZ LA SOURCE AVANT DE LA LANCER POUR LA CONFIGURER

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
11
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
5 octobre 2010

Peut on envoyer la source Sound aillers que dans un fichier,directement a l ecoute
Messages postés
142
Date d'inscription
mardi 24 avril 2007
Statut
Membre
Dernière intervention
6 avril 2012

bonjour,
est ce que possible de capturer la sortie de son, c'est a dire d'enregistrer le son de la sortie et de l'entré?
Messages postés
6
Date d'inscription
jeudi 12 janvier 2012
Statut
Membre
Dernière intervention
12 janvier 2012

merci pour ce très bon code , mais je veux savoir s'il est possible qu'il fonctionne à distance (réseau locale )
Messages postés
62
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
29 juin 2008

Cette source a l'air très interessante (si on connaît DirectX). Connaissez-vous un site pour apprendre à débuter en vb 2005 et DirectX (enfin plustôt DirectX appliqué au vb 2005 parceque vb ça va correctement:-). Mon ami Google fait des siennes.
Messages postés
112
Date d'inscription
vendredi 27 octobre 2000
Statut
Membre
Dernière intervention
26 janvier 2011
1
salut, je viens de trouver ce code qui marche très bien.
cela dis, il me semble qu'il y à des truc qui traine à gauche et à droite et qui ne sont pas super clair (c'est mon avis...)
perso... je ne suis pas très vb (je préfère le c... et surtout le c#).
donc voila, plutôt que de mettre une sorte de structure qui contient des données et qui embrouille tout, pourquoi ne pas tout mettre dans un seul code ?
ça serais pus simple ;-)
sinon un grand merci quand même :-) et bravo pour la recherche. dommage qu'on ne sais récupérer directement une image..

en résumé et en c#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.IO;
/*
* pour ajouter une dll au projet:
* projet>ajouter une reference... et aller dans parcourir
*/
using DirectX.Capture;//une dll
using DShowNET;//une dll
namespace webcam
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Filters dispositif = new Filters();
Capture capture;

private void Form1_Load(object sender, EventArgs e)
{
comboBoxWebCam.Items.Clear();
foreach (Filter videoDevice in dispositif.VideoInputDevices)
{
comboBoxWebCam.Items.Add(videoDevice.Name);
}
if (comboBoxWebCam.Items.Count > 0) comboBoxWebCam.SelectedIndex = 0;
}

private void buttonStart_Click(object sender, EventArgs e)
{
try
{
capture = new Capture(dispositif.VideoInputDevices[comboBoxWebCam.SelectedIndex], null);//null car je m'en fous du son...
capture.PreviewWindow = panelRendu;
capture.VideoCompressor = dispositif.VideoCompressors[0];
//capture.FrameSize = new Size(320, 240);
capture.FrameRate = 15;
capture.Filename = Application.StartupPath + "\\essai.avi";
capture.RenderPreview();
}
catch (Exception err)
{
MessageBox.Show(err.Message, err.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
Afficher les 23 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.