国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)

這篇具有很好參考價(jià)值的文章主要介紹了【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

無(wú)為也,則用天下而有余;有為也,則為天下用而不足。

1、簡(jiǎn)介

https://docs.microsoft.com/en-us/windows/win32/wmp/about-the-windows-media-player-sdk

Microsoft Windows Media Player 軟件開(kāi)發(fā)工具包 (SDK) 提供了用于自定義 Windows Media Player 和 Windows Media Player Mobile 以及使用 Windows Media Player ActiveX 控件和 Windows Media Player Mobile ActiveX 控件的信息和工具。

1.1 WMP控件特點(diǎn)

多種技術(shù)都支持嵌入 Windows Media Player 控件,包括:

  • Web 瀏覽器中的 HTML。支持 Microsoft Internet Explorer、Firefox 和 Netscape Navigator 7.1 版瀏覽器。
  • 使用Microsoft Visual C++ ?開(kāi)發(fā)系統(tǒng)創(chuàng)建的程序。
  • 使用Microsoft Visual Basic? 6.0創(chuàng)建的程序。
  • 使用 .NET Framework 創(chuàng)建的程序,包括用 Visual Basic 和 C# 編程語(yǔ)言編寫(xiě)的程序。
  • 微軟辦公軟件。

1.2 WMP開(kāi)發(fā)接口

Microsoft Windows Media Player 控件是使用 Microsoft Component Object Model (COM) 技術(shù)的標(biāo)準(zhǔn) ActiveX 控件。Windows Media Player 功能被提煉為一組遵循標(biāo)準(zhǔn) COM 準(zhǔn)則的編程接口。您可以使用帶有 Microsoft JScript 或 Microsoft Visual Basic Scripting Edition (VBScript) 的 Player 控件對(duì)象模型,在標(biāo)準(zhǔn) HTML 網(wǎng)頁(yè)上對(duì)這些接口進(jìn)行編程。您還可以使用Microsoft JScript在皮膚中對(duì)它們進(jìn)行編程。如果要?jiǎng)?chuàng)建嵌入控件的自定義程序,可以使用多種語(yǔ)言之一,包括 Visual Basic、C++ 和 C#。

腳本語(yǔ)言的播放器對(duì)象模型:
ActiveX 使用對(duì)象的概念來(lái)包含編程功能。Windows Media Player 使用多個(gè)對(duì)象來(lái)劃分控件提供的功能。根對(duì)象是 Player 對(duì)象,其他對(duì)象通過(guò)特定屬性附加到 Player 對(duì)象。
下圖顯示了 Windows Media Player 11 ActiveX 控件對(duì)象模型如何用于腳本語(yǔ)言。
【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
在C++中,有時(shí)在 .NET 語(yǔ)言中,對(duì)象由 COM 接口表示。在 Windows Media Player 對(duì)象模型中,COM 接口名稱(chēng)與對(duì)象名稱(chēng)相同,但以“IWMP”為前綴。例如,網(wǎng)絡(luò)對(duì)象通過(guò) IWMPNetwork 接口公開(kāi)。

1.3 WMP開(kāi)發(fā)方式

(1)導(dǎo)入ActiveX控件,拖放ActiveX控件方式

  • 工具箱添加ActiveX控件,菜單“工具” -> “選擇工具箱項(xiàng)”
  • 選擇“COM組件”,在你想要選擇的控件上面打鉤
  • 工具箱最下面就多了對(duì)應(yīng)ActiveX控件
  • 拖到界面即可使用

(2)動(dòng)態(tài)創(chuàng)建ActiveX控件

  • 類(lèi)向?qū)?,快捷鍵 Ctrl + Shitf + X
  • 右邊“添加類(lèi)”,“ActiveX中的MFC控件類(lèi)”,生成ActiveX控件類(lèi)
  • 在框架或者對(duì)話(huà)框的初始函數(shù)中,調(diào)用類(lèi)的Create函數(shù)

(3)COM調(diào)用方式

  • 類(lèi)向?qū)?,快捷鍵 Ctrl + Shitf + X
  • 右邊“添加類(lèi)”,“類(lèi)型庫(kù)中的MFC類(lèi)”,生成繼承COleDispatchDriver的類(lèi)
  • 在框架或者對(duì)話(huà)框的初始函數(shù)中,調(diào)用類(lèi)的CreateDispatch函數(shù)

1.4 WMP支持格式

本文列出 Microsoft Windows Media Player 12 支持的多媒體文件類(lèi)型。 如果在 Windows 中安裝新的編解碼器,則可能支持其他文件格式。
Windows Media Player 支持的文件類(lèi)型:

  • Windows Media 格式(.asf、.wma、.wmv、.wm)
  • Windows Media 元文件(.asx、.wax、.wvx、.wmx、wpl)
  • Microsoft 數(shù)字視頻記錄 (.dvr-ms)
  • Windows Media 下載程序包 (.wmd)
  • 影音交叉存取 (.avi)
  • 運(yùn)動(dòng)圖像專(zhuān)家組(.mpg、.mpeg、.m1v、.mp2、.mp3、.mpa、.mpe、.m3u)
  • 音樂(lè)器材數(shù)字接口(.mid、.midi、.rmi)
  • 音頻交換文件格式(.aif、.aifc、.aiff)
  • Sun Microsystems 和 NeXT(.au、.snd)
  • Audio for Windows (.wav)
  • CD 音頻曲目 (.cda)
  • Indeo 視頻技術(shù) (.ivf)
  • Windows Media Player 外觀(.wmz、.wms)
  • QuickTime 影片 (.mov)
  • MP4 音頻文件 (.m4a)
  • MP4 視頻文件(.mp4、.m4v、.mp4v、.3g2、.3gp2、.3gp、.3gpp)
  • Windows 音頻文件(.aac、.adt、.adts)
  • MPEG-2 TS 視頻文件 (.m2ts)
  • 免費(fèi)無(wú)損音頻編解碼器 (.flac)

2、官網(wǎng)代碼示例

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/api/wmp/nn-wmp-iwmpplayer4

2.1 Using the Windows Media Player Control in a Console Application

#include "atlbase.h"
#include "atlwin.h"
#include "wmp.h"

int _tmain(int argc, _TCHAR* argv[])
{
    CoInitialize(NULL);

    HRESULT hr = S_OK;
    CComBSTR bstrVersionInfo; // Contains the version string.
    CComPtr<IWMPPlayer> spPlayer;  // Smart pointer to IWMPPlayer interface.

    hr = spPlayer.CoCreateInstance( __uuidof(WindowsMediaPlayer), 0, CLSCTX_INPROC_SERVER );

    if(SUCCEEDED(hr))
    {
        hr = spPlayer->get_versionInfo(&bstrVersionInfo);
    }

    if(SUCCEEDED(hr))
    {
        // Show the version in a message box.
        COLE2T pStr(bstrVersionInfo);
        MessageBox( NULL, (LPCSTR)pStr, _T("Windows Media Player Version"), MB_OK );
    }

    // Clean up.
    spPlayer.Release();
    CoUninitialize();

    return 0;
}

2.2 Hosting the Windows Media Player Control in a Windows Application

#include "wmp.h"
#include <atlbase.h>
#include <atlcom.h>
#include <atlhost.h>
#include <atlctl.h>

CAxWindow  m_wndView;  // ActiveX host window class.
CComPtr<IWMPPlayer>  m_spWMPPlayer;  // Smart pointer to IWMPPlayer interface.

AtlAxWinInit();

CComPtr<IAxWinHostWindow>  spHost;
HRESULT  hr;

GetClientRect(&rcClient);
m_wndView.Create(m_hWnd, rcClient, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);

hr = m_wndView.QueryHost(&spHost);

hr = spHost->CreateControl(CComBSTR(_T("{6BF52A52-394A-11d3-B153-00C04F79FAA6}")), m_wndView, 0);

hr = m_wndView.QueryControl(&m_spWMPPlayer);
These instructions are summarized as follows:

1. add

#include "wmp.h"
#include <atlbase.h>
#include <atlcom.h>
#include <atlhost.h>
#include <atlctl.h>

to the view header file.

2. Declare member variables, as follows to the view class

CAxWindow  m_wndView;  
CComPtr<IWMPPlayer>  m_spWMPPlayer; 

3. add AtlAxWinInit();to the App InitInstance().

4. Add local variables:CComPtr<IAxWinHostWindow>  spHost;
HRESULT  hr;

Note, I also had to add RECT rcClient for a local variable,
 but that is not specified in the instructions.

5. Add the following code:

m_wndView.Create(m_hWnd, rcClient, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
hr = m_wndView.QueryHost(&spHost);
hr = spHost->CreateControl(CComBSTR(_T("{6BF52A52-394A-11d3-B153-00C04F79FAA6}")), m_wndView, 0);
hr = m_wndView.QueryControl(&m_spWMPPlayer);

You could put this in OnDraw in the view, or you could 
do as I did and create a DisplayMov subroutine that I call 
from OnDraw. See code in my original post. Now, set a 
breakpoint at the "QueryHost" line, and compile and run. 
You will see hr = E_Fail in the auto variables of the 
debug window.

【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)

To use the Windows Media Player ActiveX control (including the user interface) in a Windows-based program, you must provide an ActiveX control container. ATL provides the CAxWindow class to provide ActiveX host window functionality.

  • CWMPHost.h:
// CWMPHost.h : Declaration of the CWMPHost
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//

#include "resource.h"       // main symbols
#include <oledlg.h>
#include "wmp.h"
#include "CWMPEventDispatch.h"


/
// CWMPHost

class CWMPHost : public CWindowImpl<CWMPHost, CWindow, CWinTraits<WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, WS_EX_APPWINDOW | WS_EX_WINDOWEDGE> >
{
public:
    DECLARE_WND_CLASS_EX(NULL, 0, 0)

    BEGIN_MSG_MAP(CWMPHost)
        MESSAGE_HANDLER(WM_CREATE, OnCreate)
        MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
        MESSAGE_HANDLER(WM_SIZE, OnSize)
        MESSAGE_HANDLER(WM_ERASEBKGND, OnErase)
        MESSAGE_HANDLER(WM_CONTEXTMENU, FowardMsgToWMP)

        COMMAND_ID_HANDLER(ID_FILE_OPEN, OnFileOpen)
        COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit)

        COMMAND_ID_HANDLER(ID_WMPCORE_CLOSE, OnWMPCoreClose)
        COMMAND_ID_HANDLER(ID_WMPCORE_URL, OnWMPCoreURL)
        COMMAND_ID_HANDLER(ID_WMPCORE_OPENSTATE, OnWMPCoreOpenState)
        COMMAND_ID_HANDLER(ID_WMPCORE_PLAYSTATE, OnWMPCorePlayState)
        COMMAND_ID_HANDLER(ID_WMPCORE_VERSIONINFO, OnWMPCoreVersionInfo)
        COMMAND_ID_HANDLER(ID_WMPCORE_LAUNCHURL, OnWMPCoreLaunchURL)
        COMMAND_ID_HANDLER(ID_WMPCORE_ISONLINE, OnWMPCoreIsOnline)
        COMMAND_ID_HANDLER(ID_WMPCORE_STATUS, OnWMPCoreStatus)
        COMMAND_ID_HANDLER(ID_WMPCORE_CONTROLS, OnWMPCoreInterface)       
        COMMAND_ID_HANDLER(ID_WMPCORE_SETTINGS, OnWMPCoreInterface)
        COMMAND_ID_HANDLER(ID_WMPCORE_CURRENTMEDIA, OnWMPCoreInterface)
        COMMAND_ID_HANDLER(ID_WMPCORE_MEDIACOLLECTION, OnWMPCoreInterface)
        COMMAND_ID_HANDLER(ID_WMPCORE_PLAYLISTCOLLECTION, OnWMPCoreInterface)
        COMMAND_ID_HANDLER(ID_WMPCORE_NETWORK, OnWMPCoreInterface)
        COMMAND_ID_HANDLER(ID_WMPCORE_CURRENTPLAYLIST, OnWMPCoreInterface)
        COMMAND_ID_HANDLER(ID_WMPCORE_CDROMCOLLECTION, OnWMPCoreInterface)
        COMMAND_ID_HANDLER(ID_WMPCORE_CLOSEDCAPTION, OnWMPCoreInterface)
        COMMAND_ID_HANDLER(ID_WMPCORE_ERROR, OnWMPCoreInterface)
        COMMAND_ID_HANDLER(ID_WMPCORE2_DVD, OnWMPCoreInterface)

        COMMAND_ID_HANDLER(ID_WMPPLAYER_ENABLED, OnWMPPlayerEnabled)        
        COMMAND_ID_HANDLER(ID_WMPPLAYER_FULLSCREEN, OnWMPPlayerFullScreen)        
        COMMAND_ID_HANDLER(ID_WMPPLAYER_ENABLECONTEXTMENU, OnWMPPlayerEnableContextMenu)        
        COMMAND_ID_HANDLER(ID_WMPPLAYER_UIMODE, OnWMPPlayerUIMode)        
        COMMAND_ID_HANDLER(ID_WMPPLAYER2_STRETCHTOFIT, OnWMPPlayer2StretchToFit)        
    END_MSG_MAP()

    void OnFinalMessage(HWND /*hWnd*/);

    LRESULT OnDestroy(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& bHandled );
    LRESULT OnCreate(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& /* bHandled */);

    LRESULT OnErase(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& /* bHandled */);
    LRESULT OnSize(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& /* bHandled */);
    LRESULT OnFileOpen(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT OnFileExit(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);

    LRESULT OnWMPCoreClose(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT OnWMPCoreURL(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT OnWMPCoreOpenState(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT OnWMPCorePlayState(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT OnWMPCoreVersionInfo(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT OnWMPCoreLaunchURL(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT OnWMPCoreIsOnline(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT OnWMPCoreStatus(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT OnWMPCoreInterface(WORD /* wNotifyCode */, WORD wID, HWND /* hWndCtl */, BOOL& /* bHandled */);

    LRESULT OnWMPPlayerEnabled(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT OnWMPPlayerFullScreen(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT OnWMPPlayerEnableContextMenu(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT OnWMPPlayerUIMode(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
 
    LRESULT OnWMPPlayer2StretchToFit(WORD /* wNotifyCode */, WORD /* wID */, HWND /* hWndCtl */, BOOL& /* bHandled */);
    LRESULT FowardMsgToWMP(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

    CAxWindow                   m_wndView;
    CComPtr<IWMPPlayer>         m_spWMPPlayer;
    CComPtr<IConnectionPoint>   m_spConnectionPoint;
    DWORD                       m_dwAdviseCookie;
};

  • CWMPHost.cpp:
// CWMPHost.cpp : Implementation of the CWMPHost
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//

#include "stdafx.h"
#include "CWMPHost.h"
#include "dialogs.h"


/
// CWMPHost

void CWMPHost::OnFinalMessage(HWND /*hWnd*/)
{
    ::PostQuitMessage(0);
}

LRESULT CWMPHost::OnCreate(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& /* bHandled */)
{
    AtlAxWinInit();
    CComPtr<IAxWinHostWindow>           spHost;
    CComPtr<IConnectionPointContainer>  spConnectionContainer;
    CComWMPEventDispatch                *pEventListener = NULL;
    CComPtr<IWMPEvents>                 spEventListener;
    HRESULT                             hr;
    RECT                                rcClient;

    m_dwAdviseCookie = 0;

    // create window

    GetClientRect(&rcClient);
    m_wndView.Create(m_hWnd, rcClient, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
    if (NULL == m_wndView.m_hWnd)
        goto FAILURE;
    
    // load OCX in window

    hr = m_wndView.QueryHost(&spHost);
    if (FAILMSG(hr))
        goto FAILURE;

    hr = spHost->CreateControl(CComBSTR(L"{6BF52A52-394A-11d3-B153-00C04F79FAA6}"), m_wndView, 0);
    if (FAILMSG(hr))
        goto FAILURE;

    hr = m_wndView.QueryControl(&m_spWMPPlayer);
    if (FAILMSG(hr))
        goto FAILURE;

    // start listening to events

    hr = CComWMPEventDispatch::CreateInstance(&pEventListener);
    spEventListener = pEventListener;
    if (FAILMSG(hr))
        goto FAILURE;

    hr = m_spWMPPlayer->QueryInterface(&spConnectionContainer);
    if (FAILMSG(hr))
        goto FAILURE;

    // See if OCX supports the IWMPEvents interface
    hr = spConnectionContainer->FindConnectionPoint(__uuidof(IWMPEvents), &m_spConnectionPoint);
    if (FAILED(hr))
    {
        // If not, try the _WMPOCXEvents interface, which will use IDispatch
        hr = spConnectionContainer->FindConnectionPoint(__uuidof(_WMPOCXEvents), &m_spConnectionPoint);
        if (FAILMSG(hr))
            goto FAILURE;
    }

    hr = m_spConnectionPoint->Advise(spEventListener, &m_dwAdviseCookie);
    if (FAILMSG(hr))
        goto FAILURE;

    return 0;

FAILURE:
    ::PostQuitMessage(0);
    return 0;
}

LRESULT CWMPHost::OnDestroy(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& bHandled )
{
    // stop listening to events

    if (m_spConnectionPoint)
    {
        if (0 != m_dwAdviseCookie)
            m_spConnectionPoint->Unadvise(m_dwAdviseCookie);
        m_spConnectionPoint.Release();
    }

    // close the OCX

    if (m_spWMPPlayer)
    {
        m_spWMPPlayer->close();
        m_spWMPPlayer.Release();
    }

    bHandled = FALSE;
    return 0;
}

【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)

3、C++測(cè)試代碼

在基于對(duì)話(huà)框的MFC應(yīng)用程序中嵌入了Windows Media Player窗口媒體播放器Activex控件。

  • 新建一個(gè)基于MFC對(duì)話(huà)框工程
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)

  • 添加ActiveX控件
    鼠標(biāo)右鍵彈出菜單,選擇“插入ActiveX控件”
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
    顯示ActvieX控件列表窗口如下:
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
    控件被添加到MFC窗口上。
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
    鼠標(biāo)右鍵,添加控件變量。自動(dòng)生成類(lèi)文件COCX.h,COCX.cpp。
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
    鼠標(biāo)右鍵,選擇“類(lèi)向?qū)А?,添加wmp的核心播放類(lèi)。
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
    從wmp.dll來(lái)生成類(lèi)代碼文件。
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
    自動(dòng)生成類(lèi)文件CWMPPlayer4.h,CWMPPlayer4.cpp。
    將COCX m_player; 改成 CWMPPlayer4 m_player;
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
    然后換一種方式,通過(guò)“類(lèi)型庫(kù)種的MFC類(lèi)”,添加其他的wmp封裝類(lèi)。比如controls、settings、playlist等。
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
    這里添加其他5個(gè)wmp輔助封裝類(lèi),如下:
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
    最后,VS代碼工程的文件組織結(jié)構(gòu)如下:
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)

  • (1)定義變量

//#include "COCX.h"
#include "CWMPControls.h"
#include "CWMPSettings.h"
#include "CWMPPlaylist.h"
#include "CWMPMedia.h"
#include "CWMPPlayer4.h"

//COCXm_player;
CWMPControls m_control;
CWMPSettings m_set;
CWMPPlaylist m_playlist;
CWMPMedia m_media;
CWMPPlayer4 m_player;

  • (2)播放視頻文件
char szFileFilter[]=
	"Mp3 File(*.mp3)|*.mp3|"
	"MPEG File(*.mpeg)|*.mpeg|"
	"Media File(*.asf)|*.asf|"
	"Video File(*.dat)|*.dat|"
	"MPGA File(*.mpga)|*.mpga|"
	"Wave File(*.wav)|*.wav|"
	"AVI File(*.avi)|*.avi|"
	"Movie File(*.mov)|*.mov|"
	"Mid File(*.mid;*,rmi)|*.mid;*.rmi|"
	"Wma File(*.wma)|*.wma|"
	"All File(*.*)|*.*||";

CFileDialog fileDialog( TRUE,NULL,NULL,NULL,szFileFilter,this);
if (fileDialog.DoModal() == IDOK)
{
	CString fileName=fileDialog.GetPathName();
	m_player.put_URL(fileName);
}

【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)

//創(chuàng)建一個(gè)播放列表
m_playlist = static_cast<CWMPPlaylist>(m_player.get_currentPlaylist());
m_player.put_fullScreen(tru);

char szFileFilter[]=
	"Mp3 File(*.mp3)|*.mp3|"
	"MPEG File(*.mpeg)|*.mpeg|"
	"Media File(*.asf)|*.asf|"
	"Video File(*.dat)|*.dat|"
	"MPGA File(*.mpga)|*.mpga|"
	"Wave File(*.wav)|*.wav|"
	"AVI File(*.avi)|*.avi|"
	"Movie File(*.mov)|*.mov|"
	"Mid File(*.mid;*,rmi)|*.mid;*.rmi|"
	"Wma File(*.wma)|*.wma|"
	"All File(*.*)|*.*||";

CFileDialog fileDialog( TRUE,NULL,NULL,NULL,szFileFilter,this);
if (fileDialog.DoModal() == IDOK)
{
	CString fileName=fileDialog.GetPathName();
	//創(chuàng)建一個(gè)媒體
	m_media = static_cast<CWMPMedia>(m_player.newMedia(fileName));
	//將媒體添加到播放列表
	m_playlist.appendItem(m_media);
	//將列表添加到當(dāng)前列表,以便實(shí)現(xiàn)自動(dòng)播放
	m_player.put_currentPlaylist(m_playlist);
	 
	m_set = (CWMPSettings)m_player.get_settings();
	//參數(shù)true設(shè)置自動(dòng)播放,false不設(shè)置自動(dòng)播放
	m_set.put_autoStart(true);
	//將媒體的名字添加到列表控件
	m_listCtrl.InsertItem(0, m_media.get_name());
}
m_control = static_cast<CWMPControls>(m_player.get_controls());
m_control.play();
m_control.pause();
m_control.stop();

【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)

上面的步驟操作不正確的話(huà),會(huì)出現(xiàn)如下的提示框。
【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)

4、IE測(cè)試代碼

<!-- Copyright (c) Microsoft Corporation.  All rights reserved. -->
<!-- Windows Media Player SDK Embedded Player Sample -->

<HTML>
<HEAD>
    <TITLE>Embedded Player Control Sample</TITLE>
</HEAD>

<BODY onLoad = "Init();">

<H1>Embedding Windows Media Player</H1>
<H2>Includes custom error handling</H2>

<OBJECT id=Player classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6 height="200" width="200">
    <PARAM NAME="autoStart" VALUE="true">
</OBJECT>

<BR><BR>

<INPUT type=button value="Play Audio" name=btnPlayAudio  onclick=PlayAudio()>
<INPUT type=button value="Play Video" name=btnPlayVideo  onclick=PlayVideo()>
<INPUT type=button value="  Pause  " name=btnPause  onclick=PauseMe()>
<INPUT type=button value="Stop" name=btnStop  onclick=StopMe()>
<INPUT type=button value="Generate Error" name=btnMakeError  onclick=MakeError()>

<BR><BR>

<DIV id=divName size=50>Media name: </DIV><BR><BR>
<DIV id=divState size=50>Playstate: </DIV><BR><BR>
<DIV id=divStatus size=50>Status: </DIV><BR><BR>

<SCRIPT language = "JScript">

var g_bPaused = false; // To track pause button state;

// Check for JScript errors.
onerror = ShowError;

// Display JScript errors.
function ShowError (msg,url,linenumber)
{
    alert(msg + " at line " + linenumber);
}

// Initialized states.
function Init()
{
    Player.uiMode = "none";
    btnPause.disabled = true;
    btnStop.disabled = true;

    // Request Media Libary access rights, if none exists.
    if( Player.settings.mediaAccessRights == "none" )
    {
        // Request access rights.
        Player.settings.requestMediaAccessRights( "read" );
    }
}

// Play a known audio file from Media Library.
function PlayAudio ()
{
}

// Play a known video file from Media Library.
function PlayVideo ()
{
	Player.URL = "d:\\test.mp4";
}

// Try to play a file that doesn't exist.
function MakeError ()
{
    StopMe();
    Player.URL = "d:\\test.mp4"; // This assumes you don't have a file by this name!
}

// Pause the Player.
function PauseMe ()
{
    if( g_bPaused == true )
    {
        Player.controls.play();
        g_bPaused = false;
        btnPause.value = "  Pause  ";
    }
    else
    {  
        Player.controls.pause();
        g_bPaused = true;
        btnPause.value = "Resume";
    }
}

// Stop the Player.
function StopMe ()
{
    Player.controls.stop();
}

</SCRIPT>

<SCRIPT LANGUAGE = "JScript"  FOR = Player EVENT = PlayStateChange(NewState)>

// Test for the current state.
// If playing, display the name of the current media.

switch (NewState){
    case 1:
    divState.innerHTML = "Playstate: Stopped";
    // Toggle the button states.
    btnPause.disabled = true;
    btnPause.value = "  Pause  ";
    btnStop.disabled = true;
    break;

    case 2:
    divState.innerHTML = "Playstate: Paused";
    break;

    case 3:
    divState.innerHTML = "Playstate: Playing";
    divName.innerHTML = "Media name: " + Player.currentMedia.name;
    // Toggle the button states.
    btnPause.disabled = false;
    btnStop.disabled = false;
    break;

    case 6:
    divState.innerHTML = "Playstate: Buffering";
    break;

    case 7:
    divState.innerHTML = "Playstate: Waiting";
    break;

    case 8:
    divState.innerHTML = "Playstate: Media Ended";
    break;

    case 9:
    divState.innerHTML = "Playstate: Transitioning";
    break;

    case 10:
    divState.innerHTML = "Playstate: Ready";
    break;

    // Other cases go here.
    default:
    divState.innerHTML = "Playstate: Other";
}

</SCRIPT>

<SCRIPT LANGUAGE = "JScript"  FOR = Player EVENT = StatusChange()>
    divStatus.innerHTML = "Status: " + Player.status;
</SCRIPT>

<SCRIPT LANGUAGE = "JScript"  FOR = Player  EVENT = Error()>
    var strError = "";

    // Store the number of errors in the queue.
    var max = Player.error.errorCount

    // Loop through the list of errors.
    for (var i = 0; i < max; i++)
    {
        // Display the error description for each item.
        strError += "Error: " + Player.error.item(i).errorDescription + "\n";
    }

    alert( strError ); // Display the error warning.

    // Clear the error queue to prepare for the next group of errors.
    Player.error.clearErrorQueue();
</SCRIPT>
</BODY>
</HTML>

【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)

5、C#測(cè)試代碼

“工具箱”中單擊右鍵,選擇“選擇項(xiàng)”菜單,打開(kāi)“選擇工具箱項(xiàng)”窗口,選擇“COM組件”標(biāo)簽,在列表中找到并勾選“Windows Media Player”組件,單擊“確定”按鈕。將該組件添加到指定的工具箱選項(xiàng)卡中。

  • 添加wmp的com控件引用
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
  • 窗口上添加控件
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
  • 添加邏輯代碼
/// <summary>
/// Open new audio from the Library.
/// </summary>
private void btnOpen_Click(object sender, System.EventArgs e)
{
    Library libForm = new Library();
    libForm.WMPlayer = Player;
    libForm.ShowDialog();
    if (libForm.DialogResult == DialogResult.OK)
    {
        try
        {
            theMedia = libForm.TheMedia;

            if(theMedia != null) // Test whether the user chose a media item. 
            {
                lblSongName.Text = theMedia.name;
                lblSourceURL.Text = theMedia.sourceURL;

                // Set the current media. It will play automatically.
                Player.currentMedia = theMedia;
            }
        }      
        catch(COMException comExc)
        {
            int hr = comExc.ErrorCode; 
            String Message = String.Format("There was an error.\nHRESULT = {1}\n{2}", hr.ToString(), comExc.Message);
            MessageBox.Show(Message, "COM Exception");
        }  
     }
}
/// <summary>
/// Play/Pause transport control button handler.
/// </summary>
private void btnPlayPause_Click(object sender, System.EventArgs e)
{
    try
    {
        if(Player.playState == WMPPlayState.wmppsPlaying)
        {
            Player.Ctlcontrols.pause();
        }
        else
        {
            Player.Ctlcontrols.play();
        }
    }
    catch(COMException comExc)
    {
        int hr = comExc.ErrorCode; 
        String Message = String.Format("There was an error.\nHRESULT = {1}\n{2}", hr.ToString(), comExc.Message);
        MessageBox.Show(Message, "COM Exception");
    }  
}
/// <summary>
/// Centralize UI state control.
/// </summary>
/// <param name="newState">State of the player</param>
private void SetUIState(WMPPlayState newState)
{
    bool canFF, canRew, canPlay, canPause, canSeek, canStop;    
    double fDuration;

    try
    {
        canFF = Player.Ctlcontrols.get_isAvailable("fastForward");
        canRew = Player.Ctlcontrols.get_isAvailable("fastReverse");
        canPlay = Player.Ctlcontrols.get_isAvailable("Play");
        canPause = Player.Ctlcontrols.get_isAvailable("Pause");
        canSeek = Player.Ctlcontrols.get_isAvailable("currentPosition");
        canStop = Player.Ctlcontrols.get_isAvailable("Stop");
        fDuration = Player.currentMedia.duration;
    }
    catch(COMException comExc)
    {
        int hr = comExc.ErrorCode; 
        String Message = String.Format("There was an error.\nHRESULT = {1}\n{2}", hr.ToString(), comExc.Message);
        MessageBox.Show(Message, "COM Exception");
        return;
    } 
}
// 播放rmvb/rm等非官方格式文件要先雙擊文件再點(diǎn)播放按鈕,而不能直接播放的問(wèn)題,并彈出警告消息框。
// 方法:先設(shè)置屬性:wmp.settings.enableErrorDialogs = false;事實(shí)上這個(gè)屬性默認(rèn)就是false。不用設(shè)置。
private void wmp_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
//如果已播放完畢就播放下一個(gè)文件
if ((WMPLib.WMPPlayState)e.newState == WMPLib.WMPPlayState.wmppsReady)  
     Player.Ctlcontrols.play();
}
Player.currentMedia.sourceURL; //獲取正在播放的媒體文件的路徑
Player.currentMedia.name;          //獲取正在播放的媒體文件的名稱(chēng)
Player.currentMedia.setItemInfo(string);  //通過(guò)屬性名設(shè)置媒體信息 
Player.currentMedia.name:string;  //同 currentMedia.getItemInfo("Title") 
Player.currentMedia.duration:double; 媒體總長(zhǎng)度 
Player.currentMedia.durationString:string; 媒體總長(zhǎng)度,字符串格式。如“03:24” 
Player.currentMedia.getItemInfo(const string); 
獲取當(dāng)前媒體信息:"Title"=媒體標(biāo)題,"Author"=藝術(shù)家,"Copyright"=版權(quán)信息,"Description"=媒體內(nèi)容描述, "Duration"=持續(xù)時(shí)間(秒),"FileSize"=文件大小,"FileType"=文件類(lèi)型,"sourceURL"=原始地址 

//在視頻播放之后,可以通過(guò)如下方式讀取源視頻的寬度和高度,然后設(shè)置其還原為原始的大小
int intWidth = Player.currentMedia.imageSourceWidth;
int intHeight = Player.currentMedia.imageSourceHeight;
Player.Width = intWidth + 2;
Player.Height = intHeight + 2;

//播放器基本設(shè)置 
Player.settings.volume:integer; 音量,0-100 
Player.settings.autoStart:Boolean; 是否自動(dòng)播放 
Player.settings.mute:Boolean; 是否靜音 
Player.settings.playCount:integer; 播放次數(shù) 

//順序播放
Player.settings.setMode("shuffle", False)
//隨機(jī)播放
Player.settings.setMode("shuffle", True)
//循環(huán)播放
Player.settings.setMode("loop", True)

//當(dāng)前播放列表屬性 
Player.currentPlaylist.count:integer; 當(dāng)前播放列表所包含媒體數(shù) 
Player.currentPlaylist.Item[integer]; 獲取或設(shè)置指定項(xiàng)目媒體信息,其子屬性同wmp.currentMedia 

Player.AllowChangeDisplaySize //是否允許自由設(shè)置播放圖象大小 
Player.DisplaySize       //設(shè)置播放圖象大小 
    1-MpDefaultSize         //原始大小 
    2-MpHalfSize           //原始大小的一半 
    3-MpDoubleSize          //原始大小的兩倍 
    4-MpFullScreen          //全屏 
    5-MpOneSixteenthScreen      //屏幕大小的1/16 
    6-MpOneFourthScreen       //屏幕大小的1/4 
    7-MpOneHalfScreen        //屏幕大小的1/2 
Player.ClickToPlay       //是否允許單擊播放窗口啟動(dòng)Media Player
//播放器基本控制 
Player.Ctlcontrols.Play          播放 
Player.Ctlcontrols.Stop          停止 
Player.Ctlcontrols.Pause          暫停 
Player.Ctlcontrols.PlayCount        文件播放次數(shù) 
Player.Ctlcontrols.AutoRewind       是否循環(huán)播放 
Player.Ctlcontrols.Balance         聲道 
Player.Ctlcontrols.Volume         音量 
Player.Ctlcontrols.Mute          靜音 
Player.Ctlcontrols.EnableContextMenu    是否允許在控件上點(diǎn)擊鼠標(biāo)右鍵時(shí)彈出快捷菜單 
Player.Ctlcontrols.AnimationAtStart    是否在播放前先播放動(dòng)畫(huà) 
Player.Ctlcontrols.ShowControls      是否顯示控件工具欄 
Player.Ctlcontrols.ShowAudioControls    是否顯示聲音控制按鈕 
Player.Ctlcontrols.ShowDisplay       是否顯示數(shù)據(jù)文件的相關(guān)信息 
Player.Ctlcontrols.ShowGotoBar       是否顯示Goto欄 
Player.Ctlcontrols.ShowPositionControls  是否顯示位置調(diào)節(jié)按鈕 
Player.Ctlcontrols.ShowStatusBar      是否顯示狀態(tài)欄 
Player.Ctlcontrols.ShowTracker       是否顯示進(jìn)度條 
Player.Ctlcontrols.FastForward       快進(jìn) 
Player.Ctlcontrols.FastReverse       快退 
Player.Ctlcontrols.Rate          快進(jìn)/快退速率 
Player.Ctlcontrols.currentPosition:double; 當(dāng)前進(jìn)度 
Player.Ctlcontrols.currentPositionString:string; 當(dāng)前進(jìn)度,字符串格式。如“00:23” 
Player.Ctlcontrols.next; 下一曲 
Player.Ctlcontrols.previous; 上一曲 
  • 測(cè)試如下:
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)
    【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)

最后祝小伙伴們中秋快樂(lè)!
??????????????????????

結(jié)語(yǔ)

如果您覺(jué)得該方法或代碼有一點(diǎn)點(diǎn)用處,可以給作者點(diǎn)個(gè)贊,或打賞杯咖啡;╮( ̄▽?zhuān)?╭
如果您感覺(jué)方法或代碼不咋地//(ㄒoㄒ)//,就在評(píng)論處留言,作者繼續(xù)改進(jìn);o_O???
如果您需要相關(guān)功能的代碼定制化開(kāi)發(fā),可以留言私信作者;(????)
感謝各位大佬童鞋們的支持!( ′ ▽′ )? ( ′ ▽′)っ?。。?mark hidden color="red">文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-460372.html

【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-460372.html

到了這里,關(guān)于【小沐學(xué)C++】C++ 實(shí)現(xiàn)視頻文件播放(Windows Media Player、MFC、C#)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • c# 視頻播放之Windows Media Player

    c# 視頻播放之Windows Media Player

    最近想給軟件加個(gè)視頻播放功能,在網(wǎng)上看有好幾個(gè)方式,最后決定用?Windows Media Player 和Vlc.DotNet.Forms。 這篇文章主要講Windows Media Player,它的優(yōu)點(diǎn):代碼簡(jiǎn)單,視頻操作功能都有,能播放網(wǎng)絡(luò)和本地視頻。缺點(diǎn):需要電腦安裝視頻對(duì)應(yīng)的解碼器,適應(yīng)性很差,只適合自己玩

    2024年01月23日
    瀏覽(14)
  • 【小沐學(xué)C++】C++ 捕獲程序異常奔潰minidump

    【小沐學(xué)C++】C++ 捕獲程序異常奔潰minidump

    并不是所有的bug都可以在發(fā)布前找到,也就是說(shuō)并不是所有的拋出異常的bug都可以在發(fā)布前找到。幸運(yùn)的是,微軟在 Platform SDK 中包含了一個(gè)功能,可以幫助開(kāi)發(fā)人員收集用戶(hù)發(fā)現(xiàn)的異常信息。MiniDumpWriteDump函數(shù)將必要的故障轉(zhuǎn)儲(chǔ)信息寫(xiě)入文件,而不節(jié)省整個(gè)進(jìn)程空間。此故障

    2024年02月06日
    瀏覽(16)
  • 【小沐學(xué)Python】Python實(shí)現(xiàn)語(yǔ)音識(shí)別(Whisper)

    【小沐學(xué)Python】Python實(shí)現(xiàn)語(yǔ)音識(shí)別(Whisper)

    https://github.com/openai/whisper Whisper 是一種通用的語(yǔ)音識(shí)別模型。它是在包含各種音頻的大型數(shù)據(jù)集上訓(xùn)練的,也是一個(gè)多任務(wù)模型,可以執(zhí)行多語(yǔ)言語(yǔ)音識(shí)別、語(yǔ)音翻譯和語(yǔ)言識(shí)別。 Open AI在2022年9月21日開(kāi)源了號(hào)稱(chēng)其英文語(yǔ)音辨識(shí)能力已達(dá)到人類(lèi)水準(zhǔn)的Whisper神經(jīng)網(wǎng)絡(luò),且它亦支

    2024年02月04日
    瀏覽(1050)
  • 【小沐學(xué)Python】Python實(shí)現(xiàn)語(yǔ)音識(shí)別(SpeechRecognition)

    【小沐學(xué)Python】Python實(shí)現(xiàn)語(yǔ)音識(shí)別(SpeechRecognition)

    https://pypi.org/project/SpeechRecognition/ https://github.com/Uberi/speech_recognition SpeechRecognition用于執(zhí)行語(yǔ)音識(shí)別的庫(kù),支持多個(gè)引擎和 API,在線(xiàn)和離線(xiàn)。 Speech recognition engine/API 支持如下接口: 以上幾個(gè)中只有 recognition_sphinx()可與CMU Sphinx 引擎脫機(jī)工作, 其他六個(gè)都需要連接互聯(lián)網(wǎng)。另

    2024年02月04日
    瀏覽(96)
  • 【小沐學(xué)C++】C++ MFC中嵌入web網(wǎng)頁(yè)控件(WebBrowser、WebView2、CEF3)

    【小沐學(xué)C++】C++ MFC中嵌入web網(wǎng)頁(yè)控件(WebBrowser、WebView2、CEF3)

    WebBrowser控件最常見(jiàn)的用途之一是向應(yīng)用程序添加 Internet 瀏覽功能。使用 IWebBrowser2 接口,可以瀏覽到本地文件系統(tǒng)、網(wǎng)絡(luò)或萬(wàn)維網(wǎng)上的任何位置。可以使用IWebBrowser2::Navigate 方法告知控件要瀏覽到哪個(gè)位置。第一個(gè)參數(shù)是包含位置名稱(chēng)的字符串。要瀏覽到本地文件系統(tǒng)或網(wǎng)絡(luò)

    2024年02月05日
    瀏覽(93)
  • 【小沐學(xué)Web】Rust實(shí)現(xiàn)Web服務(wù)器

    【小沐學(xué)Web】Rust實(shí)現(xiàn)Web服務(wù)器

    https://www.rust-lang.org/ Rust: 一種使每個(gè)人都能夠構(gòu)建可靠且高效的軟件的語(yǔ)言。 如今,全球有數(shù)百家公司在生產(chǎn)環(huán)境中使用 Rust,以提供快速、資源少、跨平臺(tái)的解決方案。您熟悉和喜愛(ài)的軟件,例如Firefox、 Dropbox和Cloudflare,都使用 Rust。從初創(chuàng)公司到大公司,從嵌入式設(shè)備到

    2024年02月07日
    瀏覽(28)
  • 【小沐學(xué)Python】Python實(shí)現(xiàn)Web圖表功能(Dash)

    【小沐學(xué)Python】Python實(shí)現(xiàn)Web圖表功能(Dash)

    https://dash.plotly.com/ https://dash.gallery/Portal/ Dash 是一個(gè)用于構(gòu)建Web應(yīng)用程序的 Python 庫(kù),無(wú)需 JavaScript 。 Dash是下載量最大,最值得信賴(lài)的Python框架,用于構(gòu)建ML和數(shù)據(jù)科學(xué)Web應(yīng)用程序。 Dash是一個(gè)用來(lái)創(chuàng)建 web 應(yīng)用的 python 庫(kù),它建立在 Plotly.js(同一個(gè)團(tuán)隊(duì)開(kāi)發(fā))、React 和 Flask 之上

    2024年02月04日
    瀏覽(96)
  • 【小沐學(xué)NLP】Python實(shí)現(xiàn)聊天機(jī)器人(微軟小冰)

    【小沐學(xué)NLP】Python實(shí)現(xiàn)聊天機(jī)器人(微軟小冰)

    ??NLP開(kāi)發(fā)系列相關(guān)文章編寫(xiě)如下??: 1 ??【小沐學(xué)NLP】Python實(shí)現(xiàn)詞云圖?? 2 ??【小沐學(xué)NLP】Python實(shí)現(xiàn)圖片文字識(shí)別?? 3 ??【小沐學(xué)NLP】Python實(shí)現(xiàn)中文、英文分詞?? 4 ??【小沐學(xué)NLP】Python實(shí)現(xiàn)聊天機(jī)器人(ELIZA))?? 5 ??【小沐學(xué)NLP】Python實(shí)現(xiàn)聊天機(jī)器人(ALICE)?? 6

    2024年02月05日
    瀏覽(95)
  • 【小沐學(xué)Python】Python實(shí)現(xiàn)Web服務(wù)器(Flask打包部署上線(xiàn))

    【小沐學(xué)Python】Python實(shí)現(xiàn)Web服務(wù)器(Flask打包部署上線(xiàn))

    ??基于Python的Web服務(wù)器系列相關(guān)文章編寫(xiě)如下??: ??【W(wǎng)eb開(kāi)發(fā)】Python實(shí)現(xiàn)Web服務(wù)器(Flask快速入門(mén))?? ??【W(wǎng)eb開(kāi)發(fā)】Python實(shí)現(xiàn)Web服務(wù)器(Flask案例測(cè)試)?? ??【W(wǎng)eb開(kāi)發(fā)】Python實(shí)現(xiàn)Web服務(wù)器(Flask部署上線(xiàn))?? ??【W(wǎng)eb開(kāi)發(fā)】Python實(shí)現(xiàn)Web服務(wù)器(Tornado入門(mén))?? ??【W(wǎng)eb開(kāi)

    2024年02月12日
    瀏覽(92)
  • 【小沐學(xué)NLP】Python實(shí)現(xiàn)聊天機(jī)器人(Selenium、七嘴八舌)

    【小沐學(xué)NLP】Python實(shí)現(xiàn)聊天機(jī)器人(Selenium、七嘴八舌)

    ??NLP開(kāi)發(fā)系列相關(guān)文章編寫(xiě)如下??: 1 ??【小沐學(xué)NLP】Python實(shí)現(xiàn)詞云圖?? 2 ??【小沐學(xué)NLP】Python實(shí)現(xiàn)圖片文字識(shí)別?? 3 ??【小沐學(xué)NLP】Python實(shí)現(xiàn)中文、英文分詞?? 4 ??【小沐學(xué)NLP】Python實(shí)現(xiàn)聊天機(jī)器人(ELIZA))?? 5 ??【小沐學(xué)NLP】Python實(shí)現(xiàn)聊天機(jī)器人(ALICE)?? 6

    2024年02月08日
    瀏覽(101)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包