Recherche avancée

Médias (0)

Mot : - Tags -/performance

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (53)

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip core
    autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • Submit bugs and patches

    13 avril 2011

    Unfortunately a software is never perfect.
    If you think you have found a bug, report it using our ticket system. Please to help us to fix it by providing the following information : the browser you are using, including the exact version as precise an explanation as possible of the problem if possible, the steps taken resulting in the problem a link to the site / page in question
    If you think you have solved the bug, fill in a ticket and attach to it a corrective patch.
    You may also (...)

Sur d’autres sites (9851)

  • France rules Google Analytics non-compliant with GDPR

    11 février 2022, par Erin — Privacy

    Breaking news : The French Data Protection Agency, CNIL (Commission nationale de l’informatique et des libertés), has concluded that the use of Google Analytics is illegal under GDPR. The CNIL has begun issuing formal notices to website managers using Google Analytics.

    This follows the January 2022 Austrian Data Protection Authority’s decision to declare Google Analytics illegal to use under GDPR.

    Google Analytics GDPR breaches continue to spread through the EU

    Since the invalidation of the Privacy Shield framework, an agreement between the EU and US that allowed the transfer of data to certified US companies, the CNIL and other EU data protection authorities have received numerous complaints regarding data transfers collected during visits to websites using Google Analytics.

    "It’s interesting to see that the different European Data Protection Authorities all come to the same conclusion : the use of Google Analytics is illegal. There is a European task force and we assume that this action is coordinated and other authorities will decide similarly."

    Max Schrems, European privacy law activist and honorary chair of noyb.eu

    About the CNIL’s decision

    In this model case, the CNIL has found that an unnamed website’s use of Google Analytics is non-compliant with GDPR because it had breached Article 44 which prohibits the transfer of personal data beyond the EU, unless the recipient country can prove adequate data protection. 

    Under the GDPR, personal data covers a range of identifiers including email address, race, gender, phone number to name a few, but the less obvious identifiers include IP addresses or cookie IDs, for instance. 

    The CNIL’s decision was based on the fact that the US does not meet GDPR sufficient levels of data protection as a result of US surveillance laws. Therefore, the unnamed website’s use of Google Analytics created risks for their website visitors when their personal data was exported to the US. 

    At the time of writing, it is unknown if the CNIL has issued a fine for the GDPR breach. However, the website manager of the unnamed website has been ordered by the CNIL to comply with the GDPR and, if necessary, stop using Google Analytics under the current conditions.

    "One thing we’re certain of is that these decisions will continue to roll out throughout the EU and potentially beyond.

    Other countries are imposing their own privacy regulations that closely mirror the GDPR like Brazil’s General Data Protection Law (LGPD), India’s Data Protection Bill, New Zealand’s Privacy Act and Canada’s Personal Information Protection and Electronic Documents Act (PIPEDA) to name a few.”

    Matthieu Aubry, CEO and co-founder of Matomo

    The CNIL offers an evaluation programme to help website managers determine whether web analytics solutions are exempt from collecting data prior to users’ agreement to opt-in through consent screens. Matomo, for instance, is a leading Google Analytics alternative that has been recommended by CNIL and is exempt from tracking consent

    Google Analytics alternative - Twitter
    five5stardesign via Twitter

    English translation : “This is why I anticipated this announcement, gradually moving the analytics of my sites to @matomo_org since several weeks !

    “The @CNIL believes that the use of @googleanalytics is a violation of #GDPR”

    Immediate action required for Google Analytics users

    The CNIL and other EU-based data protection authorities have made their stance on Google Analytics clear and inaction will likely result in fines, which under the GDPR, can be up to €20 million or 4% of the organisation’s global turnover – whichever is higher.

    Based on the CNIL’s formal notice to the model case’s website manager, Google Analytics users should take immediate action to remove any chances of personal data being transferred to the US or find a Google Analytics alternative that is GDPR compliant. 

    CNIL Google Analytics Breach - Twitter
    Virginie Debuisson via Twitter

    English translation : “The CNIL considers that the use of Google Analytics is a violation of the GDPR. I use @matomo_org and I welcome it *winking face* It will squeal tires among growthackers who are slaughtering. Opportunity to look at alternative tools”

    Ready to begin your journey to GDPR compliance with Matomo ? Start your 21-day free trial now (no credit card required) and take advantage of our Google Analytics importer so you don’t lose any of your historical data. 

    What does this mean for Matomo users ?

    As the GDPR continues to evolve, our users can rest assured that Matomo will be at the forefront of these changes. With Matomo Cloud, all data is stored in the EU or in your country of choice when you self-host on your own servers with Matomo On-Premise.

    Conclusion

    Google is in the EU’s crosshairs and organisations that continue to use their tools will be the one’s left to clean up the mess – not Google. Now is the time to act. Search for a Google Analytics alternative and close your compliance gaps today. 

    Join over 1 million other websites using Matomo now. Give Matomo a try with a 21-day free trial – no credit card required. 

    We’d like to also bring attention to the privacy-fighting efforts from noyb and Max Schrems, as this should not go unnoticed. noyb is an independent, non-profit organisation that relies on the support of individuals. Support privacy by supporting noyb – donate or become a member now. 

    Contact details for media :

    For quotes or interviews, please email marketing@matomo.org

  • Android player, FFMPEG, JNI

    14 septembre 2022, par Nikita Pavlenko

    Can I use std::async with jni or I should throughstd::thread or pthread_create ? Because i'm writing android player with my C++ lib that uses std::async for demuxing, video and audio. I saw that every call CallVoidMethod(of course with attach and detach thread) create new thread (thread id in Java methods is increased). And in some time a big error occurres

    


    A/e.androidplaye: java_vm_ext.cc:594] JNI DETECTED ERROR IN APPLICATION: thread Thread[2,tid=3420,Native,Thread*=0xb400007bd4470c00,peer=0x12cc1510,"Thread-8687"] using JNIEnv* from thread Thread[3,tid=3419,Native,Thread*=0xb400007aadc2e400,peer=0x12d00000,"Thread-8688"]&#xA;    java_vm_ext.cc:594]     in call to CallVoidMethodV&#xA;A/e.androidplaye: runtime.cc:675] Runtime aborting...&#xA;    runtime.cc:675] Dumping all threads without mutator lock held&#xA;    runtime.cc:675] All threads:&#xA;    runtime.cc:675] DALVIK THREADS (23):&#xA;    runtime.cc:675] "Thread-8687" prio=10 tid=2 Runnable&#xA;    runtime.cc:675]   | group="" sCount=0 ucsCount=0 flags=0 obj=0x12d80000 self=0xb400007bd4470c00&#xA;    runtime.cc:675]   | sysTid=3420 nice=-10 cgrp=default sched=0/0 handle=0x7aa4166cb0&#xA;    runtime.cc:675]   | state=R schedstat=( 6040359820 215025421 9416 ) utm=498 stm=105 core=1 HZ=100&#xA;    runtime.cc:675]   | stack=0x7aa406f000-0x7aa4071000 stackSize=991KB&#xA;    runtime.cc:675]   | held mutexes= "abort lock" "mutator lock"(shared held)&#xA;    runtime.cc:675]   native: #00 pc 00000000005376cc  /apex/com.android.art/lib64/libart.so (art::DumpNativeStack(std::__1::basic_ostream >&amp;, int, BacktraceMap*, char const*, art::ArtMethod*, void*, bool)&#x2B;128) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #01 pc 00000000006f0e24  /apex/com.android.art/lib64/libart.so (art::Thread::DumpStack(std::__1::basic_ostream >&amp;, bool, BacktraceMap*, bool) const&#x2B;236) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #02 pc 00000000006fe6b0  /apex/com.android.art/lib64/libart.so (art::DumpCheckpoint::Run(art::Thread*)&#x2B;208) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #03 pc 0000000000364174  /apex/com.android.art/lib64/libart.so (art::ThreadList::RunCheckpoint(art::Closure*, art::Closure*)&#x2B;440) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #04 pc 00000000006fce50  /apex/com.android.art/lib64/libart.so (art::ThreadList::Dump(std::__1::basic_ostream >&amp;, bool)&#x2B;280) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #05 pc 00000000006d7ec4  /apex/com.android.art/lib64/libart.so (art::AbortState::Dump(std::__1::basic_ostream >&amp;) const&#x2B;212) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #06 pc 00000000006d2b24  /apex/com.android.art/lib64/libart.so (art::Runtime::Abort(char const*)&#x2B;1016) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #07 pc 0000000000016ea8  /apex/com.android.art/lib64/libbase.so (android::base::SetAborter(std::__1::function<void>&amp;&amp;)::$_3::__invoke(char const*)&#x2B;80) (BuildId: b77c57f68a484ed93d5a7eda59d83bf9)&#xA;    runtime.cc:675]   native: #08 pc 0000000000016450  /apex/com.android.art/lib64/libbase.so (android::base::LogMessage::~LogMessage()&#x2B;352) (BuildId: b77c57f68a484ed93d5a7eda59d83bf9)&#xA;    runtime.cc:675]   native: #09 pc 0000000000445224  /apex/com.android.art/lib64/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)&#x2B;1612) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #10 pc 0000000000329258  /apex/com.android.art/lib64/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list)&#x2B;108) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #11 pc 000000000048d59c  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::AbortF(char const*, ...) (.__uniq.99033978352804627313491551960229047428)&#x2B;144) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #12 pc 0000000000453ad0  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::Check(art::ScopedObjectAccess&amp;, bool, char const*, art::(anonymous namespace)::JniValueType*) (.__uniq.99033978352804627313491551960229047428)&#x2B;4648) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #13 pc 0000000000475e2c  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CheckCallArgs(art::ScopedObjectAccess&amp;, art::(anonymous namespace)::ScopedCheck&amp;, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, art::InvokeType, art::(anonymous namespace)::VarArgs const*) (.__uniq.99033978352804627313491551960229047428)&#x2B;76) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;A/e.androidplaye: runtime.cc:675]   native: #14 pc 0000000000474d4c  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, std::__va_list, art::Primitive::Type, art::InvokeType) (.__uniq.99033978352804627313491551960229047428)&#x2B;268) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #15 pc 00000000005ca9ec  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list) (.__uniq.99033978352804627313491551960229047428.llvm.5591279935177935698)&#x2B;72) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #16 pc 0000000000024ad4  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 174000) (_JNIEnv::CallVoidMethod(_jobject*, _jmethodID*, ...)&#x2B;172) (BuildId: 2f8cba1fdcec13c03a15bf3de18a4ddd1c91325d)&#xA;    runtime.cc:675]   native: #17 pc 000000000002173c  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 174000) (ffmpeg::AndroidPlayer::handleAudioFrame(ffmpeg::Frame const&amp;)&#x2B;184) (BuildId: 2f8cba1fdcec13c03a15bf3de18a4ddd1c91325d)&#xA;    runtime.cc:675]   native: #18 pc 0000000000028488  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 174000) (???) (BuildId: 2f8cba1fdcec13c03a15bf3de18a4ddd1c91325d)&#xA;    runtime.cc:675]   native: #19 pc 00000000000283c0  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 174000) (???) (BuildId: 2f8cba1fdcec13c03a15bf3de18a4ddd1c91325d)&#xA;    runtime.cc:675]   native: #20 pc 000000000002835c  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 174000) (std::__ndk1::__bind_return<void> >, std::__ndk1::tuple, __is_valid_bind_return<void> >, std::__ndk1::tuple >::value>::type std::__ndk1::__bind<void> const&amp;>::operator()(ffmpeg::Frame const&amp;)&#x2B;76) (BuildId: 2f8cba1fdcec13c03a15bf3de18a4ddd1c91325d)&#xA;    runtime.cc:675]   native: #21 pc 00000000000282ec  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 174000) (???) (BuildId: 2f8cba1fdcec13c03a15bf3de18a4ddd1c91325d)&#xA;    runtime.cc:675]   native: #22 pc 0000000000028288  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 174000) (void std::__ndk1::__invoke_void_return_wrapper<void>::__call const&amp;>&amp;, ffmpeg::Frame const&amp;>(std::__ndk1::__bind<void> const&amp;>&amp;, ffmpeg::Frame const&amp;)&#x2B;48) (BuildId: 2f8cba1fdcec13c03a15bf3de18a4ddd1c91325d)&#xA;    runtime.cc:675]   native: #23 pc 0000000000028234  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 174000) (???) (BuildId: 2f8cba1fdcec13c03a15bf3de18a4ddd1c91325d)&#xA;A/e.androidplaye: runtime.cc:675]   native: #24 pc 000000000002725c  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 174000) (std::__ndk1::__function::__func const&amp;>, std::__ndk1::allocator const&amp;> >, void (ffmpeg::Frame const&amp;)>::operator()(ffmpeg::Frame const&amp;)&#x2B;48) (BuildId: 2f8cba1fdcec13c03a15bf3de18a4ddd1c91325d)&#xA;    runtime.cc:675]   native: #25 pc 000000000004039c  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 380000) (???) (BuildId: 9a9d303cb440eed7364800d0ead0962a65175480)&#xA;    runtime.cc:675]   native: #26 pc 000000000003b1f8  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 380000) (std::__ndk1::function<void>::operator()(ffmpeg::Frame const&amp;) const&#x2B;44) (BuildId: 9a9d303cb440eed7364800d0ead0962a65175480)&#xA;    runtime.cc:675]   native: #27 pc 0000000000039dd4  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 380000) (ffmpeg::Player::playAudio()&#x2B;164) (BuildId: 9a9d303cb440eed7364800d0ead0962a65175480)&#xA;    runtime.cc:675]   native: #28 pc 000000000003db90  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 380000) (???) (BuildId: 9a9d303cb440eed7364800d0ead0962a65175480)&#xA;    runtime.cc:675]   native: #29 pc 000000000003db1c  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 380000) (???) (BuildId: 9a9d303cb440eed7364800d0ead0962a65175480)&#xA;    runtime.cc:675]   native: #30 pc 000000000003dacc  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 380000) (???) (BuildId: 9a9d303cb440eed7364800d0ead0962a65175480)&#xA;    runtime.cc:675]   native: #31 pc 000000000003da10  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 380000) (???) (BuildId: 9a9d303cb440eed7364800d0ead0962a65175480)&#xA;    runtime.cc:675]   native: #32 pc 000000000003e6cc  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 380000) (???) (BuildId: 9a9d303cb440eed7364800d0ead0962a65175480)&#xA;    runtime.cc:675]   native: #33 pc 000000000003e5e0  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 380000) (???) (BuildId: 9a9d303cb440eed7364800d0ead0962a65175480)&#xA;    runtime.cc:675]   native: #34 pc 000000000003df50  /data/app/~~kWvaZj7JOt9YyFawweYvtw==/com.example.androidplayer-_Vqw2zfb57LpijMAPW6U4w==/base.apk (offset 380000) (???) (BuildId: 9a9d303cb440eed7364800d0ead0962a65175480)&#xA;    runtime.cc:675]   native: #35 pc 00000000000efb14  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)&#x2B;264) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #36 pc 000000000008c35c  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread&#x2B;68) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   (no managed stack frames)&#xA;    runtime.cc:675] &#xA;    runtime.cc:675] "main" prio=10 tid=1 Native&#xA;    runtime.cc:675]   | group="" sCount=1 ucsCount=0 flags=1 obj=0x71915d18 self=0xb400007bd4472800&#xA;    runtime.cc:675]   | sysTid=3241 nice=-10 cgrp=default sched=0/0 handle=0x7bd5ac64f8&#xA;    runtime.cc:675]   | state=S schedstat=( 20358355629 2398850818 13099 ) utm=1560 stm=474 core=5 HZ=100&#xA;    runtime.cc:675]   | stack=0x7ff2616000-0x7ff2618000 stackSize=8188KB&#xA;    runtime.cc:675]   | held mutexes=&#xA;    runtime.cc:675]   native: #00 pc 0000000000086f90  /apex/com.android.runtime/lib64/bionic/libc.so (syscall&#x2B;32) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;A/e.androidplaye: runtime.cc:675]   native: #01 pc 000000000047cc80  /apex/com.android.art/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)&#x2B;140) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #02 pc 00000000005c8cac  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::FindClass(_JNIEnv*, char const*) (.__uniq.99033978352804627313491551960229047428.llvm.5591279935177935698)&#x2B;1096) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #03 pc 000000000011aae0  /system/lib64/libandroid_runtime.so (android::NativeDisplayEventReceiver::dispatchVsync(long, android::PhysicalDisplayId, unsigned int, android::VsyncEventData)&#x2B;80) (BuildId: f73b7e7fab15dc5b96680181e111fb8f)&#xA;    runtime.cc:675]   native: #04 pc 00000000000af3f0  /system/lib64/libgui.so (android::DisplayEventDispatcher::handleEvent(int, int, void*)&#x2B;204) (BuildId: 3f01a4a30b5fa3a4804b8361ddccc4a3)&#xA;    runtime.cc:675]   native: #05 pc 0000000000018184  /system/lib64/libutils.so (android::Looper::pollInner(int)&#x2B;916) (BuildId: 16796d84bdcf185b2112267dbd820c19)&#xA;    runtime.cc:675]   native: #06 pc 0000000000017d84  /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)&#x2B;116) (BuildId: 16796d84bdcf185b2112267dbd820c19)&#xA;    runtime.cc:675]   native: #07 pc 0000000000154668  /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)&#x2B;48) (BuildId: f73b7e7fab15dc5b96680181e111fb8f)&#xA;    runtime.cc:675]   at android.os.MessageQueue.nativePollOnce(Native method)&#xA;    runtime.cc:675]   at android.os.MessageQueue.next(MessageQueue.java:337)&#xA;    runtime.cc:675]   at android.os.Looper.loopOnce(Looper.java:168)&#xA;    runtime.cc:675]   at android.os.Looper.loop(Looper.java:299)&#xA;    runtime.cc:675]   at android.app.ActivityThread.main(ActivityThread.java:8250)&#xA;    runtime.cc:675]   at java.lang.reflect.Method.invoke(Native method)&#xA;    runtime.cc:675]   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)&#xA;    runtime.cc:675]   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)&#xA;    runtime.cc:675] &#xA;    runtime.cc:675] "Signal Catcher" prio=10 tid=4 WaitingInMainSignalCatcherLoop&#xA;    runtime.cc:675]   | group="" sCount=1 ucsCount=0 flags=1 obj=0x13340270 self=0xb400007b1f611800&#xA;    runtime.cc:675]   | sysTid=3247 nice=-20 cgrp=default sched=0/0 handle=0x7b209aecb0&#xA;    runtime.cc:675]   | state=S schedstat=( 300521 0 2 ) utm=0 stm=0 core=6 HZ=100&#xA;    runtime.cc:675]   | stack=0x7b208b7000-0x7b208b9000 stackSize=991KB&#xA;    runtime.cc:675]   | held mutexes=&#xA;    runtime.cc:675]   native: #00 pc 00000000000db77c  /apex/com.android.runtime/lib64/bionic/libc.so (__rt_sigtimedwait&#x2B;12) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #01 pc 000000000009a1b8  /apex/com.android.runtime/lib64/bionic/libc.so (sigwait64&#x2B;92) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #02 pc 000000000057420c  /apex/com.android.art/lib64/libart.so (art::SignalCatcher::WaitForSignal(art::Thread*, art::SignalSet&amp;)&#x2B;108) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #03 pc 0000000000573e1c  /apex/com.android.art/lib64/libart.so (art::SignalCatcher::Run(void*)&#x2B;228) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #04 pc 00000000000efb14  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)&#x2B;264) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #05 pc 000000000008c35c  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread&#x2B;68) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   (no managed stack frames)&#xA;    runtime.cc:675] &#xA;    runtime.cc:675] "perfetto_hprof_listener" prio=10 tid=7 Native (still starting up)&#xA;    runtime.cc:675]   | group="" sCount=1 ucsCount=0 flags=1 obj=0x0 self=0xb400007b138a8800&#xA;    runtime.cc:675]   | sysTid=3248 nice=-20 cgrp=default sched=0/0 handle=0x7b208b0cb0&#xA;    runtime.cc:675]   | state=S schedstat=( 175052 0 3 ) utm=0 stm=0 core=6 HZ=100&#xA;A/e.androidplaye: runtime.cc:675]   | stack=0x7b207b9000-0x7b207bb000 stackSize=991KB&#xA;    runtime.cc:675]   | held mutexes=&#xA;    runtime.cc:675]   native: #00 pc 00000000000daad8  /apex/com.android.runtime/lib64/bionic/libc.so (read&#x2B;8) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #01 pc 000000000001d840  /apex/com.android.art/lib64/libperfetto_hprof.so (void* std::__1::__thread_proxy >, ArtPlugin_Initialize::$_34> >(void*)&#x2B;260) (BuildId: d60314cb99f035c98d20ab286d52fc6d)&#xA;    runtime.cc:675]   native: #02 pc 00000000000efb14  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)&#x2B;264) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #03 pc 000000000008c35c  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread&#x2B;68) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   (no managed stack frames)&#xA;    runtime.cc:675] &#xA;    runtime.cc:675] "ADB-JDWP Connection Control Thread" prio=10 tid=8 WaitingInMainDebuggerLoop&#xA;    runtime.cc:675]   | group="" sCount=1 ucsCount=0 flags=1 obj=0x133402e8 self=0xb400007b1f64d800&#xA;    runtime.cc:675]   | sysTid=3249 nice=-20 cgrp=default sched=0/0 handle=0x7b207b2cb0&#xA;    runtime.cc:675]   | state=S schedstat=( 935055 0 13 ) utm=0 stm=0 core=4 HZ=100&#xA;    runtime.cc:675]   | stack=0x7b206bb000-0x7b206bd000 stackSize=991KB&#xA;    runtime.cc:675]   | held mutexes=&#xA;    runtime.cc:675]   native: #00 pc 00000000000dbe3c  /apex/com.android.runtime/lib64/bionic/libc.so (__ppoll&#x2B;12) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #01 pc 00000000000973b4  /apex/com.android.runtime/lib64/bionic/libc.so (poll&#x2B;96) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #02 pc 00000000000099e4  /apex/com.android.art/lib64/libadbconnection.so (adbconnection::AdbConnectionState::RunPollLoop(art::Thread*)&#x2B;724) (BuildId: c4c03b03ed50414e876ae23cd04eae7e)&#xA;    runtime.cc:675]   native: #03 pc 00000000000080ac  /apex/com.android.art/lib64/libadbconnection.so (adbconnection::CallbackFunction(void*)&#x2B;1320) (BuildId: c4c03b03ed50414e876ae23cd04eae7e)&#xA;    runtime.cc:675]   native: #04 pc 00000000000efb14  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)&#x2B;264) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #05 pc 000000000008c35c  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread&#x2B;68) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   (no managed stack frames)&#xA;    runtime.cc:675] &#xA;    runtime.cc:675] "Jit thread pool worker thread 0" prio=5 tid=9 Native&#xA;    runtime.cc:675]   | group="" sCount=1 ucsCount=0 flags=1 obj=0x13340360 self=0xb400007b138c4000&#xA;    runtime.cc:675]   | sysTid=3250 nice=9 cgrp=default sched=0/0 handle=0x7b206b4cb0&#xA;    runtime.cc:675]   | state=S schedstat=( 1384418878 710723029 1368 ) utm=118 stm=20 core=1 HZ=100&#xA;    runtime.cc:675]   | stack=0x7b205b5000-0x7b205b7000 stackSize=1023KB&#xA;    runtime.cc:675]   | held mutexes=&#xA;    runtime.cc:675]   native: #00 pc 0000000000086f90  /apex/com.android.runtime/lib64/bionic/libc.so (syscall&#x2B;32) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #01 pc 000000000047cc80  /apex/com.android.art/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)&#x2B;140) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #02 pc 000000000047cb18  /apex/com.android.art/lib64/libart.so (art::ThreadPool::GetTask(art::Thread*)&#x2B;120) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #03 pc 0000000000619810  /apex/com.android.art/lib64/libart.so (art::ThreadPoolWorker::Run()&#x2B;136) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #04 pc 00000000006196f0  /apex/com.android.art/lib64/libart.so (art::ThreadPoolWorker::Callback(void*)&#x2B;160) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;A/e.androidplaye: runtime.cc:675]   native: #05 pc 00000000000efb14  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)&#x2B;264) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #06 pc 000000000008c35c  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread&#x2B;68) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   (no managed stack frames)&#xA;    runtime.cc:675] &#xA;    runtime.cc:675] "HeapTaskDaemon" prio=5 tid=10 Native&#xA;    runtime.cc:675]   | group="" sCount=1 ucsCount=0 flags=1 obj=0x13340d60 self=0xb400007b138d5800&#xA;    runtime.cc:675]   | sysTid=3256 nice=4 cgrp=default sched=0/0 handle=0x7b205aecb0&#xA;    runtime.cc:675]   | state=S schedstat=( 12936736517 2503386925 3722 ) utm=1074 stm=219 core=4 HZ=100&#xA;    runtime.cc:675]   | stack=0x7b204ab000-0x7b204ad000 stackSize=1039KB&#xA;    runtime.cc:675]   | held mutexes=&#xA;    runtime.cc:675]   native: #00 pc 0000000000086f90  /apex/com.android.runtime/lib64/bionic/libc.so (syscall&#x2B;32) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #01 pc 000000000047cc80  /apex/com.android.art/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)&#x2B;140) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #02 pc 000000000056bbb8  /apex/com.android.art/lib64/libart.so (art::gc::Heap::TrimIndirectReferenceTables(art::Thread*)&#x2B;1364) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #03 pc 000000000056b468  /apex/com.android.art/lib64/libart.so (art::gc::Heap::Trim(art::Thread*)&#x2B;68) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #04 pc 000000000056b3cc  /apex/com.android.art/lib64/libart.so (art::gc::Heap::HeapTrimTask::Run(art::Thread*)&#x2B;32) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #05 pc 000000000046ce28  /apex/com.android.art/lib64/libart.so (art::gc::TaskProcessor::RunAllTasks(art::Thread*)&#x2B;56) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   at dalvik.system.VMRuntime.runHeapTasks(Native method)&#xA;    runtime.cc:675]   at java.lang.Daemons$HeapTaskDaemon.runInternal(Daemons.java:609)&#xA;    runtime.cc:675]   at java.lang.Daemons$Daemon.run(Daemons.java:140)&#xA;    runtime.cc:675]   at java.lang.Thread.run(Thread.java:1012)&#xA;    runtime.cc:675] &#xA;    runtime.cc:675] "ReferenceQueueDaemon" prio=5 tid=11 Waiting&#xA;    runtime.cc:675]   | group="" sCount=1 ucsCount=0 flags=1 obj=0x133403d8 self=0xb400007b138d7400&#xA;    runtime.cc:675]   | sysTid=3259 nice=4 cgrp=default sched=0/0 handle=0x7b204a4cb0&#xA;    runtime.cc:675]   | state=S schedstat=( 2230226662 207087138 1228 ) utm=26 stm=196 core=4 HZ=100&#xA;    runtime.cc:675]   | stack=0x7b203a1000-0x7b203a3000 stackSize=1039KB&#xA;    runtime.cc:675]   | held mutexes=&#xA;    runtime.cc:675]   native: #00 pc 0000000000086f90  /apex/com.android.runtime/lib64/bionic/libc.so (syscall&#x2B;32) (BuildId: 94065bf91428f6ae9fb310c478171302)&#xA;    runtime.cc:675]   native: #01 pc 000000000047cc80  /apex/com.android.art/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)&#x2B;140) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   native: #02 pc 0000000000486588  /apex/com.android.art/lib64/libart.so (art::Monitor::Wait(art::Thread*, art::ObjPtr, long, int, bool, art::ThreadState)&#x2B;2520) (BuildId: 56e704c544e6c624201be2ab4933e853)&#xA;    runtime.cc:675]   at java.lang.Object.wait(Native method)&#xA;    runtime.cc:675]   - waiting on &lt;0x0483c441> (a java.lang.Class)&#xA;    runtime.cc:675]   at java.lang.Object.wait(Object.java:442)&#xA;    runtime.cc:675]   at java.lang.Object.wait(Object.java:568)&#xA;    runtime.cc:675]   at java.lang.Daemons$ReferenceQueueDaemon.runInternal(Daemons.java:232)&#xA;    runtime.cc:675]   - locked &lt;0x0483c441> (a java.lang.Class)&#xA;    runtime.cc:675]   at java.lang.Daemons$Daemon.run(Daemons.java:140)&#xA;    runtime.cc:675]   at java.lang.Thread.run(Thread.java:1012)&#xA;    runtime.cc:675] &#xA;...(this part i missed because so big)&#xA;W/e.androidplaye: Suspending all threads took: 10.935ms&#xA;A/e.androidplaye: runtime.cc:683] JNI DETECTED ERROR IN APPLICATION: thread Thread[2,tid=3420,Native,Thread*=0xb400007bd4470c00,peer=0x12cc1510,"Thread-8687"] using JNIEnv* from thread Thread[3,tid=3419,Native,Thread*=0xb400007aadc2e400,peer=0x12d00000,"Thread-8688"]&#xA;    runtime.cc:683]     in call to CallVoidMethodV&#xA;A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 3420 (Thread-8687), pid 3241 (e.androidplayer)&#xA;</void></void></void></void></void></void></void>

    &#xA;

  • My python script using ffmpeg captures video content, but the captured content freezes in the middle and jumps frames

    11 novembre 2022, par Supriyo Mitra

    I am new to ffmpeg and I am trying to use it through a python script. The python functions that captures the video content is given below. The problem I am facing is that the captured content freezes at (uneven) intervals and skips a few frames every time it happens.

    &#xA;

    `    def capturelivestream(self, argslist):&#xA;        streamurl, outnum, feedid, outfilename = argslist[0], argslist[1], argslist[2], argslist[3]&#xA;        try:&#xA;            info = ffmpeg.probe(streamurl, select_streams=&#x27;a&#x27;)&#xA;            streams = info.get(&#x27;streams&#x27;, [])&#xA;        except:&#xA;            streams = []&#xA;        if len(streams) == 0:&#xA;            print(&#x27;There are no streams available&#x27;)&#xA;            stream = {}&#xA;        else:&#xA;            stream = streams[0]&#xA;            for stream in streams:&#xA;                if stream.get(&#x27;codec_type&#x27;) != &#x27;audio&#x27;:&#xA;                    continue&#xA;                else:&#xA;                    break&#xA;        if &#x27;channels&#x27; in stream.keys():&#xA;            channels = stream[&#x27;channels&#x27;]&#xA;            samplerate = float(stream[&#x27;sample_rate&#x27;])&#xA;        else:&#xA;            channels = None&#xA;            samplerate = 44100&#xA;        process = ffmpeg.input(streamurl).output(&#x27;pipe:&#x27;, pix_fmt=&#x27;yuv420p&#x27;, format=&#x27;avi&#x27;, vcodec=&#x27;libx264&#x27;, acodec=&#x27;pcm_s16le&#x27;, ac=channels, ar=samplerate, vsync=0, loglevel=&#x27;quiet&#x27;).run_async(pipe_stdout=True)&#xA;        fpath = os.path.dirname(outfilename)&#xA;        fnamefext = os.path.basename(outfilename)&#xA;        fname = fnamefext.split(".")[0]&#xA;        read_size = 320 * 180 * 3 # This is width * height * 3&#xA;        lastcaptured = time.time()&#xA;        maxtries = 12&#xA;        ntries = 0&#xA;        while True:&#xA;            if process:&#xA;                inbytes = process.stdout.read(read_size)&#xA;                if inbytes is not None and inbytes.__len__() > 0:&#xA;                    try:&#xA;                        frame = (np.frombuffer(inbytes, np.uint8).reshape([180, 320, 3]))&#xA;                    except:&#xA;                        print("Failed to reshape frame: %s"%sys.exc_info()[1].__str__())&#xA;                        continue # This could be an issue if there is a continuous supply of frames that cannot be reshaped&#xA;                    self.processq.put([outnum, frame])&#xA;                    lastcaptured = time.time()&#xA;                    ntries = 0&#xA;                else:&#xA;                    if self.DEBUG:&#xA;                        print("Could not read frame for feed ID %s"%feedid)&#xA;                    t = time.time()&#xA;                    if t - lastcaptured > 30: # If the frames can&#x27;t be read for more than 30 seconds...&#xA;                        print("Reopening feed identified by feed ID %s"%feedid)&#xA;                        process = ffmpeg.input(streamurl).output(&#x27;pipe:&#x27;, pix_fmt=&#x27;yuv420p&#x27;, format=&#x27;avi&#x27;, vcodec=&#x27;libx264&#x27;, acodec=&#x27;pcm_s16le&#x27;, ac=channels, ar=samplerate, vsync=0, loglevel=&#x27;quiet&#x27;).run_async(pipe_stdout=True)&#xA;                        ntries &#x2B;= 1&#xA;                    if ntries > maxtries:&#xA;                        if self.DEBUG:&#xA;                            print("Stream %s is no longer available."%streamurl)&#xA;                        # DB statements removed here&#xA;                        &#xA;                        break # Break out of infinite loop.&#xA;                    continue&#xA;        &#xA;        return None`&#xA;&#xA;

    &#xA;

    The function that captures the frames is as follows :

    &#xA;

    &#xA;`    def framewriter(self, outlist):&#xA;        isempty = False&#xA;        endofrun = False&#xA;        while True:&#xA;            frame = None&#xA;            try:&#xA;                args = self.processq.get()&#xA;            except: # Sometimes, the program crashes at this point due to lack of memory...&#xA;                print("Error in framewriter while reading from queue: %s"%sys.exc_info()[1].__str__())&#xA;                continue&#xA;            outnum = args[0]&#xA;            frame = args[1]&#xA;            if outlist.__len__() > outnum:&#xA;                out = outlist[outnum]&#xA;            else:&#xA;                if self.DEBUG == 2:&#xA;                    print("Could not get writer %s"%outnum)&#xA;                continue&#xA;            if frame is not None and out is not None:&#xA;                out.write(frame)&#xA;                isempty = False&#xA;                endofrun = False&#xA;            else:&#xA;                if self.processq.empty() and not isempty:&#xA;                    isempty = True&#xA;                elif self.processq.empty() and isempty: # processq queue is empty now and was empty last time&#xA;                    print("processq is empty")&#xA;                    endofrun = True&#xA;                elif endofrun and isempty:&#xA;                    print("Could not find any frames to process. Quitting")&#xA;                    break&#xA;        print("Done writing feeds. Quitting.")&#xA;        return None`&#xA;

    &#xA;

    The scenario is as follows : There are multiple video streams from a certain website at any time during the day, and the program containing these functions has to capture them as they get streamed. The memory available to this program is 6GB and there could be upto 3 streams running at any instant. Given below is the relevant main section of the script that uses the functions given above.

    &#xA;

    &#xA;

    &#xA;

    `itftennis = VideoBot(siteurl)&#xA;outlist = []&#xA;t = Thread(target=itftennis.framewriter, args=(outlist,))&#xA;t.daemon = True&#xA;t.start()&#xA;tp = Thread(target=handleprocesstermination, args=())&#xA;tp.daemon = True&#xA;tp.start()&#xA;# Create a database connection and as associated cursor object. We will handle database operations from main thread only.&#xA;# DB statements removed from here...&#xA;feedidlist = []&#xA;vidsdict = {}&#xA;streampattern = re.compile("\?vid=(\d&#x2B;)$")&#xA;while True:&#xA;    streampageurls = itftennis.checkforlivestream()&#xA;    if itftennis.DEBUG:&#xA;        print("Checking for new urls...")&#xA;        print(streampageurls.__len__())&#xA;    if streampageurls.__len__() > 0:&#xA;        argslist = []&#xA;        newurlscount = 0&#xA;        for streampageurl in streampageurls:&#xA;            newstream = False&#xA;            sps = re.search(streampattern, streampageurl)&#xA;            if sps:&#xA;                streamnum = sps.groups()[0]&#xA;                if streamnum not in vidsdict.keys(): # Check if this stream has already been processed.&#xA;                    vidsdict[streamnum] = 1&#xA;                    newstream = True&#xA;                else:&#xA;                    continue&#xA;            else:&#xA;                continue&#xA;            print("Detected new live stream... Getting it.")&#xA;            streamurl = itftennis.getstreamurlfrompage(streampageurl)&#xA;            print("Adding %s to list..."%streamurl)&#xA;            if streamurl is not None:&#xA;                # Now, get feed metadata...&#xA;                metadata = itftennis.getfeedmetadata(streampageurl)&#xA;                if metadata is None:&#xA;                    continue&#xA;                # lines to get matchescounter omitted here...&#xA;                if matchescounter >= itftennis.__class__.MAX_CONCURRENT_MATCHES:&#xA;                    break&#xA;                if newstream is True:&#xA;                    newurlscount &#x2B;= 1&#xA;                outfilename = time.strftime("./videodump/" &#x2B; "%Y%m%d%H%M%S",time.localtime())&#x2B;".avi"&#xA;                out = open(outfilename, "wb")&#xA;                outlist.append(out) # Save it in the list and take down the number for usage in framewriter&#xA;                outnum = outlist.__len__() - 1&#xA;                # Save metadata in DB&#xA;                # lines omitted here....&#xA;                argslist.append([streamurl, outnum, feedid, outfilename])   &#xA;            else:&#xA;                print("Couldn&#x27;t get the stream url from page")&#xA;        if newurlscount > 0:&#xA;            for args in argslist:&#xA;                try:&#xA;                    p = Process(target=itftennis.capturelivestream, args=(args,))&#xA;                    p.start()&#xA;                    processeslist.append(p)&#xA;                    if itftennis.DEBUG:&#xA;                        print("Started process with args %s"%args)&#xA;                except:&#xA;                    print("Could not start process due to error: %s"%sys.exc_info()[1].__str__())&#xA;            print("Created processes, continuing now...")&#xA;            continue&#xA;    time.sleep(itftennis.livestreamcheckinterval)&#xA;t.join()&#xA;tp.join()&#xA;for out in outlist:&#xA;    out.close()`&#xA;

    &#xA;

    &#xA;

    &#xA;

    Please accept my apologies for swamping with this amount of code. I wanted to provide maximum context to my problem. I have removed the absolutely irrelevant DB statements, but apart from that this is what the code looks like.

    &#xA;

    If you need to know anything else about the code, please let me know. What I would really like to know is if I am using the ffmpeg streams capturing statements correctly. The stream contains both video and audio components and I need to capture both. Hence I am making the following call :

    &#xA;

    process = ffmpeg.input(streamurl).output(&#x27;pipe:&#x27;, pix_fmt=&#x27;yuv420p&#x27;, format=&#x27;avi&#x27;, vcodec=&#x27;libx264&#x27;, acodec=&#x27;pcm_s16le&#x27;, ac=channels, ar=samplerate, vsync=0, loglevel=&#x27;quiet&#x27;).run_async(pipe_stdout=True)&#xA;

    &#xA;

    Is this how it is supposed to be done ? More importantly, why do I keep getting the freezes in the output video. I have monitored the streams manually, and they are quite consistent. Frame losses do not happen when I view them on the website (at least it is not obviously noticeable). Also, I have run 'top' command on the host running the program. The CPU usage sometimes go over 100% (which, I came to understand from some answers on SO, is to be expected when running ffmpeg) but the memory usage usually remain below 30%. So what is the issue here. What do I need to do in order to fix this problem (other than learn more about how ffmpeg works).

    &#xA;

    Thanks

    &#xA;

    I have tried using various ffmpeg options (while trying to find similar issues that others encountered). I also tried running ffmpeg from command line for a limited period of time (11 mins), using the same options as used in the python code, and the captured content came out quite well. No freezes. No jumps in frames. But I need to use it in an automated way and there would be multiple streams at any time. Also, when I try playing the captured content using ffplay, I sometimes get the message "co located POCs unavailable" when these freezes happen. What does it mean ?

    &#xA;