Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for uploading and recording videos #4

Open
nicolas-raoul opened this issue Sep 30, 2015 · 21 comments
Open

Add support for uploading and recording videos #4

nicolas-raoul opened this issue Sep 30, 2015 · 21 comments

Comments

@nicolas-raoul
Copy link
Member

nicolas-raoul commented Sep 30, 2015

including transcoding to Wikimedia-accepted format

Warning: We have to pay special attention to quality (on-topic, encyclopedic, good technical quality). A 2021 photo+video contest ended up with hundreds of high-quality photos but only one high-quality video.

misaochan added a commit that referenced this issue Nov 9, 2015
@nicolas-raoul
Copy link
Member Author

nicolas-raoul commented Jan 25, 2016

Commons only accepts WebM (VP8, VP9) and Ogg Theora videos.

This converter could be useful if converting on Android proves inconvenient: https://tools.wmflabs.org/videoconvert/index.php
I see a "Auto upload to Commons after conversion is done?" option which is checked but the video does not get uploaded...

2020 update: Now seems to be at https://videoconvert.toolforge.org

@misaochan
Copy link
Member

This was suggested on the grant talk page:

"I have two additional features to request which could probably make use of the storage and batch processing infrastructure of https://tools.wmflabs.org/video2commons/ - this would allow the uploading of videos and audios - whose formats are difficult to manage otherwise. Shyamal (talk) 08:44, 30 November 2018 (UTC)"

Audio/video support is a suggestion I receive pretty often. Might be worth considering this for a future grant.

Also, should I create an additional issue for audio?

neslihanturan pushed a commit that referenced this issue Dec 3, 2018
* Add "rawUsername" (without underscore instead of spaces) to SessionManager as Bundle to preserve string.

* Update UploadController.java

* Update UploadController.java

* Update for my fork (#4)

*  Added resaons in dropdown list

* Made changes

* Fixed Conflicts

*  Shifted strings to String.xml

* Localisation updates from https://translatewiki.net.

* Remove unused mediawiki api dependency (#1991)

* Categories with pipe suffix (#1873)

* Bug fix issue #1826
Changes made :
-Certain category names used to show suffixed with strings prefixed with pipe '|'. Removed everything after the pipe. As per the discussion on the thread, its safe to remove everything after the pipe, including the pipe

* review suggested changes
*Code formatting
*Extracted out the index of pipe in a variable
*Added issue link in comments

* Remove libraries section from README (#1988)

* Remove libraries section from README

* Add wiki link to "libraries used" to README

* Localisation updates from https://translatewiki.net.

* Localisation updates from https://translatewiki.net.

* Localisation updates from https://translatewiki.net.

* Main screen ui changes, fixes #725  Main screen UI overhaul (#1922)

* Delete Contributions Activity content to rewrite it

* Add layout for new Contributions Activity design

* Bind views

* Override auth cookie required

* Add tabs and fragments method

* Create ContributionsFragment which will hold ContributionsListFragment and MediaDetailsFragment

* Add NearbyFragment which will hold NearbyMapFragment and NearbyListFragment

* Add ContributionsActivityPagerAdapter inner class to manage view pager

* Create strings will be written on tabs for contributions and nearby

* Create setTabAndViewPagerSynchronisation method to sycn view pager and tab layout. If user swipe pages, tabs will also change (and vice versa)

* Add theme dependent background color for Drawer Layout of activity_contributions layout file

* Add theme dependent background color for tabs in main

* Create Contributions Fragment structure which will hold Media Detail Fragment and Contributions List Fragment

* Inifilate contributions list fragment view

* Create variables and methods to reuse and create Media Detils Fragment and Contributions List Fragment which will be inside Contribution Fragment

* Override cursor loader methods

* set MediaDetilsView fragment or ContributionListFragment according to users state

* Show details of an image when item is clicked

* Add delete and retry functionality, note: not tested yet

* Override media count methods

* Implement onBack Pressed settings

* Register and unregister datasetObservers

* Add contributin list fragment

* Add contribution list layout with FABs for camera and galerry

* Make sure we called onAuthAcquired from fragment after is is attached

* Create ContributionListViewUtils class to change visibility of views according to MediaDetailsFragment visiblity or their loading state

* Make number of uploads visible if contribution list is visible and number of uploads is uploaded. Progress bar is visible if contribution list is visible and number of uploads are uploading. Both invisible if Media Details Fragment is visible

* Return parent fragment instead of parent activity

* GetPagerFragment instead of getActivity since currently ContributionsFragment take over responsibility from ContributionsActivity

* Add contribution number next to tab text for contribution, as discussed in thread

* Remove number of uploads from contributions fragment since we moved it text of tab layout

* Add unread notifications asynctask to check unread notifications on background

* Save latest time user notification activity viewed

* Add shared preferences provider for latest notification activity visit time

* Add shared preferences provider for latest notification activity visit time

* Change notification icon (add blue dot) whenever a notification comes

* Recover notifications state on come back to contributions list from media details fragment

* Add date with year parameter to Notification class, because we will use it on comparasion of dates

* Check if user visited noifications activity after last notification came

* Add ation to notification icon

* Add nearby custom card view class

* Add card view to activity

* Add a button which will be displayed when nearby permission is not granted thus closest point can't be displayed on main screen. Besides, theme dependent click styles are added to button

* Add button click and permission request logic. Not: solve why location manager is null

* Inject location manager to activity instead

* Make card view dismissable with swip

* Add preference to disable or display closest nearby location

* Add a bugfix to set visibility of nearby notification cardview

* Add UI modifier methods to display notifications

* Modify getFromWikidataQuery method, so that based on the restunClosestResult boolean, we get only the closest nearby place, instead of fetching bunch of nearby places each time

* Make inner class vaariables public to reach them out of package

* Temporarily comment out icon setter methods since it crashes under API19

* Inject location manager

* Register location manager accoring to permission is given, then call nearby card view updater methods

* Change method calls loadAttractionsFromLocation by considering new parameter to decide between closest nearby call or an usual nearby call

* Add progress bar to nearby cardview

* Fix notifications string

* Hide nearby card view when Media Details is visible

* Change tab on nerby card view click

* Add hardcoded strings to strings.xml

* Move nearby activity to new nearby frament

* Add fragments for nearby list and map into outer nearby fragment

* Change options menu item according to tab view

* Make nearby card view invisible on swipe to nearby tab

* Use retained nearby fragment

* Add action to list sheet button

* This commit caused contrib list become invisible thus,
Revert "Use retained nearby fragment"

This reverts commit 86b3633.

* Make sure retained fragments are used for -both- nearby and contrib fragments

* Remove unrelated part added because of confusion, sorry

* Make sure nearbyNotificationCardView visibility works corrent

* Move nearby methods from nerby activity to nearby fragment, and add a lastLocationDuplicate variable to distinguish first time location from nearby fragment and nearby notification card on contributions activity

* Change activity.findViewByID lines with parentFragment.view.findViewById

* Remove toolbar from nearby fragment, since contributions activity already has

* Disable view pager swipe, since using map is very hard with swipe option of view pager

* Place progress bar inside nearby card notification to center

* Make sure using retaied nearby map fragment and nearby list fragment inside nearby fragment

* Update nearby notification content on slight location updates too, if it is first update after on resume. This prevented very long time loading progress bar

* Add case for no nearest pleace found, to prevent bug

* Prevent a possible bug can be caused from activity already killed

* Add click actions to FAB buttons in contributions list fragment. And arrange FAB margins

* Try to use a new location manager instance instead of using single object for both nearby map and nearby notification card view. Because location manager has a state mechanism which is designed to be called from a single point. When I call same methods from both nearby card view notification and nearby map, next update time of map etc. gets confused.

* Set radius to initial value on getFromWikidataQuery (when it is called for getting closest result to be used in nearby card view notification). Normally, algorithm increase radius, this technique works for nearby map but when it comes to finding nearest point, it can return null

* Add an enum to make card view visibility more stable, however, still there is a bug.

* Prevent some more nearby card view visilbility bugs, however still there is a bug

* Add some nullchecks for precaution

* Check nearby permission and refresh nearby view if nearby tab selected, othervise do nothing

* Send user to contrib tab if permission is denied after masrhmallow

* Change nearby fragment background so that progress bar is visible now

* Reduce code duplicate

* request location and gps permission from contribution nearby car view too

* Make sure using retained fragments

* Make sure Contrib list fragment is retained on orientation change

* Fix NPE at options menu

* Make fragment flag fancier, define it per fragment instance, instead of activity

* Fix Service leak and onsavedInstance NPE errrors both occured on orientation change

* Refresh nearby map on orientation change

* Remove unused imports, organise logs and add comments for NearbyMapFragment class

* Remove all references of nearby activity, since we don't use it anymore

* Remove unused imports, organise logs and add comments for Nearby Controller

* Remove unused imports, organise logs and add comments for NearbyFragment

* Remove unused imports, organise logs and add comments for NearbyNotificationCardView

* Change class name from Contributions Activity to Main Activity. Remove unused imports, organise logs and add comments for MainAtivity

* Remove extra spaces

* Remove unused imports and logs

* Remove unused imports, organise logs and add comments for LocationServiceManager

* Remove unused imports, organise logs and add comments for NotificationsActivity

* Remove unused imports, organise logs and add comments for Contributions Fragment

* bug fix nearby notification card dismiss/restore issue

* Change display_nearby_notification_summary varibale with Tap here to see the nearest place that needs pictures

* Add nearest place notification card dismiss toast

* Fix mistake made on previous commit, while fixing conflicts

* Set no data yet message invisible after contributions list is loaded

* Change FAB margins, according to Josephine's review

* Change FAB margins, according to Josephine's review

* Change contributions list background to white, to make FAB more visible

* Add infobutton with popup window next to nearby tba, to explain what does this tab do

* Change hambuger icon to back arrow when media details activity visible

* On back button clicked from nearby fragment, switch back to contributions fragment, instead of closing the app

* Check nearby card view visibility on coming back from media details activity

* Change notification icon with default vector supplied by android vector repos. If we use the one I drawn on inkscape, produced vector is not compatible with API level 19 and below. I couldn't find a proper solution, and decided to change icon

* Fix a possible NPE, caused by loation manager has Main activity reference after it is destroyed

* Change hardcoded string with var from string xml

* Make sure you listen storage permissions from contribution list framgent FABs

* Make sure you listened storage permissions for Neaby fragment buttons too

* Check NPEs causing crashes. Now it does not crash after coming back from settings activity

* Make notification icon compatible with <API19 devices, by drawing and using .png images

* Change back icon arrow vector with png

* Attempt to solve location manager caused memory leak

* Fix memory leaks and optimize imports

* Merge 2.9 release

* Small ui fixes on new main ui (#1995)

* Return to main activity from notifications activity on back button is pressed

* Make nearby info image a little far from nearby text, to prevent wrong clicks

* Bug fix issue #1999 (#2000)

* Added a threshold on swipe, ie. if a swipe is considered a swipe only if it covers a distance of 100dp

* Multiple uploads with over haul (#1968)

* Added new upload activity that receives shared files from the gallery.  Cards show and hide, plus titles are correct.  Displayed thumbnails for the shared images

* Better handling of the view paging plus error handling for required fields.

* Code cleanup to make things more readable.

* Extracted a model from the category search fragment that can possibly be shared with the new upload activity.

* Added category selection to the combined upload screen.

* Cleanup before the home-stretch on the GUI.

* Adding license selection.

* Fixed build warnings + cleanup

* Start to support the dark theme.

* Work in progress to add quality checking.

* Fixing merge.

* GPSExtractor: optimized away the EXifInterface object

* Implemented submit functionality, temporarily fixed jacoco crash by disabling DUMMY UploadView object.

* Implemented uploading of categories along with the picture. The category screen now displays GPS and recent categories when nothing is searched.

* Implemented caching of files. Did some work on picture quality detection.

* Implemented too dark picture detection.

* Added a side card for zoom and map buttons along with pretty animations for stuff.

* Added duplicate image on commons checking and fixed files not getting proper file extensions in several places.

* Added support for map button and switched in-app upload buttons to UploadActivity

* Pretty pretty animations!

* Implemented zoom functionality for th background image. Just pinching on the image works instead of requiring buttons.

* Added multi-language descriptions with categories by region.

* Reimplemented the duplicate title checker and implemented a check against putting the same language twice in the description.

* Javadocs for Description and UploadPresenter, plus some general cleanup.

* Small code changes.

* Implemented login checks for the Upload screen.

* Implement receiving data from Nearby.

* Feature/permissions library (#1855)

* Added permission for Dexter, the runtime permission handling library

* [Preparing fir issue #1773] Added a utility function which would take the user to app settings screen where he could manually give us the required permission

* Added an alert dialog with positive and negative callback [Preparing fir issue #1773]

* Improvements in the way External Storage Permission is handled in MultipleShareActivity[Bug fix #1697]
1. Used dexter to handle the external storage permission
2. Behaviour changes : When user tries to share(uppload) images to commons via MultipleShareActivity, following decision tree is followed
	a. If the app has permission for external storage, normal upload operation is followed
	b. If the app does not has the permission for external storage, dexter is used to ask for the same
	c. If the user gives us the required permission, normal upload flow is proceeded
	d. If the doesnot gives us the required permission a rationale dialog is shown with the appropriate message to let him know why we need the permission
	e. If he presses okay, steps a-c are followed and if he presses cancel, we close the app.
	f. If while asking for permission, the user chooses never ask again, then next time he tries to upload an image via MSA, the rational dialog follows the app setting screen where he could manually give us the required permission and the onActivityResult of same is handled

* Added a Constants class to handle request and result codes from one place and other related constants common to the all app elements

* replaced hardcoded strings ok and cancel in DialogUtil to string resources

* init permission rationale dialog in activities onCreate

* Code formatting, updated access modifiers wherever required, added javadocs for new methods created

* *shifted constants to app class
*Added JavaDocs in PermissionUtils

* removed class REQUEST_CODES from CommonsApplication and instead put the enclosing constants in the App class itself

* Made Codacy happy.

* Abstarcted permission acquisition into new class DexterPermissionObtainer

* Fixed Nearby upload detection

* Migrated bad picture detection from AsyncTask to RxJava.

* Removed ShareActivity and related dead code

* Removed dead or duplicate code from FileProcessor

* Added info button to title EditText

* Fixed the add description button not disappearing.
Added "Starting Upload" toast.
Added link to the license on final screen.
Made it so that the map button is hidden when image lacks gps coords.

* Support in app multiple uploads

* Minor changes to fix build

* Changes to fix pending issues with upload flow

* Fix display of similar image fragment

* When uploading several files at once the date is missing #1854 (#2)

* Bug fix issue #1854
* updated ContributionsDao to save create date, which it was not doing currently [it was instead saving current date]
* UploadItem accepts are dateCreated param
* Added a function in UploadModel, getFileCreatedDate which tries to fetched the file creaction date from all possible content providers.

* Fix pending issues in upload flow

* Make multiple uploads work for Google Photos

* Fix default state for upload activity

* Fix keyboard state for license screen

* Fix descriptions for uploads

* wip

* Fix language spinner

* Fix visibility error on media details view (#2009)

* Localisation updates from https://translatewiki.net.

* Update UploadController.java

* Repair gradle file

Repair gradle build file so that it uses buildToolsVersion buildToolsVersion.

* Repair gradle

repair gradle

* repair gradle

repair gradle to fix Travis

* Update UpdateModel()

sessionManager.getUserName() >> sessionManager.getRawUserName()

It will build new Contribution with stored username string without underscore.

* Add getAuthorName. In case getRawUserName return null as described in #1982 this method, will return getUsername. Users with underscore issue will see the fix after re-log.
ashishkumar468 pushed a commit that referenced this issue Mar 26, 2019
* Use JSON APIs for explore

* With tests

* Use JSON APIs for explore

* With tests

* BugFix #2731 (#4)

* Increased sdk version to 23

* with more robust tests

* Fix crashes and other reported issues

* Add javadocs

* Use common method for search and categories

* Add javadocs
@misaochan
Copy link
Member

@Brion has offered to help implement this, yay! :)

We should talk about how to best handle potential video-selfie-pocalyptic issues, too. I personally think that it would suffice to have a simple addition to the tutorial or a tooltip, when the feature is implemented... but am open to other suggestions.

@bvibber
Copy link
Contributor

bvibber commented Feb 4, 2020

My rough plan is to test on-device transcoding to VP8 or VP9 since that can make use of the device OS and hardware codecs -- Android provides most of the plumbing needed. Performance will make or break this, but I think it should be adequate...

It might be possible to combine transcode and upload into a single pass, but I'm not sure of that (depends on if we need the final file size before we start, I forget).

I'm busy with a conference the next couple weeks; will start experimenting with the Android transcoding mid February.

@WikiDocJames
Copy link

Having the ability to upload video directly from my phone using the commons app would be wonderful. Just took some video of leaping benny, a fish, and the still images do not do them justice.

@nicolas-raoul nicolas-raoul changed the title Add support for videos Add support for uploading videos Aug 27, 2020
@maskaravivek maskaravivek reopened this Oct 10, 2020
@ashishkumar468
Copy link
Collaborator

My bad, Thanks @maskaravivek, I had accidentally closed this one

@jidanni
Copy link
Contributor

jidanni commented Nov 17, 2020

All I know is I have a

intent://media/external/video/media/212369#Intent;scheme=content;type=video/*;launchFlags=0x13080000;S.android.intent.extra.TITLE=V_20201117_093305_vHDR_On%201.mp4;end 
------------ 
ACTION: android.intent.action.VIEW 
DATA: content://media/external/video/media/212369 
MIME: video/* 
URI: intent://media/external/video/media/212369#Intent;scheme=content;type=video/*;launchFlags=0x13080000;S.android.intent.extra.TITLE=V_20201117_093305_vHDR_On%201.mp4;end 
FLAGS: 
FLAG_RECEIVER_FOREGROUND 
FLAG_ACTIVITY_FORWARD_RESULT 
FLAG_ACTIVITY_PREVIOUS_IS_TOP 
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET 
EXTRAS: 
1 Class: java.lang.String 
Key: android.intent.extra.TITLE 
Value: V_20201117_093305_vHDR_On 1.mp4 

------------ 
MATCHING ACTIVITIES: 
Video player (com.asus.gallery - com.asus.gallery.app.MovieActivity) 
VLC (org.videolan.vlc - org.videolan.vlc.StartActivity) 

that my phone makes, that I want to upload directly, without even knowing what formats are even all about.

@jidanni
Copy link
Contributor

jidanni commented Nov 17, 2020

For instance, with YouTube no matter what format we upload in, it is not exposed to the user.

And when people view the video on YouTube, it is usually not in the same format that it was uploaded in anyway. Therefore we see websites take care of all this legal stuff for the user automatically.

@nicolas-raoul nicolas-raoul changed the title Add support for uploading videos Add support for uploading and recording videos Feb 16, 2021
@misaochan
Copy link
Member

Hi @Brion , any chance you are still interested in working on this? We've received quite a few requests for video support recently. :)

@bvibber
Copy link
Contributor

bvibber commented Mar 22, 2021

pops up

@misaochan ooh I am still interested in this, as long as the work can be time-boxed.

As long as y'all can provide for the large-file upload capability, I can work out a converter that'll use the tools provided by Android itself to do a codec & media format conversion before upload, GPU-accelerated automatically where supported. This'll take some battery power but not as much as re-encoding on CPU, and ideally can be "hidden" as part of the upload UI so users don't have to do anything special to make it work.

I think I can do this in Kotlin directly; if I have trouble with that I can make a Java class you can call from Kotlin.

The main thing is this requires infrastructure in the app for having a converted version in local storage that's sent to upload in place of the original selected from the media gallery, and a UI with progress bar & cancellation button in between hitting "upload" and it going up.

I'll leave it to you folks how to work out the UI. :)

Let me know what kind of schedule you're looking at; I've got some web video stuff to prioritize in the next couple weeks, then I'm mostly moving on to Wikifunctions stuff but can keep time free for specific work like this!

@Rishavgupta12345

This comment was marked as outdated.

@nicolas-raoul

This comment was marked as outdated.

@OpenGreenStreet
Copy link

It would be really very nice if there was a solution for this!

Is there a timeline for this development?

@misaochan
Copy link
Member

Unfortunately not. :( If anyone is interested in taking this up, please let us know and we would be more than happy to provide support!

@prototyperspective
Copy link

I think first of all it would need to be able to show videos in the search results and to play them. Really sad to see this is still not possible with the app, it's a core feature of WMC to be able to watch videos there. Issue: #5622 I don't think it makes sense to enable uploading before watching videos is made possible.

@OpenGreenStreet
Copy link

Yes, there is something to that: if I upload a video, I want to be able to see the result.

@chrisdebian
Copy link

Wow, this issue is 9 years old ;-) . @bvibber Hi, Brooke, is this something you can help with, it looked like you had some useful input, above?

Thanks,

Chris.

@OpenGreenStreet
Copy link

It would be really great if this very old feature request were implemented.
If even large MP4 files (including videos of up to 29 minutes recorded with a smartphone) were reliably converted when uploading. But that is likely to be a huge challenge.

Even with this, there are always crashes:

https://tools.wmflabs.org/video2commons/

https://tools.wmflabs.org/videoconvert

In the end, I've always had to convert locally (pc) and then upload via the Upload Wizzard.

@WikiDocJames
Copy link

WikiDocJames commented Dec 28, 2024

Yah it would be nice to have MP4 uploads built into the upload wizard with the file format conversion just taken care of and no user every needing to learn about this issue... We may look at funding this.

@prototyperspective
Copy link

I wonder why videoconvert crashes. One could also convert videos locally within the app but I don't know how long it would take with a normal smartphone.
Making mp4 uploads possible via auto-conversion also on PC would be the optimal solution (note that low-resolution video uploads directly from smartphones isn't particularly the most useful needed kind of files), I think WMC has a lot of potential as a video-platform if it was 1. better indexed in Web search engines (which currently semi-censor videos on Commons, not showing them in their Videos tab) and 2. if playing videos within the app (and maybe also NewPipe) would work as well – new issue about that here: #5983 (3. also needed is displaying both file-title and caption not just the latter which often is only complementary to the filetitle or not meant to be a title; #6023).

@OpenGreenStreet
Copy link

@prototyperspective

This is the message I keep getting when converting large videos: https://commons.wikimedia.org/wiki/File:Video2commons.png
It just doesn't happen anymore ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests