XDL Manual

XDL VideoView 활용 첫번째

(piXoneer XDL Tutorial)

 

 

 

 

 

 

이 문서는 XDL Development Library

 설치 및 사용하기 위한 문서입니다.

 

2017. 01.

 

 

목차

XDL VideoView 활용 첫번째... 1

1    사용하기... 3

1.1    NXVideoView 이용한 프로그램 만들기... 3

1.2    Driver복사하기... 4

1.3    메뉴 생성하기... 5

1.4    NXVideoView컨트롤 올리기... 6

1.5    동영상 열기 기능... 6

 

 

 

 

1     사용하기

 

1.1    NXVideoView를 이용한 예제 프로그램 만들기

1.1.1     Visual Studio 2010을 실행한다.

1.1.2     메뉴 [파일]-[새로 만들기]-[프로젝트]를 선택한다.

1.1.3     [새 프로젝트] 대화상자에서 왼쪽의 템플릿 창에서 “Visual C#”을 선택하고, 대화상자 중간의 목록에서 “Windows Forms 응용 프로그램을 선택한다. 프로젝트의 이름(XDL_VideoView1)을 입력하고 [새 프로젝트] 대화상자의 확인버튼을 클릭한다.

1.1.4     [도구상자][항목선택]을 선택한다.

[도구 상자] 창의 일반에서 마우스 오른쪽 버튼을 클릭하여 생성되는 팝업메뉴에서 항목 선택메뉴를 선택한다.

 

메뉴를 선택하면 아래와 같이 [도구 상자 항목 선택] 대화상자가 나타나며, 대화상자 아래쪽에 있는 찾아보기버튼을 클릭한다.

 

열기 대화상자에서 “C:\Pixoneer\XDL1.2\bin\NXVideo.dll” 파일을 선택한 후 열기를 클릭하고, [도구 상자 항목 선택] 대화상자의 확인버튼을 클릭한다.

.Net Framework 구성요소 탭에 다양한 레이어와 NXVideoView가 설정된다. “확인”버튼을 클릭한다.

 

 [도구상자] 에 다양한 MapLayer들과 NXMapView가 추가됨을 확인한다.

1.1.1     솔루션 탐색기의 프로젝트 하부의 [참조]의 오른쪽 마우스 클릭을 통해 [참조추가]를 선택한다.

1.1.2 [찾아보기]탭으로 이동한 후 “C:\Pixoneer\XDL1.2\bin\”경로로 이동한다. Ctrl키를 누른채 “NXDL.dll, “NXVideo.dll”을 선택한 후 “확인”버튼을 선택한다.

 

1.1.3 솔루션 탐색기의 프로젝트 하부의 [참조]항에 NXDL이 추가되었음을 확인한다.

 

1.2    Driver복사하기

Driver는 현재 데모 버전에서는 설치된 경로로부터 실행 경로 하부로 손으로 복사하여 넣어야 한다. 차기 버전에는 복사를 하지 않아도 실행될 수 있도록 구성된다.

 

1.2.1     XDL 라이브러리가 설치된 경로(C:\Pixoneer\XDL1.2\bin)로 이동한다.

1.2.2     VDDrivers폴더를 통째로 복사하여 현재 프로 젝트의 “…..\XDL_VideoView1\bin\Debug”폴더 하부에 복사하여 넣는다.

1.2.3     F5키를 눌러 프로그램을 실행하면 다음과 같이 구성된다.

1.3    메뉴 생성하기

1.3.1      [도구상자]  MenuStrip을 선택하고 Form1의 상단부에 드래그하여 위치시킨다.

 

1.3.2      메뉴에 File – Open을 입력하여 생성한다.

1.3.3      메뉴에 Tool – Open, Pause, Stop, Resume을 입력하여 생성한다.

 

1.4    NXVideoView컨트롤 올리기

1.4.1     [도구상자]-[일반]에서 NXVideoView를 드래그하여 Form1에 올려 놓는다. NXVideoView컨트롤의 [부모컨테이너에서 도킹]버튼을 눌러 도킹시킨다

 

1.4.2     [F5]키를 눌러 프로그램을 실행한다. 아래와 같이 NXVideoView컨트롤이 존재하는 프로그램이 실행된다.

1.4.3      프로그램을 종료한다.

 

1.5    동영상 열기 기능

1.5.1     디자인창에서 Toolbar[File]-[Open]을 더블클릭하여 함수를 자동 생성한다.

 

private void openToolStripMenuItem_Click(object sender, EventArgs e)
{

}

 

1.5.2     NXVideo객체들을 사용하기 위해서 다음과 같이 NXVideo 네임스페이스를 추가한다.

using Pixoneer.NXDL.NXVideo;

 

1.5.3     NXVideoView구현시 필요한 XVideoIO, XVideo, XVideoChannel객체를 선언한다.

XVideoIO m_VideoIO; // Video입출력에 관한 객체를 생성. XVideoIO객체는 XVideo객체를 생성한다.
XVideo m_Video; // XVideo객체는 실질적으로 비디오 스트리밍을 받아서 처리하는 객체이다. 
XVideoChannel m_channel;  // XVideoChannel은 보통 1개의 파일에는 1개의 스트리밍이 존재하지만, MPEG2TS와 같이 MultiChannel을 지원하는것도 존재한다.
// 결국 XVideoChannel이 스트리밍에 대한 파싱 및 도시를 위한 비디오 Frame 데이터 관리를 수행한다.

 

1.5.4     Form1생성자에서 XVideoIO의 객체 생성을 수행한다.

public Form1()
{
InitializeComponent();
m_VideoIO = new XVideoIO(); // VideoIO를 생성
}

 

1.5.5     File열기 버튼을 눌렀을 때 생성될 Open 대화상자와 선택된 파일에 대한 XVideo객체를 생성한다. 또한, XVideo객체에 실제 스트리밍을 담당하는 XVideoChannel객체를 활성화(Activate) 시켜 Frame을 내부적으로 생성하도록 지시한다.

 

private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
    // 파일 Open을 수행한다.
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.Filter = "TS file(*.ts)|*.ts||";
    openFileDialog.RestoreDirectory = true;

    if (openFileDialog.ShowDialog() != DialogResult.OK) return;

    // XVideoIO객체로터 XVideo객체를 생성한다.
    string strError = null;
    m_Video = m_VideoIO.OpenFile(openFileDialog.FileName, "XFFMPDRIVER", out strError);

    if (m_Video == null)
    {
        MessageBox.Show(strError);
        return;
    }

    // XVideoView객체에 XVideo객체와 Multi Channel인 경우를 고려하여 XVideo객체 안의 Channel에 대한 인덱스를 설정한다. 
    int nIdxChannel = 0;
    nxVideoView1.SetVideoChannel(m_Video, nIdxChannel);


    // XVideo객체로부터 특정 인덱스에 해당하는 Channel을 꺼낸다.
    m_channel = m_Video.GetChannel(nIdxChannel);

    if (m_channel == null)
    {
        MessageBox.Show("Channel is not valid");
    }

    // Channel을 활성화 시키고 Play시킨다.
    m_channel.Activate();

}

1.5.6     메뉴에서 Play, Pause, Resume, Stop버튼을 통해 자동으로 함수를 생성한다.

private void playToolStripMenuItem_Click(object sender, EventArgs e)
{
    m_channel.Play();
}

private void pauseToolStripMenuItem_Click(object sender, EventArgs e)
{
    m_channel.Pause();
}

private void resumeToolStripMenuItem_Click(object sender, EventArgs e)
{
    m_channel.Resume();
}

private void stopToolStripMenuItem_Click(object sender, EventArgs e)
{
    m_channel.Stop();
}

 

1.5.7     종료시에 XVideo객체와 XVideoView와 관계를 끊기 위해서 Form1의 속성에서 FormClose를 위한 함수를 자동 생성한다.

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    // Video 종료시에 XVideoView와 XVideo와의 관계를 정리한다.
    nxVideoView1.ResetVideoChannel();
    if (m_Video != null)
        m_Video.Close();
}

1.5.8     [F5]키를 눌러 프로그램을 실행한다. [File]-[Open]메뉴를 눌러 football.ts파일을 연다. [Tool]-[Play], [Tool]-[Pause], [Tool]-[Resume], [Tool]-[Stop]을 눌러 기능을 확인한다.