HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0317
HSP 初心者動画(MP4)を再生する方法4解決


HSP 初心者

リンク

2020/3/17(Tue) 17:24:24|NO.89736

タイトルにもあるとうり動画(MP4)プレイヤーを作ろうと思います。
調べたらたくさん出てきたのですが、動画の読み込みに失敗しました。
みたいなメッセージが出てきたので
HSP3でも使える動画再生方法を教えて下さい!!
お願いします!!



この記事に返信する


MIZUSHIKI

リンク

2020/3/18(Wed) 22:19:49|NO.89748

これが割と簡単に使えそうです。
https://codetter.com/?p=1096

Codetter:【HSP3】Media Foundationを使用しての動画再生(修正)



HSP 初心者

リンク

2020/3/19(Thu) 10:07:10|NO.89754

すみません。MIZUSHIKIさんが送ってくださったソースコードに
動画の位置を動かせるシークバーを追加できないでしょうか?
難しい質問でごめんなさい。



あらや

リンク

2020/3/20(Fri) 16:17:12|NO.89765

トラックバーで代用してみました。
ドラッグのみ対応です。

キー操作や任意の位置でマウスクリックなども行ないたい場合は頑張ってください。


//↓64ビット整数値変換モジュール #module // このモジュールは↓からいただきました。 // http://hsp.tv/play/pforum.php?mode=pastwch&num=65456 #defcfunc i642str int lowint,int hiint //64ビットの整数を文字列に変換 // lowint...下位32ビットを指定 // hiint...上位32ビットを指定 db = 1.0 lpoke db,0,lowint:lpoke db,4,hiint return strf("%I64d",db) // 文字列を64ビット数値へ変換(API使用) #uselib "Shlwapi.dll" #func StrToInt64Ex "StrToInt64ExA" str, int, var #deffunc str2i64 str s1, var i1 StrToInt64Ex s1, 0, i1; return; #global #define IID_IMFPMediaPlayer "{A714590A-58AF-430a-85BF-44F5EC838D85}" #usecom IMFPMediaPlayer IID_IMFPMediaPlayer "{}" #comfunc IMFPMediaPlayer_Play 3 #comfunc IMFPMediaPlayer_Pause 4 #comfunc IMFPMediaPlayer_Stop 5 #comfunc IMFPMediaPlayer_FrameStep 6 #comfunc IMFPMediaPlayer_SetPosition 7 var, var // 追加 #comfunc IMFPMediaPlayer_GetPosition 8 var, var // 追加 #comfunc IMFPMediaPlayer_GetDuration 9 var, var // 追加 #comfunc IMFPMediaPlayer_SetRate 10 float #comfunc IMFPMediaPlayer_Shutdown 38 newcom iMFPlayer,IMFPMediaPlayer #uselib "Mfplay" #func MFPCreateMediaPlayer "MFPCreateMediaPlayer" wstr,int,int,int,int,var #uselib "Mfplat" #func MFStartup "MFStartup" int,int #func MFShutdown "MFShutdown" #define MFSTARTUP_NOSOCKET 0x1 #define MFSTARTUP_LITE (MFSTARTUP_NOSOCKET) #define MFSTARTUP_FULL 0 MFP_POSITIONTYPE_100NS = 0, 0, 0, 0; // GUID screen 0,800,800 title "Media Foundation (1.3倍速再生サンプル)" LOADED=0 onexit *lEnd objsize 100,24 pos ginfo_winx-500,0 button gosub "Load",*lFileLoad pos ginfo_winx-400,0 button gosub "Play",*lPlay pos ginfo_winx-300,0 button gosub "Pause",*lPause pos ginfo_winx-200,0 button gosub "Stop",*lStop pos ginfo_winx-100,0 button gosub "Step",*lStep // トラックバー pos 0, 0; tWidth = 300; // トラックバーの幅 winobj "msctls_trackbar32", "", 0, 0x40000000 | 0x10000000, tWidth, 24; // WS_CHILD | WS_VISIBLE hTrackbar = objinfo(stat, 2); sendmsg hTrackbar, 0x405, 1, 0; // 位置調整 (TBM_SETPOS) oncmd gosub *tHscroll, 0x0114; // トラックバーの位置取得 (WM_HSCROLL) trackFlag = 1; gosub *lFileLoad // 再生中のループ *main if LOADED { NowTime = ""; PROPVARIANT = 0, 0, 0, 0; // PROPVARIANT構造体の初期化 IMFPMediaPlayer_GetPosition iMFPlayer, MFP_POSITIONTYPE_100NS, PROPVARIANT; // 現在の再生時間を取得(100ナノ秒単位) NowTime = i642str(PROPVARIANT.2,PROPVARIANT.3); // 現在の再生時間を文字列で取得(100ナノ秒単位) if(strlen(NowTime) > 4) { lpoke NowTime, strlen(NowTime) - 4, 0; // 現在の再生時間を下位4桁切り捨てでミリ秒単位に変換 } intNT = int(NowTime); // 全体をミリ秒(整数値)に変換 if( trackFlag ) { sendmsg hTrackbar, 0x405, 1, intNT * 100 / intAT; // トラックバーの位置調整 (TBM_SETPOS) } } wait 10; goto *main; ;stop *lFileLoad dialog "mp4;*.avi;*.mpg;*.mpeg",16 if stat=0{ if LOADED{ return }else{ stop } } file=refstr gosub *lLoad IMFPMediaPlayer_SetRate iMFPlayer,1.3 ;1.3倍速再生 return *lLoad if LOADED{ gosub *lRelease } MFStartup MFPCreateMediaPlayer file, 1,0,0,hwnd,iMFPlayer ; ↑0にすると自動再生しない LOADED=1 PROPVARIANT = 0, 0, 0, 0; // PROPVARIANT構造体の初期化 AllTime = ""; // 動画の読み込み待機 repeat IMFPMediaPlayer_GetDuration iMFPlayer, MFP_POSITIONTYPE_100NS, PROPVARIANT; // 動画全体の長さを取得(100ナノ秒単位) if(stat == 0): break; wait 10; loop AllTime = i642str(PROPVARIANT.2,PROPVARIANT.3); // 動画全体の長さを文字列で取得(100ナノ秒単位) if(strlen(AllTime) > 4) { lpoke AllTime, strlen(AllTime) - 4, 0; // 動画全体の長さを下位4桁切り捨てでミリ秒単位に変換 } else { AllTime = "1"; // 動画の長さが1ミリ秒以下の場合は0除算回避のため1ミリ秒とする } intAT = int(AllTime); // 全体をミリ秒(整数値)に変換 return *lRelease gosub *lStop IMFPMediaPlayer_Shutdown iMFPlayer MFShutdown return *lPlay if LOADED : IMFPMediaPlayer_Play iMFPlayer return *lPause if LOADED : IMFPMediaPlayer_Pause iMFPlayer return *lStop if LOADED : IMFPMediaPlayer_Stop iMFPlayer return *lStep if LOADED : IMFPMediaPlayer_FrameStep iMFPlayer return // トラックバー処理 *tHscroll if( lParam = hTrackbar ) { if( (wParam & 0xFFFF) == 0x0004 ) { // TB_THUMBPOSITION gosub *lPause; // 一時停止 sendmsg hTrackbar, 0x0400, 0, 0; // TBM_GETPOS tPos = stat; intCT = intAT * tPos / 100; // 変更後の時間(ミリ秒) StrCT = ""+intCT+"0000"; // 変更後の時間 文字列形式(100ナノ秒) PROPVARIANT = 20, 0, 0, 0; // PROPVARIANT構造体の初期化 str2i64 StrCT, PROPVARIANT(2); // 文字列を64ビット整数値に変換 IMFPMediaPlayer_SetPosition iMFPlayer, MFP_POSITIONTYPE_100NS, PROPVARIANT; // 再生時間の変更 gosub *lPlay; // 再生再開 trackFlag = 1; } if( (wParam & 0xFFFF) == 0x0005 ) { // TB_THUMBTRACK trackFlag = 0; } } return; *lEnd if LOADED{ gosub *lRelease } mes "MFShutdown:"+stat end



HSP 初心者

リンク

2020/3/23(Mon) 11:47:24|NO.89795

返信が遅くなりました。
あらやさん、長いコードを送っていただき
ありがとうございます!
解決しました!!



ONION software Copyright 1997-2023(c) All rights reserved.