diff --git a/addons/ofxEmscripten/libs/html5video/include/html5video.h b/addons/ofxEmscripten/libs/html5video/include/html5video.h index 0eebbb78adb..9f91cd48a04 100644 --- a/addons/ofxEmscripten/libs/html5video/include/html5video.h +++ b/addons/ofxEmscripten/libs/html5video/include/html5video.h @@ -4,6 +4,7 @@ extern "C"{ extern int html5video_player_create(); extern void html5video_player_delete(int id); extern void html5video_player_load(int id,const char* src); + extern void html5video_player_load_url(int id,const char* src); extern const char* html5video_player_pixel_format(int it); extern void html5video_player_set_pixel_format(int it, const char* format); extern int html5video_player_update(int id, int update_pixels, unsigned char* pixels); diff --git a/addons/ofxEmscripten/libs/html5video/lib/emscripten/library_html5video.js b/addons/ofxEmscripten/libs/html5video/lib/emscripten/library_html5video.js index 694a032736c..61e595337b4 100644 --- a/addons/ofxEmscripten/libs/html5video/lib/emscripten/library_html5video.js +++ b/addons/ofxEmscripten/libs/html5video/lib/emscripten/library_html5video.js @@ -111,7 +111,7 @@ var LibraryHTML5Video = { }, html5video_player_load__deps: ['$GL'], - html5video_player_load: function(player_id, src) { + html5video_player_load_url: function(player_id, src) { VIDEO.player[player_id].src = UTF8ToString(src); var texId = GL.getNewId(GL.textures); var texture = GLctx.createTexture(); @@ -125,6 +125,40 @@ var LibraryHTML5Video = { VIDEO.player[player_id].textureId = texId; }, + html5video_player_load: function(player_id, src) { + + try { + var filePath = UTF8ToString(src); // The path to your file in MEMFS + var data = FS.readFile(filePath, { encoding: 'binary' }); + var ext = filePath.split('.').pop(); + + var stats = FS.stat(filePath) + var fileSizeInBytes = stats.size; + + const blob = new Blob([data], { type: 'video/' + ext }); + const videoSrc = URL.createObjectURL(blob); + + VIDEO.player[player_id].src = videoSrc; + var texId = GL.getNewId(GL.textures); + var texture = GLctx.createTexture(); + texture.name = texId; + GL.textures[texId] = texture; + GLctx.bindTexture(GLctx.TEXTURE_2D, texture); + GLctx.texParameteri(GLctx.TEXTURE_2D, GLctx.TEXTURE_MAG_FILTER, GLctx.LINEAR); + GLctx.texParameteri(GLctx.TEXTURE_2D, GLctx.TEXTURE_MIN_FILTER, GLctx.LINEAR); + GLctx.texParameteri(GLctx.TEXTURE_2D, GLctx.TEXTURE_WRAP_S, GLctx.CLAMP_TO_EDGE); + GLctx.texParameteri(GLctx.TEXTURE_2D, GLctx.TEXTURE_WRAP_T, GLctx.CLAMP_TO_EDGE); + VIDEO.player[player_id].textureId = texId; + + // Check the file size + //console.log('File size:' + fileSizeInBytes); + //console.log('data size:' + data.length); + } catch (error) { + console.error('Error reading file:' + filePath + " " + error); + } + }, + + html5video_player_pixel_format: function(player_id) { var string = VIDEO.player[player_id].pixelFormat; var size = lengthBytesUTF8(string) + 1; diff --git a/addons/ofxEmscripten/src/ofxEmscriptenVideoPlayer.cpp b/addons/ofxEmscripten/src/ofxEmscriptenVideoPlayer.cpp index 2c2e1ff3bae..7cce165fc4e 100644 --- a/addons/ofxEmscripten/src/ofxEmscriptenVideoPlayer.cpp +++ b/addons/ofxEmscripten/src/ofxEmscriptenVideoPlayer.cpp @@ -29,8 +29,8 @@ ofxEmscriptenVideoPlayer::~ofxEmscriptenVideoPlayer() { } bool ofxEmscriptenVideoPlayer::load(string name){ - if (name.substr(0, 12) == "blob:http://" || name.substr(0, 13) == "blob:https://"){ - html5video_player_load(player_id, name.c_str()); + if (name.substr(0, 7) == "http://" || name.substr(0, 8) == "https://"){ + html5video_player_load_url(player_id, name.c_str()); } else{ html5video_player_load(player_id, ofToDataPath(name).c_str()); } @@ -86,7 +86,16 @@ void ofxEmscriptenVideoPlayer::update(){ texture.texData.bAllocated = true; texture.setUseExternalTextureID(html5video_player_texture_id(player_id)); } - } + }else{ + if( !bHadValidFrame && !bWarnBlocked ){ + if( ofGetElapsedTimef() - timePlayRequested > 3.0 ){ + string errorMsg = "ofxEmscriptenVideoPlayer::update video is not playing - check your browser preferences 'Auto Play' and click allow for this site "; + ofLogError() << errorMsg << endl; + std::cout << errorMsg << endl; + bWarnBlocked = true; + } + } + } } void ofxEmscriptenVideoPlayer::play(){ diff --git a/addons/ofxEmscripten/src/ofxEmscriptenVideoPlayer.h b/addons/ofxEmscripten/src/ofxEmscriptenVideoPlayer.h index c3c2b68dff2..d94d00a3824 100644 --- a/addons/ofxEmscripten/src/ofxEmscriptenVideoPlayer.h +++ b/addons/ofxEmscripten/src/ofxEmscriptenVideoPlayer.h @@ -67,4 +67,7 @@ class ofxEmscriptenVideoPlayer: public ofBaseVideoPlayer { ofTexture texture; ofPixels pixels; bool usePixels; + float timePlayRequested = 0; + bool bHadValidFrame = false; + bool bWarnBlocked = false; };