{ "id": "168972", "key": "TIMOB-25020", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "18414", "description": "", "name": "Release 6.2.0", "archived": false, "released": true, "releaseDate": "2017-09-13" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2017-08-23T09:41:53.000+0000", "created": "2017-07-16T13:29:34.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [ "android", "regression" ], "versions": [], "issuelinks": [ { "id": "56308", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "171087", "key": "TIMOB-25770", "fields": { "summary": "Android: requestThumbnailImagesAtTimes() does not work with remote content", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } } ], "assignee": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "updated": "2018-02-12T16:39:27.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [], "description": "*index.js:*\r\n{code:javascript}\r\nvar button = Ti.UI.createButton({\r\n title: \"record\"\r\n});\r\n\r\nbutton.addEventListener('click', recordVideo);\r\n\r\n$.win.add(button);\r\n$.win.open();\r\n\r\nfunction recordVideo() {\r\n var permissionsToRequest = [];\r\n\r\n var audioPermission = \"android.permission.RECORD_AUDIO\";\r\n var hasAudioPerm = Ti.Android.hasPermission(audioPermission);\r\n if (!hasAudioPerm) {\r\n permissionsToRequest.push(audioPermission);\r\n }\r\n\r\n var cameraPermission = \"android.permission.CAMERA\";\r\n var hasCameraPerm = Ti.Android.hasPermission(cameraPermission);\r\n if (!hasCameraPerm) {\r\n permissionsToRequest.push(cameraPermission);\r\n }\r\n\r\n var storagePermission = \"android.permission.READ_EXTERNAL_STORAGE\";\r\n var hasStoragePerm = Ti.Android.hasPermission(storagePermission);\r\n if (!hasStoragePerm) {\r\n permissionsToRequest.push(storagePermission);\r\n }\r\n if(permissionsToRequest.length > 0) {\r\n Ti.Android.requestPermissions(permissionsToRequest, function (e) {\r\n if (e.success) {\r\n showCamera();\r\n }\r\n });\r\n } else {\r\n showCamera();\r\n }\r\n}\r\n\r\nfunction showCamera() {\r\n Ti.Media.showCamera({\r\n autohide: false,\r\n animated: false,\r\n allowEditing: false,\r\n success:function(event) {\r\n var movie = Titanium.Media.createVideoPlayer({\r\n url:event.media.nativePath,\r\n backgroundColor:'#111',\r\n mediaControlStyle: Titanium.Media.VIDEO_CONTROL_EMBEDDED,\r\n scalingMode:Titanium.Media.VIDEO_SCALING_ASPECT_FILL,\r\n width:300,\r\n height:300,\r\n });\r\n $.win.add(movie);\r\n\r\n movie.addEventListener('durationavailable', function() {\r\n movie.requestThumbnailImagesAtTimes([1], Titanium.Media.VIDEO_TIME_OPTION_NEAREST_KEYFRAME, function(response) {\r\n Ti.API.info(\"Thumbnail callback called, success = \" + response.success);\r\n console.log(response);\r\n if(response.success) {\r\n\r\n }\r\n });\r\n });\r\n },\r\n cancel:function() {\r\n console.log(\"cancel\");\r\n },\r\n error:function(error) {\r\n console.log(\"error\");\r\n console.log(error);\r\n },\r\n mediaTypes: [Ti.Media.MEDIA_TYPE_VIDEO],\r\n });\r\n}\r\n{code}\r\n\r\nI'm getting this exception: \r\n\r\n{code:java}\r\n[WARN] W/System.err: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.database.Cursor.moveToNext()' on a null object reference\r\n[WARN] W/System.err: at org.appcelerator.titanium.io.TitaniumBlob.init(TitaniumBlob.java:84)\r\n[WARN] W/System.err: at org.appcelerator.titanium.io.TitaniumBlob.(TitaniumBlob.java:33)\r\n[WARN] W/System.err: at ti.modules.titanium.media.VideoPlayerProxy.requestThumbnailImagesAtTimes(VideoPlayerProxy.java:722)\r\n[WARN] W/System.err: at org.appcelerator.kroll.runtime.v8.V8Object.nativeFireEvent(Native Method)\r\n[WARN] W/System.err: at org.appcelerator.kroll.runtime.v8.V8Object.fireEvent(V8Object.java:62)\r\n[WARN] W/System.err: at org.appcelerator.kroll.KrollProxy.doFireEvent(KrollProxy.java:872)\r\n[WARN] W/System.err: at org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java:1095)\r\n[WARN] W/System.err: at org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:360)\r\n[WARN] W/System.err: at ti.modules.titanium.media.VideoPlayerProxy.handleMessage(VideoPlayerProxy.java:395)\r\n[WARN] W/System.err: at android.os.Handler.dispatchMessage(Handler.java:98)\r\n[WARN] W/System.err: at android.os.Looper.loop(Looper.java:148)\r\n[WARN] W/System.err: at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:118)\r\n{code}\r\n", "attachment": [], "flagged": false, "summary": "Android: requestThumbnailImagesAtTimes causes a crash", "creator": { "name": "zozo4kin", "key": "zozo4kin", "displayName": "Zakhar Zhuravlev", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "zozo4kin", "key": "zozo4kin", "displayName": "Zakhar Zhuravlev", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "comment": { "comments": [ { "id": "424653", "author": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "body": "PR: https://github.com/appcelerator/titanium_mobile/pull/9245", "updateAuthor": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "created": "2017-07-25T14:49:51.000+0000", "updated": "2017-07-25T14:50:01.000+0000" }, { "id": "427054", "author": { "name": "smohammed", "key": "smohammed", "displayName": "Samir Mohammed", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~ybanev] Master is merged, waiting for 6_2_X back-port. ", "updateAuthor": { "name": "smohammed", "key": "smohammed", "displayName": "Samir Mohammed", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2017-08-22T21:18:41.000+0000", "updated": "2017-08-22T21:18:41.000+0000" }, { "id": "427086", "author": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "body": "6_2_X: https://github.com/appcelerator/titanium_mobile/pull/9347", "updateAuthor": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "created": "2017-08-23T09:40:25.000+0000", "updated": "2017-08-23T09:40:25.000+0000" }, { "id": "427222", "author": { "name": "smohammed", "key": "smohammed", "displayName": "Samir Mohammed", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Verified fix in SDK Version: 6.2.0.v20170824074531 and SDK Version: 7.0.0.v20170823165814\r\n\r\nTest and other information can be found at: \r\nMaster: https://github.com/appcelerator/titanium_mobile/pull/9245\r\n6_2_X: https://github.com/appcelerator/titanium_mobile/pull/9347", "updateAuthor": { "name": "smohammed", "key": "smohammed", "displayName": "Samir Mohammed", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2017-08-24T22:01:00.000+0000", "updated": "2017-08-24T22:01:00.000+0000" }, { "id": "434189", "author": { "name": "inzori", "key": "inzori", "displayName": "Fabian Martinez", "active": true, "timeZone": "America/Montevideo" }, "body": "This bug has returned on SDK 7.0.1.GA. I'm receiving the same error when trying to create a thumbnail from a videoPlayer on android. It is working on iOS.", "updateAuthor": { "name": "inzori", "key": "inzori", "displayName": "Fabian Martinez", "active": true, "timeZone": "America/Montevideo" }, "created": "2018-02-07T19:14:09.000+0000", "updated": "2018-02-07T19:14:09.000+0000" }, { "id": "434244", "author": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "body": "[~inzori] I am not able to reproduce the problem. Would be able to provide a code sample/project which does and information about the device you are using?", "updateAuthor": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "created": "2018-02-08T12:43:49.000+0000", "updated": "2018-02-08T12:43:49.000+0000" }, { "id": "434249", "author": { "name": "inzori", "key": "inzori", "displayName": "Fabian Martinez", "active": true, "timeZone": "America/Montevideo" }, "body": "Hi, ", "updateAuthor": { "name": "inzori", "key": "inzori", "displayName": "Fabian Martinez", "active": true, "timeZone": "America/Montevideo" }, "created": "2018-02-08T14:05:35.000+0000", "updated": "2018-02-08T14:05:35.000+0000" }, { "id": "434252", "author": { "name": "inzori", "key": "inzori", "displayName": "Fabian Martinez", "active": true, "timeZone": "America/Montevideo" }, "body": "Hi, this is the code in index.js:\r\nfunction doClick(e) {\r\n\tvar auxVideoPlayer = Ti.Media.createVideoPlayer({\r\n\t\tautoplay: false,\r\n\t\turl: 'http://ve-ep.ember.ltd/assets/media/qa/samplevideo-1280x720-5mb.mp4',\r\n\t\theight: 200,\r\n\t\twidth: 300,\r\n\t\tscalingMode: Ti.Media.VIDEO_SCALING_RESIZE_ASPECT_FILL\r\n\t});\r\n\t$.videoWrapper.add(auxVideoPlayer);\r\n\tauxVideoPlayer.requestThumbnailImagesAtTimes([0], Titanium.Media.VIDEO_TIME_OPTION_NEAREST_KEYFRAME, function (e) {\r\n\t\tconsole.log('requested video thumbnail');\r\n\t\tconsole.log(e);\r\n\t\tif (e.success) {\r\n\t\t\tvar image = Ti.UI.createImageView({\r\n\t\t\t\ttop: 0,\r\n\t\t\t\theight: 200,\r\n\t\t\t\twidth: 300,\r\n\t\t\t\timage: e.image\r\n\t\t\t});\r\n\r\n\t\t\tsvView.add(image);\r\n\t\t}\r\n\t\t//auxVideoPlayer = null;\r\n\t\t//$.videoWrapper.removeAllChildren();\r\n\t});\r\n\t$.imageContainer.add(svView);\t\t\r\n}\r\n\r\n$.index.open();\r\n\r\n\r\nIndex.tss:\r\n\".container\": {\r\n\tbackgroundColor:\"white\",\r\n\tlayout: 'vertical'\r\n}\r\n\r\n\"Label\": {\r\n\twidth: Ti.UI.SIZE,\r\n\theight: Ti.UI.SIZE,\r\n\tcolor: \"#000\",\r\n\ttop: 10\r\n}\r\n\r\n\"#label\": {\r\n\tfont: {\r\n\t\tfontSize: 12\r\n\t}\r\n}\r\n\r\n\"#imageContainer\": {\r\n\ttop: 10,\r\n\ttouchEnabled: false,\t\r\n}\r\n\"#videoWrapper\": {\r\n\tvisible: true,\r\n\ttop: 10,\r\n\theight: Ti.UI.SIZE,\r\n\twidth: Ti.UI.SIZE\r\n}\r\n\r\nIndex.xml\r\n\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n\r\n\r\nThe error I get is this, it isn't creating the thumb but the video is playable:\r\n[WARN] W/System.err: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.database.Cursor.moveToNext()' on a null object reference\r\n[WARN] W/System.err: at org.appcelerator.titanium.io.TitaniumBlob.init(TitaniumBlob.java:84)\r\n[WARN] W/System.err: at org.appcelerator.titanium.io.TitaniumBlob.(TitaniumBlob.java:33)\r\n[WARN] W/System.err: at ti.modules.titanium.media.VideoPlayerProxy.requestThumbnailImagesAtTimes(VideoPlayerProxy.java:755)\r\n[WARN] W/System.err: at org.appcelerator.kroll.runtime.v8.V8Object.nativeFireEvent(Native Method)\r\n[WARN] W/System.err: at org.appcelerator.kroll.runtime.v8.V8Object.fireEvent(V8Object.java:62)\r\n[WARN] W/System.err: at org.appcelerator.kroll.KrollProxy.doFireEvent(KrollProxy.java:936)\r\n[WARN] W/System.err: at org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java:1159)\r\n[WARN] W/System.err: at org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:363)\r\n[WARN] W/System.err: at android.os.Handler.dispatchMessage(Handler.java:98)\r\n[WARN] W/System.err: at android.os.Looper.loop(Looper.java:154)\r\n[WARN] W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6077)\r\n[WARN] W/System.err: at java.lang.reflect.Method.invoke(Native Method)\r\n[WARN] W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)\r\n[WARN] W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)\r\n[ERROR] TiExceptionHandler: (main) [5511,5511] ----- Titanium Javascript Runtime Error -----\r\n[ERROR] TiExceptionHandler: (main) [0,5511] - In /alloy/controllers/index.js:71,18\r\n[ERROR] TiExceptionHandler: (main) [0,5511] - Message: Uncaught Attempt to invoke interface method 'boolean android.database.Cursor.moveToNext()' on a null object reference\r\n[ERROR] TiExceptionHandler: (main) [0,5511] - Source: auxVideoPlayer.requestThumbnailImagesAtTimes([0], Titanium.Media.VIDEO_TIME_OPTION_NEAREST_KEYFRAME, function (e) {\r\n[ERROR] V8Exception: Exception occurred at /alloy/controllers/index.js:71: Uncaught Attempt to invoke interface method 'boolean android.database.Cursor.moveToNext()' on a null object reference\r\n[ERROR] V8Exception: Attempt to invoke interface method 'boolean android.database.Cursor.moveToNext()' on a null object reference\r\n[WARN] MediaPlayer: Couldn't open http://ve-ep.ember.ltd/assets/media/qa/samplevideo-1280x720-5mb.mp4: java.io.FileNotFoundException: No content provider: http://ve-ep.ember.ltd/assets/media/qa/samplevideo-1280x720-5mb.mp4\r\n\r\n\r\n", "updateAuthor": { "name": "inzori", "key": "inzori", "displayName": "Fabian Martinez", "active": true, "timeZone": "America/Montevideo" }, "created": "2018-02-08T14:10:22.000+0000", "updated": "2018-02-08T14:10:22.000+0000" }, { "id": "434255", "author": { "name": "inzori", "key": "inzori", "displayName": "Fabian Martinez", "active": true, "timeZone": "America/Montevideo" }, "body": "Sorry for the bad code sent.\r\nThis is the correct index.js. Works on iOS but not android.\r\n\r\nfunction doClick(e) {\r\n\tvar svView = Ti.UI.createView({\r\n\t\ttop: 0,\r\n\t\theight: 200,\r\n\t\twidth: 300\r\n\t});\r\n\tvar auxVideoPlayer = Ti.Media.createVideoPlayer({\r\n\t\tautoplay: false,\r\n\t\turl: 'http://ve-ep.ember.ltd/assets/media/qa/samplevideo-1280x720-5mb.mp4',\r\n\t\theight: 200,\r\n\t\twidth: 300,\r\n\t\tscalingMode: Ti.Media.VIDEO_SCALING_RESIZE_ASPECT_FILL\r\n\t});\r\n\t$.videoWrapper.add(auxVideoPlayer);\r\n\tauxVideoPlayer.requestThumbnailImagesAtTimes([0], Titanium.Media.VIDEO_TIME_OPTION_NEAREST_KEYFRAME, function (e) {\r\n\t\tconsole.log('requested video thumbnail');\r\n\t\tconsole.log(e);\r\n\t\tif (e.success) {\r\n\t\t\tvar image = Ti.UI.createImageView({\r\n\t\t\t\ttop: 0,\r\n\t\t\t\theight: 200,\r\n\t\t\t\twidth: 300,\r\n\t\t\t\timage: e.image\r\n\t\t\t});\r\n\r\n\t\t\tsvView.add(image);\r\n\t\t}\r\n\t\t//auxVideoPlayer = null;\r\n\t\t//$.videoWrapper.removeAllChildren();\r\n\t});\r\n\t$.imageContainer.add(svView);\t\t\r\n}\r\n\r\n$.index.open();", "updateAuthor": { "name": "inzori", "key": "inzori", "displayName": "Fabian Martinez", "active": true, "timeZone": "America/Montevideo" }, "created": "2018-02-08T14:18:59.000+0000", "updated": "2018-02-08T14:18:59.000+0000" }, { "id": "434293", "author": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "body": "Thank you for the sample. I was able to reproduce the issue.", "updateAuthor": { "name": "ybanev", "key": "ybanev", "displayName": "Yordan Banev", "active": true, "timeZone": "Europe/Athens" }, "created": "2018-02-09T15:38:34.000+0000", "updated": "2018-02-09T15:38:34.000+0000" } ], "maxResults": 10, "total": 10, "startAt": 0 } } }