But due to my experience after 4 months of usage i can honestly say i made a wrong choice by selecting libvlc as a framework for my project.
Application is a simple video editing software that plays a chained segments of video.
Problems began once i make an attempt to chain 2 videos. I wanted a seamless playback.
I used following scheme:
A imem module for playback (with audio slave).
vmem and amem for audio and video decoding
smem for transcoding.
I created a stream which was played back by imem and filled with data with a/vmem or smem.
Due to some facts i can't use buffering, i.e fill a stream with 1s of video or so.
Thus i wanted to start players of my video chunks as fast as possible. I used play/pause, but nothing worked. i used callbacks for pause and it also didn't worked. strange things happened when i replaced vmem with smem. seeking and rate stopped to work,i got a bunch of warnings from libavcodec, my experiments with
Code: Select all
:no-hurry and time-sync
I started reading a source code and found many interesting but undocumented things like
Code: Select all
:start-time=
Code: Select all
:input-repeat=
I know that i entered undiscovered area here, but again, i would not get here if i had a public API.
I spent a lot of time studying the code and trying to understand how libvlc callbacks work and how to use them, but, i lost.
I even determined a set of conditions where to expect an error and created workarounds.
I don't want to say that library is bad. It is nice and powerful, just not as versatile as i expected, especially for low-level data access.
I wrote this post to help someone in decision of the framework for his future project. Also it touches some problems that i didn't found in the forum. Maybe i'm wrong, i'm just sharing my experience.
Thanks all