ããã«ã¡ã¯ãHabrausersæ§ã å°ãåã«ãããŸããŸãªããã€ã¹ãããªãŒãã£ãªãšãããªãçæããããã«å¿
èŠãªåçŽãªWindowsã¢ããªã±ãŒã·ã§ã³ã§äœæ¥ããå¿
èŠããããŸããã ç¹ã«ãMAudioã«ãŒãã®6ã€ã®ãã£ã³ãã«ãããªãŒãã£ãªããã£ããã£ããã³ã³ããŒãã³ãå
¥åãä»ããŠãããªã«ã¡ã©ããã®ä¿¡å·ã§ãã2ã€ã®AverMediaãã£ããã£ã«ãŒãããhdãããªããã£ããã£ããå¿
èŠããããŸããã ãŸããUSBã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠæ¥ç¶ãããããã¥ã¡ã³ãã«ã¡ã©ããã¹ã¯ãªãŒã³ã·ã§ãããæ®ãå¿
èŠããããŸããã ã¢ããªã±ãŒã·ã§ã³ã¯CïŒã§èšè¿°ããããšã«æ±ºå®ãããããªã¯DirectShow.NETã©ã€ãã©ãªã䜿çšããŠå¶äœãããŸããã
ãã®åé¡ã®è§£æ±ºã«åºã¥ããŠããããªãã£ããã£ã«é¢ããèšäºãæžããçµéšãå
±æãããšããã¢ã€ãã¢ãçãŸããŸããã ãã®æ
å ±ã¯èª°ãã«åœ¹ç«ã€ãããããŸããã 誰ãæ°ã«ãã-ç§ã¯ç«ããé¡ãããŸãã
åºæã®ä»£ããã«ã
MediaFoundationã¯ãã®ãããªã¿ã¹ã¯ãå®è¡ããããã«ãŸããŸã䜿çšãããŠããŸããããã®ãã©ãããã©ãŒã ã¯ãMicrosoftã8æ¥ããæ°ããããŒãžã§ã³ã®Windowsã§DirectShowã®äœ¿çšãšãµããŒããåŸã
ã«æŸæ£ãããšããäºå®ãèæ
®ããŠãããŸã åºãæ®åããŠããŸããã OpenCVãAForgeãªã©ããããªé²ç»ããµããŒãããããŸããŸãªã³ã³ãã¥ãŒã¿ãŒããžã§ã³ã©ã€ãã©ãªããããŸãããåçŽãªãããªãã£ããã£ã§ã¯ã匷åãªåŠçæ©èœã¯ããã»ã©å¿
èŠã§ã¯ãªãããã®ãããªã©ã€ãã©ãªå
ã§ã¯å€ãã®å ŽåDirectShowã䜿çšã§ããŸãã
ã€ã³ã¿ãŒãããã«
ã¯DirectShowã®æŠèŠãšãã®ä»çµã¿ã«ã€ããŠã®èšäºãè³æãããªãããã
ãã®èšäºã®æ
å ±ã¯Habréã«
æ²èŒãããŠããŸããããã®ãããç§èªèº«ãç¥ããªãçšèªãèªç€ºããªãããã«ããŸãããããŸã§Directshowã«æ
£ããŠããªã人ãCïŒã§ãããªé²ç»ã¢ããªã±ãŒã·ã§ã³ãäœæããæ¹æ³ãéå§ããå Žæãšç§»åããå Žæãããã³çŽé¢ããªããã°ãªããªãåé¡ã«ã€ããŠè©±ãæ¹æ³ã
ãã®èšäºã®äŸïŒ
GitHubã®ã³ãŒããåç
§ ïŒã§ã¯ãåçŽãªusbãã£ããã£ã«ãŒãEasyCapã䜿çšããŸãã

1.ã©ãããå§ãããã èŠä»¶ãããŒã«ãããã³æ
å ±
å¿
èŠãªããŒã«ã¯æ¬¡ã®ãšããã§ãã
1ïŒ
K-Lite Codec Pack Megaããã³GraphStudioããŒã«-ãããªãã£ããã£ã°ã©ãã®ã©ããããããã¿ã€ãã³ã°çšã

2ïŒ
GraphEditPlus -GraphStudioã®åçšã¢ããã°ã§ãã³ãŒããçæã§ããŸãã C ++ããã³CïŒã§èšèšãããã°ã©ãã 30æ¥éã®è©Šçšçãå©çšã§ããŸããããã®å¶éã¯ãçæãããã³ãŒããã¯ãªããããŒãã«ã³ããŒã§ããªãããšã§ãã
3ïŒCïŒéçºç°å¢-ç§ã®å Žåã¯Visual Studio 12ã§ãã
4ïŒ
DirectShow.netã©ã€ãã©ãªã
5ïŒ
Windows MediaLibã©ã€ãã©ãªã
æ®å¿µãªãããã€ã³ã¿ãŒãããäžã§ãããªé²ç»ã¢ããªã±ãŒã·ã§ã³ãäœæããæ¹æ³ã«é¢ããå®å
šã§æ§é åãããã¬ã€ããèŠã€ããããšã¯ã§ããŸããã§ããããããã€ãã®ããŒãžã¯ãŸã第äžã«ãéåžžã«è²Žéãªãã«ããæäŸããŸããã
1ïŒæ
å ±ãããã»ã¹å
šäœã®è§Šåªãšãªã£ãŠãã
å°ããªããŒãž ã ãŸããDirectShow.netã®ã¯ã©ã¹ãšã€ã³ã¿ãŒãã§ã€ã¹ã®æ確ãªèª¬æãèŠã€ããããšãã§ããŸãã éåžžã«äŸ¿å©ãªããŒãžã§ãããèè
ã«æè¬ããŸãã
2ïŒ
ãã®ãããªãªãŒãã³ãœãŒã¹ã³ãŒãã¯ãã¯ãã¹ããŒããã®ä»ã®åé¡ã«å¯ŸåŠããã®ã«åœ¹ç«ã¡ãŸããã
3ïŒMSDNãDirectShowããã°ã©ãã³ã°å°çšã®
ã»ã¯ã·ã§ã³ããããŸãã
2.ãã£ã«ã¿ãŒããããªã°ã©ãäœæãããžã¥ã¢ã«ãšãã£ã¿ãŒ
DirectShowã°ã©ãã¯ãå
¥åãã³ãšåºåãã³ã«ãã£ãŠäºãã«æ¥ç¶ããããã£ã«ã¿ãŒããæ§ç¯ãããŸãã
ããã«ã€ããŠã®è©³çŽ°ã¯
ãã¡ãã§ãã
GraphStudioã®æãåçŽãªã±ãŒã¹ã§ã¯ãããšãã°ãçµ±åãããªã«ã¡ã©ã®ã°ã©ãã次ã®ããã«äœæã§ããŸãã

ãã ãããã®ã¿ã¹ã¯ã«ã¯ããã€ãã®ãã£ã«ã¿ãŒãå¿
èŠã§ãããçµæãšããŠïŒWMV圢åŒã®ãšã³ããªãèæ
®ããïŒã°ã©ãã¯æ¬¡ã®ããã«ãªããŸãã

ãã®ã°ã©ãã«ã¯ãã£ã«ã¿ãŒããããŸãïŒ
SMI Grabber Device ïŒãã£ã«ã¿ãŒã°ã«ãŒã-WDM Streaming Capture DevicesïŒ-ãã£ããã£ãŒããã€ã¹ã§ãããã£ã«ã¿ãŒããããããããªïŒããã³ãªãŒãã£ãªïŒã¹ããªãŒã ãåä¿¡ããŸãã ãã ãããã®å Žåããã£ããã£ããã€ã¹ããã®ãªãŒãã£ãªã¹ããªãŒã ã§ã¯ãªãããã€ã¯ããã®ã¹ããªãŒã ãèšé²ãããŸãïŒ[ãªãŒãã£ãªãã£ããã£ãœãŒã¹]ã°ã«ãŒãã®[
ãã€ã¯...]ããã£ã«ã¿ãŒããŸãïŒã
SM BDAã¯ãã¹ããŒãã£ã«ã¿ãŒã¯ããã£ããã£ããã€ã¹çšã®ã¯ãã¹ããŒãã£ã«ã¿ãŒã§ãããSVideoå
¥åãŸãã¯ã³ã³ããžããå
¥åã®ã©ã¡ãããã®å
¥åä¿¡å·ã®åãæ¿ãã決å®ããèšå®ã§ãã
Smart Tee -2ã€ã®åºåãæã€ã¹ããªãŒã ã¹ããªãã¿ãŒãCaptureåºåããã®ã¹ããªãŒã ããã¡ã€ã«ã«æžã蟌ãŸããŸãã
ãã¬ãã¥ãŒåºåããã®ã¹ããªãŒã ã¯ã
AVI Decompressorãã£ã«ã¿ãŒãä»ããŠãã¬ãã¥ãŒãŠã£ã³ããŠã«éãããŸãã ãã§ãŒã³ã
AVI Decompressor->
Video Rendererã¯ãPreview-> Render Pinãªãã·ã§ã³ãéžæãããšèªåçã«äœæãããŸãã
ïŒäœè«ã§ãããã¬ã³ãã©ãŒãã£ã«ã¿ãŒã«ã¯ããŸããŸãªçš®é¡ããããæãé«åºŠãªãã®ã®1ã€ã¯æ¡åŒµãããªã¬ã³ãã©ãŒã§ããããã®äŸã§ã¯ããã©ã«ãã§éåžžã®ãã£ã«ã¿ãŒã䜿çšãããŠããŸãïŒ
WM ASF Writerã¯ãå¿
èŠãªå質ã®ãããªãã¡ã€ã«ãWMV圢åŒã§èšé²ããããã®æãç°¡åãªãªãã·ã§ã³ãæäŸãããã£ã«ã¿ãŒã§ãã åæã«ããŠãŒã¶ãŒã®å質ãå«ããŠãèšé²å質ãå€æŽããããšãã§ããŸãã
ãã®ã°ã©ããå®è¡ãããšããããªãœãŒã¹ã¬ã³ãŒãã®æ£ç¢ºæ§ã確èªã§ããŸãã
3. DirectShow.netã©ã€ãã©ãªãšã°ã©ãã®ã³ãŒããžã®å€æ
3.1ã GraphEditPlusã§ã®ã³ãŒãçæ
次ã®ã¹ãããã¯ãçµæã®ã°ã©ããã³ãŒãã«å€æããããšã§ãã GraphEditPlusããŒã«ã¯ããã®åé¡ã«é¢ããŠéåžžã«è²Žéãªæ¯æŽãæäŸããŸãã äžè¬ã«ããã®ã°ã©ããšãã£ã¿ãŒã¯K-Liteãã³ãã«ã®GraphStudioããã䟿å©ã§ããããã®æãéèŠãªæ©èœã¯ãæ§ç¯ãããã°ã©ãããã³ãŒããçæããæ©èœã§ãã

æ®å¿µãªãã ããã®ããŒã«
㯠ãCrossbarãWM ASF Writerãªã©ã®ç¹å®ã®ãã£ã«ã¿ãŒã®ã»ããã¢ããã³ãŒããã«ã¹ã¿ãã€ãº
ã§ããŸããããæåã®ã¹ããããšããŠéåžžã«è²Žéã§ãã
3.2ã ãããªã¢ããªã±ãŒã·ã§ã³
ç¹°ãè¿ããŸããããã®èšäºã®ããã«ç¹å¥ã«æžãããç°¡åãªã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã¯ã
ããã§è¡šç€ºããã³ããŠã³ããŒãã§ã
ãŸã ããã¯åãªããã¹ãã±ãŒã¹ã§ããããããã®éæé©æ§ãšSOLIDéåã«ã€ããŠäºåã«è¬çœªããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã°ã©ãã®äž»ãªæäœïŒäœæãç Žæ£ããã³ã®æ€çŽ¢ãã¯ãã¹ããŒã«ãŒãã£ã³ã°ãéå§ãåæ¢ãªã©ïŒã¯æœè±¡
VideoCapturebaseã¯ã©ã¹ã§å®çŸ©ããã
VideoCapturePreview ã
VideoCaptureAsfRecordãŸãã¯
VideoCaptureScreenshotsãªã©ã®åŸç¶ã¯ã©ã¹ã¯
BuildGraph()
ãã£ã«ã¿ãŒããã°ã©ããæ§ç¯ããããã®æœè±¡ã¡ãœãããå®è£
ããŸã
BuildGraph()
ãã§ãŒã³ã«æ°ãããã£ã«ã¿ãŒãè¿œå ããŸãã
ControlVideoCommonã¯ã©ã¹ã«ã¯ããŠã£ã³ããŠãäœæããŠã°ã©ãããã€ã³ãããæäœãã°ã©ããåæ¢ããã³ç Žæ£ããæäœãããã³ãã®ä»ã®å®çšçãªæäœãå«ãŸããŠããŸãã
3.3ã å¿
ãããæãããªç¹ã§ã¯ãªã
3.3.1ã ããã€ã¹ãè¿œå ãã
åãã¿ã€ãã®ããã€ã¹ãè€æ°ããå ŽåïŒããšãã°ãè€æ°ã®åäžã®ãã£ããã£ã«ãŒãïŒã
ãã®åŸããããã¯åãGUIDãæã¡ãŸãããç°ãªãDisplayNameãã©ã¡ãŒã¿ãŒãæã¡ãŸãã ãã®å Žåã次ã®ã³ãŒãã䜿çšããŠãã¹ãŠã®ããã€ã¹ãèŠã€ããå¿
èŠããããŸãã
private readonly List<DsDevice> _captures = new List<DsDevice>();
ããã«ãã°ã©ããäœæãããšãããã®ã¡ãœããã§ååŸãã
devicePath1
ããã³
devicePath2
ã¯ãã§ã«äœ¿çšãããŠããŸãã
3.3.2ã ã¯ãã¹ããŒã«ãŒãã£ã³ã°
ãããªãã£ããã£ããã€ã¹ã«ã¯ãããŸããŸãªçš®é¡ã®ãããªå
¥åã䜿çšããããã®ã¯ãã¹ããŒãããå Žåãšãªãå ŽåããããŸãïŒããšãã°ããã®äŸã®AverMediaãšEasyCapã«ã¯ãããŸãããçµã¿èŸŒã¿ã®Webã«ã¡ã©ãŸãã¯BlackMagicãã£ããã£ã«ãŒãã«ã¯ãããŸããïŒã ãããã£ãŠãã¯ãã¹ããŒãžã®ãã€ã³ãã¯èªåã§ããå¿
èŠããããŸãã
ãã®ãããã¡ãœããã¯åºæ¬ã¯ã©ã¹ã§å®çŸ©ãããŸã
FixCrossbarRouting(ref IBaseFilter captureFilter, PhysicalConnectorType? physicalConnectorType)
ãã¯ãã¹ããŒïŒååšããå ŽåïŒãæ€çŽ¢ããŠæ¥ç¶ããå¿
èŠãªå
¥åã¿ã€ãã«åãæ¿ããŸãã
3.3.3ã ãªãœãŒã¹ã®ãªãªãŒã¹
äœæãããã°ã©ããç Žæ£ããããšãã«ãªãœãŒã¹ã解æŸããªãå Žåãæåã®ã€ã³ã¹ã¿ã³ã¹ãšåããã£ã«ã¿ãŒã䜿çšããŠã°ã©ãã®å¥ã®ã€ã³ã¹ã¿ã³ã¹ãäœæãããšå€±æããããã
DisposeFilters()
ã¡ãœãããåŒã³åºããŠããã£ã«ã¿ãŒãç Žæ£ãããã°ã©ãããåé€ããå¿
èŠããããŸãã ããã€ãã®å®éšã®åŸã次ã®ã³ãŒãã¯æ£åžžã«æ©èœããŸããã
if (Graph == null) return; IEnumFilters ef; var f = new IBaseFilter[1]; int hr = Graph.EnumFilters(out ef); if (hr == 0) { while (0 == ef.Next(1, f, IntPtr.Zero)) { Graph.RemoveFilter(f[0]); ef.Reset(); } } Graph = null;
3.3.4ã ã¹ããªãŒã æ§æïŒãã¬ãŒã ã¬ãŒãã解å床ãªã©ïŒ
ãããªãã£ããã£ããã€ã¹ã¯ãç°ãªããããªã¹ããªãŒã æ§æãçæã§ãããããã®éã§åãæ¿ããããšãã§ããŸãã ããšãã°ãhdã«ã¡ã©ã¯ãæ¯ç§60ãã¬ãŒã ã§640 x 480ã®ç»åãšãæ¯ç§30ãã¬ãŒã ã®ãã¬ãŒã ã¬ãŒãã§hdå質ã®ç»åã®äž¡æ¹ãçæã§ããŸãã ãã¬ãŒã ã¬ãŒãã®å Žåã29.97ãã¬ãŒã /ç§ã®ãããªå°æ°æ¡ããããŸãã ãã®ãããªãã©ã¡ãŒã¿ãŒãæ§æããã«ã¯ã
FindInterface
ã€ã³ã¿ãŒãã§ã€ã¹ã®
FindInterface
ã¡ãœããã䜿çšããŠ
streamConfigObject
ãªããžã§ã¯ããäœæãã
IAMStreamConfig
ã€ã³ã¿ãŒãã§ã€ã¹ã«ç§»åãã
GetFormat
ã¡ãœãããåŒã³åºããŠ
GetFormat
åã®ãªããžã§ã¯ããååŸããããããŒãååŸããå¿
èŠããããŸãã
var infoHeader = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader));
ãã®ãã©ã¡ãŒã¿ãŒã§æäœãå®è¡ãç¶ãã
AvgTimePerFrame,
BmiHeader.Width,
BmiHeader.Height
ãã®ä»ã
ããã¯ã
VideoCaptureAsfRecord
ã¯ã©ã¹ã®
ConfigureResolution
ããã³
ConfigureFramerate
ã¡ãœããã®ã³ãŒãã§ç¢ºèªã§ããŸãã
3.3.5ã ã¹ã¯ãªãŒã³ã·ã§ãã
ãããªã¹ããªãŒã ããã¹ã¯ãªãŒã³ã·ã§ãããååŸããã«ã¯ãã°ã©ãïŒVideoCaptureScreenshotsïŒã
ISampleGrabberCB
ããæ§ç¯ãããã¯ã©ã¹ãç¶æ¿ãã2ã€ã®ã¡ãœãã
BufferCB
ãš
SampleCB
ãåå®çŸ©ãã
BufferCB
ãã
SampleCB
ã
SampleCB
ã¯ç©ºã®å Žåãããã
BufferCB
çµæã®é
å
BufferCB
ã³ããŒããŸãã
if ((pBuffer != IntPtr.Zero) && (bufferLen > 1000) && (bufferLen <= _savedArray.Length)) { Marshal.Copy(pBuffer, _savedArray, 0, bufferLen); }
ãã³ãã©ãŒãåŒã³åºãã ãã§ãªãïŒ
_invokerControl.BeginInvoke(new CaptureDone(OnCaptureDone))
ã¡ãœãããåŒã³åºãå Žæ
SetCallback
SamlpleGrabber
'a
_iSampleGrabber.SetCallback(null, 0);
BuildGraph
ã¡ãœããã§ã¯ããã§ãŒã³å
ã®
SampleGrabber
ãã£ã«ã¿ãŒããªã³ã«ãã
BuildGraph
ããããæ§æããä»ã®ãã£ã«ã¿ãŒãè¿œå ããåŸã«ãã¥ãŒãã³ã°ãè¡ãå¿
èŠããããŸãïŒéæ³ã§ããããã以å€ã§ã¯æ©èœããŸããïŒã ãã¹ãã±ãŒã¹ã§ã¯ã
ConfigureSampleGrabberInitial()
ããã³
ConfigureSampleGrabberFinal()
ã¡ãœããããããæ
åœããŸãã åæã»ããã¢ããäžã«
AMMEdiaType
ã決å®ãããæçµã»ããã¢ããäžã«
VideoInfoHeader
ãã€ã³ã¹ããŒã«ãã2ã€ã®
ISampleGrabber
ã¡ãœãããåŒã³åºãïŒ
SetBufferSamples(false)
ããã³
SetOneShot(false)
ã
æåã¯ãã£ã«ã¿ãŒãééãããµã³ãã«ã®ãããã¡ãªã³ã°ãç¡å¹ã«ããããã«å¿
èŠã§ããã2çªç®ã¯ã¹ã¯ãªãŒã³ã·ã§ããã®ã³ãŒã«ããã¯é¢æ°ãæ°åãã«ã§ããããã«ããããã§ãã
3.3.6ã Wmv圢åŒã.prxããã³WindowsMediaLibãã¡ã€ã«
蚱容ã§ããèšé²å質ã確ä¿ããã«ã¯ãwmvãã¡ã€ã«ã®èšé²èšå®ãåå®çŸ©ããå¿
èŠããããŸãã
ãããè¡ãæãç°¡åãªæ¹æ³ã¯ãæ¡åŒµåã.prxã®ãŠãŒã¶ãŒãããã¡ã€ã«ãã¡ã€ã«ãäœæãããã®ã¹ããªãŒã ã®å質ãæ
åœãããã©ã¡ãŒã¿ãŒããªãŒããŒã©ã€ãããããšã§ãã ã³ãŒãå
ã®ãã®ãã¡ã€ã«ã®äŸã¯
good.prxã§ããããã¡ã€ã«ãã¡ã€ã«ãèªã¿åãã
ConfigProfileFromFile(IBaseFilter asfWriter, string filename)
ã¡ãœãã
ConfigProfileFromFile(IBaseFilter asfWriter, string filename)
ã§ãããã¡ã€ã«ãäœæããããã«ãGPLã©ã€ã»ã³ã¹ã§é
åžãããŠããTeam MediaPortalãããžã§ã¯ãã®WMLibã¯ã©ã¹ã䜿çšãããŸããã äœæããããããã¡ã€ã«ã¯ã
ConfigureFilterUsingProfile(wmProfile)
ã€ã³ã¿ãŒãã§ã€ã¹ã®
ConfigureFilterUsingProfile(wmProfile)
ã¡ãœãããä»ããŠASFã©ã€ã¿ãŒã«é©çšãããŸãã
ããšããã倧ããªåé¡ã®ä»£ããã«
Mpeg4Layer3ãã³ãŒããã¯ãAVIMuxããã³ãªãŒãã£ãªãšãããªã®åæ
ã¢ããªã±ãŒã·ã§ã³éçºã®æåã®æ®µéã§ã¯ã次ã®ã°ã©ãã®ããã«ããããªãMpeg4圢åŒã§ãé³å£°ãLayer3圢åŒã§èšé²ããããããã¹ãŠãAVI MUXãš1ã€ã®ãã¡ã€ã«ã«çµåããããšãèããŠããŸããã

XVid Codecãã£ã«ã¿ãŒã®ä»£ããã«ãMpeg-4ã®ãããªã³ã³ãã¬ããµãŒããã®ä»»æã®ãã£ã«ã¿ãŒã䜿çšã§ããŸãã xvidãšffdshowã®äž¡æ¹ãããã³ä»ã®ããã€ãã®ãã£ã«ã¿ãŒã䜿çšããè©Šã¿ããããŸããããã°ã©ãã«ãããªãèšé²ãããããšããããã€ãã®è©Šã¿ã®åŸããã¹ãŠãäžèŠããã»ã©åçŽã§ã¯ãªãããšãæããã«ãªããŸããã é²é³éå§åŸãã°ããããŠããé²é³ãäžæããåé¡ããããŸããã ããã§ã®çç±ã¯ãAVI MUXã³ã³ããã§ãããªãšãªãŒãã£ãªãããã·ã³ã°ãããšãããããªãšãªãŒãã£ãªãã©ãã¯ãèªåçã«åæããããæ£ããåšæ³¢æ°ã調æŽããŠããèšé²ãäžæãããåçäžã«ã°ã©ããã©ã³ãã ãªç¬éã«åæ¢ããå¯èœæ§ãããããã§ããªãŒãã£ãªãšãããªãåæããŠããªãããšã«æ³šæããŠãã ããã
æ®å¿µãªãããASF Writerã䜿çšããŠwmv圢åŒã§èšé²ã«ç§»è¡ããããšã«ãããæ ¹æ¬çãªæ¹æ³ã§å¯ŸåŠããªããã°ãªããªãã£ãããããã®åé¡ã®è§£æ±ºçã«ã€ããŠè©±ãããšã¯ã§ããŸããã
ãã®åé¡ã«ééãããã®åé¡ã«ç²ŸéããŠãã人ããã®èšäºãèªãã å Žåãåãã§ã¢ããã€ã¹ããŸãã
ããªãã®æ³šæãšé¢å¿ã«æè¬ããŸãããã®èšäºãèŽåœçãªéå±ã§ã¯ãªãããšãé¡ã£ãŠããŸãããŸãããã®è³æã誰ãã«ãšã£ãŠå®çšçã§ããããšãé¡ã£ãŠããŸãã