성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>C# - AForge.NET을 이용한 MP4 동영상 파일 재생</h1> <p> AForge.NET에는 Video 파일 처리와 관련해 2개의 라이브러리가 있습니다.<br /> <br /> <ul> <li>AForge.Video.DirectShow</li> <li>AForge.Video.FFMPEG</li> </ul> <br /> <a target='tab' href='http://bluene.net/blog/542'>DirectShow를 이용한 경우, AVI 파일과 같은 것만 재생</a>할 수 있을 뿐 MP4 등의 파일을 재생하려고 하면 "Did not find acceptable output video pin in the given source AForge.NET"와 같은 예외가 발생합니다.<br /> <br /> 예상할 수 있듯이 MP4 파일 등의 재생은 AForge.Video.FFMPEG로 해야 합니다. 이 때문에 의존성이 좀 복잡해지는데요. 우선 기본적인 것은 NuGet으로 해결하고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Install-Package AForge.Controls </pre> <br /> AForge.Video.FFMPEG.dll은 "AForge.NET Framework"을 내려받아 그 안에서 구해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > AForge.NET Framework is 2.2.5. ; <a target='tab' href='http://www.aforgenet.com/framework/downloads.html'>http://www.aforgenet.com/framework/downloads.html</a> </pre> <br /> (2.2.5 버전에 포함된 AForge.Video.FFMPEG 프로젝트는 예전 버전의 ffmpeg 라이브러리에 의존합니다. 만약 이를 바꾸고 싶다면 "<a target='tab' href='http://www.sysnet.pe.kr/2/0/11087'>AForge.Video.FFMPEG를 최신 버전의 ffmpeg 파일로 의존성을 변경하는 방법</a>"을 참고하세요.)<br /> <br /> 이렇게 참조를 해결하면 이제 나머지 작업은 <a target='tab' href='http://www.sysnet.pe.kr/2/0/11085'>지난번</a>과 마찬가지로 어렵지 않습니다. <br /> <br /> 이번엔 PictureBox 대신 AForge.Controls에서 제공하는 AForge.Controls.VideoSourcePlayer 컨트롤을 WinForm 위에 올리고, 다음과 같이 mp4 비디오 파일 경로를 VideFileSource에 제공하는 것으로 동영상 재생을 할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > VideoFileSource _videoFile; private void button1_Click(object sender, EventArgs e) { if (this.button1.Text == "Start") { string filePath = @"F:\frozen\IdinaMenzel.mp4"; <span style='color: blue; font-weight: bold'>_videoFile = new VideoFileSource(filePath);</span> <span style='color: blue; font-weight: bold'>this.videoSourcePlayer1.VideoSource = _videoFile;</span> this.videoSourcePlayer1.Start(); this.button1.Text = "Stop"; } else { this.button1.Text = "Start"; _videoFile.Stop(); } } </pre> <br /> 아래는 실행 화면을 보여줍니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='video_file_aforge_1.png' src='/SysWebRes/bbs/video_file_aforge_1.png' /><br /> <br /> (<a target='tab' href='https://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?fid=1074&boardid=331301885'>첨부 파일은 이 글의 예제를 포함</a>합니다.)<br /> <br /> <hr style='width: 50%' /><br /> <br /> 유의할 것은, AForge.Video.FFMPEG 라이브러리는 오로지 "영상"만을 재생할 뿐 음성 데이터는 처리하지 않습니다. (즉, 소리가 들리지 않습니다.) AForge 2.2.5 라이브러리 당시 AForge.Video.FFMPEG에서는 음성 처리에 대한 지원을 추가할 생각이 없다고 분명히 밝혔기 때문에 향후로도 그럴 가능성은 별로 없어 보입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // AForge.Video.FFMPEG Namespace // <a target='tab' href='http://www.aforgenet.com/framework/docs/html/e478f635-9b18-278b-8378-99e5531b3007.htm'>http://www.aforgenet.com/framework/docs/html/e478f635-9b18-278b-8378-99e5531b3007.htm</a> Note: the API allows writing and reading video data only. Reading and writing of sound data is not supported and is not planned for now. </pre> <br /> <hr style='width: 50%' /> <br /> 만약 아래와 같은 오류가 발생한다면?<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > System.IO.FileNotFoundException was unhandled FileName=AForge.Video.FFMPEG.dll FusionLog="" HResult=-2147024770 Message=Could not load file or assembly 'AForge.Video.FFMPEG.dll' or one of its dependencies. The specified module could not be found. Source=WindowsFormsApplication1 StackTrace: at WindowsFormsApplication1.Form1.Form1_Load(Object sender, EventArgs e) at System.Windows.Forms.Form.OnLoad(EveArgs e) at System.Windows.Forms.Form.OnCreateControl() at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) at System.Windows.Forms.Control.CreateControl() at System.Windows.Forms.Control.WmShowWindow(Message& m) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ScrollableControl.WndProc(Message& m) at System.Windows.Forms.Form.WmShowWindow(Message& m) at System.Windows.Forms.Form.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) InnerException: </pre> <br /> 에러 메시지처럼 EXE 파일이 있는 폴더에 AForge.Video.FFMPEG.dll 파일이 없기 때문일 수도 있지만, FFMPEG 관련 라이브러리가 없는 경우일 수도 있습니다. 실제로 AForge.Video.FFMPEG.dll 파일은 avformat-??.dll, avcodec-??.dll, avutil-??.dll, swscale-?.dll에 대한 직접적인 의존성을 가지고 있습니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1856
(왼쪽의 숫자를 입력해야 합니다.)