Microsoft MVP성태의 닷넷 이야기
directShow RenderFile 관련 재질문드립니다 [링크 복사], [링크+제목 복사],
조회: 11562
글쓴 사람
정도현 (7hvrches at naver.com)
홈페이지
첨부 파일

//새로운 필터그래프 대응
            pGraphBuilder = (IGraphBuilder)new FilterGraph();
            //필터그래프에 콘트롤 붙이기
            pMediaControl = (IMediaControl)pGraphBuilder;
            
            //윈도우 붙이기
            pVideoWindow = (IVideoWindow)pGraphBuilder;

            //콘트롤에 동영상 읽어오기
            pMediaControl.RenderFile(filename);

            //판넬에서 재생하기
            pVideoWindow.put_Owner(hWin.Handle);
            pVideoWindow.put_WindowStyle(WindowStyle.Child | WindowStyle.ClipSiblings);
            Rectangle rect = panel1.ClientRectangle;
            pVideoWindow.SetWindowPosition(0, 0, rect.Right, rect.Bottom);

위 내용을 클릭 이벤트에 붙여서 프로젝트를 생성해 최초 버튼 한번 클릭시엔 패널에 영상이 정상 출력 되지만 버튼을 두번(연속으로 누르든 시간 텀 줘서 누르든) 누르면 그때부턴 프로그램을 다시 실행해도 버튼을 두번 클릭해야 합니다 다른 사람들의 예제들도 시도를 해봤으나 동일한 결과입니다.








[최초 등록일: ]
[최종 수정일: 1/8/2021]


비밀번호

댓글 작성자
 



2021-01-08 08시08분
처음엔 이게 무슨 말장난같은 질문인가 싶었는데, ^^; 실제로 버튼 2번 눌러 재생하고 나서는 이후로 계속 그런 현상이 발생하는군요. x64로 빌드했다가 그런 현상이 발생해서 x86으로 빌드해봤는데 한 번에 영상이 재생되었고, 그 상태에서도 2번 눌러 재생하면 이후로 다시 2번 눌러야 재생(즉, RenderFile을 두 번 호출)하는 현상이 나옵니다.

그런데, C++로 해당 코드를 작성해도 동일하게 문제가 발생하는 걸로 봐서 닷넷 및 DirectShowLib 문제는 아닌 듯합니다. 게다가 더욱 당황스러운 것은, 재부팅하고 나서도 여전히 ^^; 그 현상이 나옵니다. 따라서 저도 이에 대한 해법을 어떻게 찾을 수가 없군요. ^^;

단지, Graph Editor(graphedt.exe)로 재생한 경우에는 정상적으로 한 번에 재생이 됩니다. 그래서 한 번 시도해 볼만한 것은, 자동으로 Input/Output 필터를 설정하는 방식 말고 직접 수작업으로 Filter graph를 구성해 재생하면 그런 현상이 없어질 듯합니다. 혹시나 그렇게 해보시면 결과 좀 알려주세요.
정성태
2021-01-09 09시42분
좀 더 테스트를 해보면, Hyper-V VPC에서는 정상적으로 작동하고, 제가 가진 Surface Pro 6에서도 정상 동작합니다. (모두 Windows 10에서 테스트한 것입니다.)

뭔가, DirectShow의 문제라기보다는 어떤 환경적인 면에서 오는 것 같은데 그 공통점을 먼저 발견하는 것이 좋겠습니다. 문제가 정말 애매하네요. ^^;
정성태
2021-01-11 10시22분
[정도현] 안녕하세요 작성자입니다
알아보니 메모리 해제 관련 문제가 있었던 것 같습니다
아직 전문 지식이 없는지라 자세히 설명은 못 드리겠으나 Marshal.ReleaseComObject로 해당 그래프나 컨트롤들을 전부 해제 작업을 해주시면 정상작동합니다.

본 사이트 강의에서는 버튼 같은 컨트롤로 입력을 받지 않아 문제는 없으나 버튼 처리를 하면 문제가 생기더군요
 private void play_Click(object sender, EventArgs e)
        {
            OnClosed(); // 그래프 해제
            OnStart(); // 재생
        }

대충 요런 느낌으로 처리를 하면 잘 될겁니다.
근데 따로 궁금한 것이 있는데 위에는 메모리 해제라고 작성을 했지만 컴퓨터를 부팅하면 다 초기화될텐데 그럼 메모리는 아닐려나요??
ReleaseComObject() 메서드는 "지정된 COM 개체와 연결된(지정된) RCW의 참조 횟수를 감소시킨다." 라고 설명이 되어 있는데 메모리를 뜻 하는건지 아니면 다른 뭔가 있는건지 궁금합니다..
[guest]
2021-01-11 11시06분
어쨌든 문제가 사라졌다니 다행입니다. 근데, 제 PC에서는 여전히 그와 상관없이 두 번 클릭해야 재생이 됩니다. 재미있군요. ^^

참고로, ReleaseComObject로 해결될 문제였다면 애당초 프로세스 종료 시에 자원 해제가 모두 되므로 그다음 실행 시 한 번 클릭으로 재생이 되었어야 합니다. 단지, out-of-process로 무언가 비디오 재생에 관련된 별도 프로세스가 있다면 그렇게 안 될 수도 있는데 그렇다고 해도 일정 시간 연결이 끊겼으면 마찬가지로 자원 해제 등의 절차를 밟는 것이 일반적이기 때문에... 암튼 설명이 안 되는 현상이군요.

ReleaseComObject는 사실 약속에 불과합니다. 일반적으로는 참조 횟수가 0일 때 (inproc이든 out-of-proc이든 상관없이) COM Server 측에서 자원 해제를 하는 것이 정상이지만, 그건 구현하는 측 나름이니까 언제나 100%라고 볼 수는 없습니다. (그렇긴 해도 마이크로소프트가 만든 거라면 (버그가 아니었을 때) 100% 해제될 것입니다.)
정성태
2021-01-11 02시10분
[정도현] 그렇군요! 상세한 설명 감사합니다~
[guest]

... 61  62  63  64  65  66  67  68  69  70  71  72  73  74  [75]  ...
NoWriterDateCnt.TitleFile(s)
674황태욱7/5/200716526utf-8 환경에서 파라미터 값에 한글이 있을 경우 깨지는 현상이.. [1]
672땡초7/4/200715789Remoting 객체를 호출하는 순간 Timer 의 Elapsed 이벤트가 멈추는 현상 [2]
670조성택7/3/200715149.Net에서 Timer클래스.. [1]
667홍석헌6/29/200714419[c#] 윈도우 활성화에 관한 질문
669정성태6/30/200714724    답변글 [답변]: [c#] 윈도우 활성화에 관한 질문
666오야6/25/200713426System.Transactions 에서 트랜잭션 실패를 체크하는 방법 [1]
665김성태6/20/200713114안녕하세요^^
668정성태6/30/200714370    답변글 [답변]: 안녕하세요^^
663모름이6/19/200712726Microsoft.Framework 에서 OLE DB 사용하려면.. [1]
664모름이6/20/200713662    답변글 [추가질문]: 다른 OLE DB 를 사용하려면..
662조성택6/13/200714277C#에서 string클래스.. [1]
660신동열6/11/200715479ClickOnce 업데이트시 이전 버젼 제거오류 [1]
659한귀순6/11/200716752윈폼 프로그램 및 디자인. [2]
661한귀순6/12/200714238    답변글 [추가질문]: 윈폼 프로그램 및 디자인. [3]
657정해봉6/8/200725002요청 시간 초과 오류 [2]
655이방은5/28/200715249성태님 UML 도구 뭐 쓰십니까??? [1]
654임정훈5/23/200714126카드스페이스 관련질문
658정성태6/9/200714830    답변글 [답변]: 카드스페이스 관련질문 [1]
653사다수스5/22/200735695아래한글(HwpCtrl) ocx 메모리 릭 문제입니다. [4]파일 다운로드1
645송원석5/15/200717014ASP 의 ByVal 과 ByRef 특성
646정성태5/15/200716731    답변글 [답변]: ASP 의 ByVal 과 ByRef 특성
647송원석5/16/200717137        답변글 [답변]: [답변]: ASP 의 ByVal 과 ByRef 특성 [1]
648정성태5/16/200715907            답변글 [답변]: [답변]: [답변]: ASP의 ByVal과 ByRef 특성 [1]
649장윤태5/16/200714964                답변글 [답변]: [답변]: [답변]: [답변]: ASP 의 ByVal 과 ByRef 특성
650정성태5/16/200713105                    답변글 [답변]: [답변]: [답변]: [답변]: [답변]: ASP의 ByVal과 ByRef 특성 [2]
643해운대끓...5/15/200712551Singleton 패턴 테스트중 하나의 윈폼만 열기 오류파일 다운로드1
... 61  62  63  64  65  66  67  68  69  70  71  72  73  74  [75]  ...