Android and ffmpeg. Play video (with sound) - java

I have compiled ffmpeg library add it to my project and now I want to play video (with full list of options - stop, pause, forward, backward etc). I have read roman10 ffmpeg tutorial. And I also find out tutorial which describes how play video with ffmpeg and SDL framework. The difference (if I have correctly understood) is that in roman's tutorial each frame of video turns into a Bitmap and is then passed to Java code where it shows on SurfaceView. And in the second tutorial, the video is playing with the help of the SDL framework without passing it back to Java code.
I want to ask some questions:
Which way is better: return Bitmap back to Java and show it on SurfaceView or play it with SDL?
How can I play the sound of my video (can I do it with ffmpeg or do I need some additional libraries)?

this might help you
https://github.com/vanevery/JavaCV-0.5-Stream-Test
https://github.com/vanevery/JavaCV_0.3_stream_test
It's a player based on ffmpeg streaming.

Related

Playing h265 HEVC in a JavaFX client

I had a small JavaFX application to play some GoPro videos on a windows / linux client. In the past I had using a GoPro 4. I've downloaded the video to the client and play it from the local storage. Like this:
File file = new File("AnyVideo.MP4");
Media m = new Media(file.toURI().toString());
MediaPlayer mp = new MediaPlayer(m);
mp.setAutoPlay(true);
mediaView.setMediaPlayer(mp);
I'll try to switch to the new GoPro 6 now. But it doesn't worked as expected.
The problem is probably that the JavaFX MediaPlayer did not support the codec from the new GoPro 6.
GoPro 4: h264 AVC video codec
GoPro 6: h265 HEVC video codec
The JavaFX MediaPlayer supports only the h264 codec.
Did anyone know a way how I can play a h265 HEVC video with my JavaFX application. In the best case a solution wich can play the video immediatly from the camera without download the video first to the client. The GoPro has a smal Media Server to get the video over HTTP. as example:
http://10.5.5.9:8080/videos/DCIM/100/GPR10973.MP4
Native JavaFX Solution
Perhaps this is a duplicate or at least related to:
Adding other video codecs / DVD support to JavaFX 2.2.
See my answer to that question for links to related feature requests in the JavaFX bug tracker system.
Solutions using non-JavaFX tech from JavaFX
There are other solutions than those discussed in answers to that question which may work for you. Especially if your primary concern is just getting some kind of playback, even if it doesn't have deep integration with the JavaFX media system.
For instance, other approaches than native JavaFX playback could be:
Using VLCJ with some kind of Swing integration (such as a SwingNode, though that may or may not work).
Rendering the VLCJ video into a JavaFX ImageView or Canvas.
See related: Playing Video in Java FX using vlcj api.
Which links to the following project: https://github.com/caprica/vlcj-javafx.
Launch a native video player if you don't need the video embedded.
Perhaps Desktop.open() or the Process API could do this.
Call ffmpeg to convert h265 to h264.
I don't know much about this, but a quick google of the topic shows up references to the xuggle project.
Current status of the xuggler project is:
Xuggler is on hiatus as no one is actively developing it anymore. Sorry. That said, you can always find the source code and start hacking yourself. Good luck!
So I wish you good luck with that ;-)
Launching the native browser through a HostServices.showDocument() call to display the video.
Use a third party browsing component that can be integrated into JavaFX and includes support for the media type you want to play back, for example JxBrowser:
H.265 support in jxbrowser
Of the options outlined above, personally, I would recommend using HostServices to play the video in the native browser if that kind of solution will possibly work for you.
Going into detail on various options is probably out of scope for StackOverflow (even the above list starts looking like a sometimes frowned upon library recommendation).

Library that can extract and play video file

I will build a simple program that
Can play video file (.mp4) in my program.
Can extract the video, so that I can get the title, length, subtitle, and the audio, etc.
What is the library in Java that I should use?
I have googled, but I still can not find the best library. By the way, I have tried to download xuggler, but I can not find any file.exe that can install this library.
Please be kind because I never make a code regarding video player and video extractor.
For playing audio and video in your java program use Java Media Framework. It contains jar files that will provide you classes to play and handle audio and video files.
Use this tutorial for understanding of JMF.
I have successed to use xuggler in java. Xuggler website is suck because they don't keep good installer in their website. Every beginner who use xuggler must be have some trouble like me.
For every one who want to use Xuggler, you can follow this website
http://www.benfarahmand.com/2012/11/tutorial-using-xuggler-in-processing.html
the link to download file.exe xuggler is here: https://www.dropbox.com/s/oh7zcyilibzfoyb/xuggle-xuggler.5.1.0-win64-setup.exe
Thank you :)

How to play other video formats in JavaFX

I am busy with a movie/video-clip player/library.
I want to do this in JavafX. Almost 90% of the video clips is in AVI format. I cannot for several reasons covert the movies/video-clips.
I also want the program to mark the video files that were played, from start to complete, so that I will know what have been watched. So the program needs to be able to interact with the video player to know when the video has played to the end.
JavafX doesn't allow playback for AVI files. What's the alternative to be able to use this with? And how will I know if the video has fully played from beginning to end.
I read the following
Adding other video codecs / DVD support to JavaFX 2.2
Where they suggest I use portable VLC player. Is this the best way to use it in JavafX and if possible does the API have register hooks to register a method that can be triggered to know when the video has stopped?

Generate photo SlideShow in Java and Export as Video

I want to create a cross platform SlideShow maker desktop-application (mainly Windows & Mac), the SlideShow will be generated using a set of images with background music, subtitles/captions and there will be a transition between each slide/image.
I have done all the UI in swing and it all works superb on Windows & Mac. Now the only "little" problem is
How to generate a video from a set of images with "transitions" & "subtitles" in java using native java libs/frameworks and add some music in background ;-)
I want the video output format to be at least in avi & mov, with transitions like:
1) fade
2) Zoom (images will zoom-in from e.g. 64x64 to full video size)
3) Multiple (multiple images will appear in single slide)
I have used JMF example to generate .mov from .jpeg images it was buggy but may work if I can add transitions?? But it appears JMF is mainly for media playback it only supports a few media formats (for output).
I have also read a few docs of jffmpeg but it appears it too does not support transitions.
I have also tried FMJ but no use, now I am stuck and need assistance, on how this task can be done in java.
I would be immensely thankful if anyone can guide me in right direction.
--
many thanks
I think you can accomplish this task with xuggler. Check it out. It might fit you needs.
Xuggler

Converting audio files(.3gp) to video with Album cover and uploading to YouTube

I have an audio file in .3gp format on my Android device which I wish
to upload to YouTube. I know that YouTube is a video upload site and
that I need to convert this sound file to video.
I just want an image to display all the time the audio is playing.
Google tells me there are number of tools that can help me. But I want
to do this via java code from my Android device.
Please help.
Thanks.
There are tools such as FFMPEG available for free that allow you to, essentially, mix and convert heterogenous streams. That is you can add a bitmap to a video, create video from slide shows and then add sound etc. (See a related question I asked here).
These programs can be executed from within java applications by making Runtime.exec(..) calls.
Sun has an example for stitching multiple JPEGs together into a movie, you can find it here. You should be able to take this example, (its fairly robust), and add what you need to it.
I recommend looking into the Java Media Framework (FAQ)
You can find a vast collection of sample applets/code at the Sun Solutions page. You can find the API on this page. I do hope this is compatible on the Android platform, as I haven't had any personal experience developing for it. But it might be a good place to start.

Categories