Recherche avancée

Médias (0)

Mot : - Tags -/alertes

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

Autres articles (43)

  • 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

  • MediaSPIP : Modification des droits de création d’objets et de publication définitive

    11 novembre 2010, par

    Par défaut, MediaSPIP permet de créer 5 types d’objets.
    Toujours par défaut les droits de création et de publication définitive de ces objets sont réservés aux administrateurs, mais ils sont bien entendu configurables par les webmestres.
    Ces droits sont ainsi bloqués pour plusieurs raisons : parce que le fait d’autoriser à publier doit être la volonté du webmestre pas de l’ensemble de la plateforme et donc ne pas être un choix par défaut ; parce qu’avoir un compte peut servir à autre choses également, (...)

  • List of compatible distributions

    26 avril 2011, par

    The table below is the list of Linux distributions compatible with the automated installation script of MediaSPIP. Distribution nameVersion nameVersion number Debian Squeeze 6.x.x Debian Weezy 7.x.x Debian Jessie 8.x.x Ubuntu The Precise Pangolin 12.04 LTS Ubuntu The Trusty Tahr 14.04
    If you want to help us improve this list, you can provide us access to a machine whose distribution is not mentioned above or send the necessary fixes to add (...)

Sur d’autres sites (8461)

  • Google Analytics 4 and GDPR : Everything You Need to Know

    17 mai 2022, par Erin

    Four years have passed since the European General Data Protection Regulation (GDPR, also known as DSGVO in German, and RGPD in French) took effect.

    That’s ample time to get compliant, especially for an organisation as big and innovative as Google. Or is it ? 

    If you are wondering how GDPR affects Google Analytics 4 and what the compliance status is at present, here’s the lowdown. 

    Is Google Analytics 4 GDPR Compliant ?

    No. As of mid-2022, Google Analytics 4 (GA4) isn’t fully GDPR compliant. Despite adding extra privacy-focused features, GA4 still has murky status with the European regulators. After the invalidation of the Privacy Shield framework in 2020, Google is yet to regulate EU-US data protection. At present, the company doesn’t sufficiently protect EU citizens’ and residents’ data against US surveillance laws. This is a direct breach of GDPR.

    Google Analytics and GDPR : a Complex Relationship 

    European regulators have scrutinised Google since GDPR came into effect in 2018.

    While the company took steps to prepare for GDPR provisions, it didn’t fully comply with important regulations around user data storage, transfer and security.

    The relationship between Google and EU regulators got more heated after the Court of Justice of the European Union (CJEU) invalidated the Privacy Shield — a leeway Google used for EU-US data transfers. After 2020, GDPR litigation against Google followed. 

    This post summarises the main milestones in this story and explains the consequences for Google Analytics users. 

    Google Analytics and GDPR Timeline

    2018 : Google Analytics Meets GDPR 

    In 2018, the EU adopted the General Data Protection Regulation (GDPR) — a set of privacy and data security laws, covering all member states. Every business interacting with EU citizens and/or residents had to comply.

    GDPR harmonised data protection laws across member states and put down extra provisions for what constitutes sensitive personal information (or PII). Broadly, PII includes any data about the person’s :

    • Racial or ethnic origin 
    • Employment status 
    • Religious or political beliefs
    • State of health 
    • Genetic or biometric data 
    • Financial records (such as payment method data)
    • Address and phone numbers 

    Businesses were barred from collecting this information without explicit consent (and even with it in some cases). If collected, such sensitive information is also subject to strict requirements on how it should be stored, secured, transferred and used. 

    7 Main GDPR Principles Explained 

    Article 5 of the GDPR lays out seven main GDPR principles for personal data and privacy protection : 

    • Lawfulness, fairness and transparency — data must be obtained legally, collected with consent and in adherence to laws. 
    • Purpose limitation — all personal information must be collected for specified, explicit and legal purposes. 
    • Data minimisation — companies must collect only necessary and adequate data, aligned with the stated purpose. 
    • Accuracy — data accuracy must be ensured at all times. Companies must have mechanisms to erase or correct inaccurate data without delays. 
    • Storage limitation — data must be stored only for as long as the stated purpose suggests. Though there’s no upper time limit on data storage. 
    • Integrity and confidentiality (security) — companies must take measures to ensure secure data storage and prevent unlawful or unauthorised access to it. 
    • Accountability — companies must be able to demonstrate adherence to the above principles. 

    Google claimed to have taken steps to make all of their products GDPR compliant ahead of the deadline. But in practice, this wasn’t always the case.

    In March 2018, a group of publishers admonished Google for not providing them with enough tools for GDPR compliance :

    “[Y]ou refuse to provide publishers with any specific information about how you will collect, share and use the data. Placing the full burden of obtaining new consent on the publisher is untenable without providing the publisher with the specific information needed to provide sufficient transparency or to obtain the requisite specific, granular and informed consent under the GDPR.”

    The proposed Google Analytics GDPR consent form was hard to implement and lacked customisation options. In fact, Google “makes unilateral decisions” on how the collected data is stored and used. 

    Users had no way to learn about or control all intended uses of people’s data — which made compliance with the second clause impossible. 

    Unsurprisingly, Google was among the first companies to face a GDPR lawsuit (together with Facebook). 

    By 2019, French data regulator CNIL, successfully argued that Google wasn’t sufficiently disclosing its data collection across products — and hence in breach of GDPR. After a failed appeal, Google had to pay a €50 million fine and promise to do better. 

    2019 : Google Analytics 4 Announcement 

    Throughout 2019, Google rightfully attempted to resolve some of its GDPR shortcomings across all products, Google Universal Analytics (UA) included. 

    They added a more visible consent mechanism for online tracking and provided extra compliance tips for users to follow. In the background, Google also made tech changes to its data processing mechanism to get on the good side of regulations.

    Though Google addressed some of the issues, they missed others. A 2019 independent investigation found that Google real-time-bidding (RTB) ad auctions still used EU citizens’ and residents’ data without consent, thanks to a loophole called “Push Pages”. But they managed to quickly patch this up before the allegations had made it to court. 

    In November 2019, Google released a beta version of the new product version — Google Analytics 4, due to replace Universal Analytics. 

    GA4 came with a set of new privacy-focused features for ticking GDPR boxes such as :

    • Data deletion mechanism. Users can now request to surgically extract certain data from the Analytics servers via a new interface. 
    • Shorter data retention period. You can now shorten the default retention period to 2 months by default (instead of 14 months) or add a custom limit.  
    • IP Anonymisation. GA4 doesn’t log or store IP addresses by default. 

    Google Analytics also updated its data processing terms and made changes to its privacy policy

    Though Google made some progress, Google Analytics 4 still has many limitations — and isn’t GDPR compliant. 

    2020 : Privacy Shield Invalidation Ruling 

    As part of the 2018 GDPR preparations, Google named its Irish entity (Google Ireland Limited) as the “data controller” legally responsible for EEA and Swiss users’ information. 

    The company announcement says : 

    Google Analytics Statement on Privacy Shield Invalidation Ruling
    Source : Google

    Initially, Google assumed that this legal change would help them ensure GDPR compliance as “legally speaking” a European entity was set in charge of European data. 

    Practically, however, EEA consumers’ data was still primarily transferred and processed in the US — where most Google data centres are located. Until 2020, such cross-border data transfers were considered legal thanks to the Privacy Shield framework

    But in July 2020, The EU Court of Justice ruled that this framework doesn’t provide adequate data protection to digitally transmitted data against US surveillance laws. Hence, companies like Google can no longer use it. The Swiss Federal Data Protection and Information Commissioner (FDPIC) reached the same conclusion in September 2020. 

    The invalidation of the Privacy Shield framework put Google in a tough position.

     Article 14. f of the GDPR explicitly states : 

    “The controller (the company) that intends to carry out a transfer of personal data to a recipient (Analytics solution) in a third country or an international organisation must provide its users with information on the place of processing and storage of its data”.

    Invalidation of the Privacy Shield framework prohibited Google from moving data to the US. At the same time, GDPR provisions mandated that they must disclose proper data location. 

    But Google Analytics (like many other products) had no a mechanism for : 

    • Guaranteeing intra-EU data storage 
    • Selecting a designated regional storage location 
    • Informing users about data storage location or data transfers outside of the EU 

    And these factors made Google Analytics in direct breach of GDPR — a territory, where they remain as of 2022.

    2020-2022 : Google GDPR Breaches and Fines 

    The 2020 ruling opened Google to GDPR lawsuits from country-specific data regulators.

    Google Analytics in particular was under a heavy cease-fire. 

    • Sweden first fined Google for violating GDPR for no not fulfilling its obligations to request data delisting in 2020. 
    • France rejected Google Analytics 4 IP address anonymisation function as a sufficient measure for protecting cross-border data transfers. Even with it, US intelligence services can still access user IPs and other PII. France declared Google Analytics illegal and pressed a €150 million fine. 
    • Austria also found Google Analytics GDPR non-compliant and proclaimed the service as “illegal”. The authority now seeks a fine too. 

    The Dutch Data Protection Authority and  Norwegian Data Protection Authority also found Google Analytics guilty of a GDPR breach and seek to limit Google Analytics usage. 

    New privacy controls in Google Analytics 4 do not resolve the underlying issue — unregulated, non-consensual EU-US data transfer. 

    Google Analytics GDPR non-compliance effectively opens any website tracking or analysing European visitors to legal persecution.

    In fact, this is already happening. noyb, a European privacy-focused NGO, has already filed over 100 lawsuits against European websites using Google Analytics.

    2022 : Privacy Shield 2.0. Negotiations

    Google isn’t the only US company affected by the Privacy Shield framework invalidation. The ruling puts thousands of digital companies at risk of non-compliance.

    To settle the matter, US and EU authorities started “peace talks” in spring 2022.

    European Commission President Ursula von der Leyen said that they are working with the Biden administration on the new agreement that will “enable predictable and trustworthy data flows between the EU and US, safeguarding the privacy and civil liberties.” 

    However, it’s just the beginning of a lengthy negotiation process. The matter is far from being settled and contentious issues remain as we discussed on Twitter (come say hi !).

    For one, the US isn’t eager to modify its surveillance laws and is mostly willing to make them “proportional” to those in place in the EU. These modifications may still not satisfy CJEU — which has the power to block the agreement vetting or invalidate it once again. 

    While these matters are getting hashed out, Google Analytics users, collecting data about EU citizens and/or residents, remain on slippery grounds. As long as they use GA4, they can be subject to GDPR-related lawsuits. 

    To Sum It Up 

    • Google Analytics 4 and Google Universal Analytics are not GDPR compliant because of Privacy Shield invalidation in 2020. 
    • French and Austrian data watchdogs named Google Analytics operations “illegal”. Swedish, Dutch and Norwegian authorities also claim it’s in breach of GDPR. 
    • Any website using GA for collecting data about European citizens and/or residents can be taken to court for GDPR violations (which is already happening). 
    • Privacy Shield 2.0 Framework discussions to regulate EU-US data transfers have only begun and may take years. Even if accepted, the new framework(s) may once again be invalidated by local data regulators as has already happened in the past. 

    Time to Get a GDPR Compliant Google Analytics Alternative 

    Retaining 100% data ownership is the optimal path to GDPR compliance.

    By selecting a transparent web analytics solution that offers 100% data ownership, you can rest assured that no “behind the scenes” data collection, processing or transfers take place. 

    Unlike Google Analytics 4, Matomo offers all of the features you need to be GDPR compliant : 

    • Full data anonymisation 
    • Single-purpose data usage 
    • Easy consent and an opt-out mechanism 
    • First-party cookies usage by default 
    • Simple access to collect data 
    • Fast data removals 
    • EU-based data storage for Matomo Cloud (or storage in the country of your choice with Matomo On-Premise)

    Learn about your audiences in a privacy-centred way and protect your business against unnecessary legal exposure. 

    Start your 21-day free trial (no credit card required) to see how fully GDPR-compliant website analytics works ! 

  • ffmpeg Undefined referance to several swr functions [duplicate]

    21 mai 2022, par user19068953

    I'm trying to staticly link ffmpeg to my project, i downloaded the ffmpeg source files from a github repo because it had pre writen cmake files, which i needed for this exact problem but it changed nothing (https://github.com/Pawday/ffmpeg-cmake). I edited the file a little and posted it below, and added them to lib/ffmpeg in my project directory. I first ran ./configure, then ran make, then make install like the install guide suggested. Then i ran cmake . followed by make. It compiled just fine and i ran a test without any errors :

    


    extern "C"{&#xA;    #include <libavcodec></libavcodec>avcodec.h>&#xA;}&#xA;&#xA;#include <iostream>&#xA;int main(int argc, char* argv[]) {&#xA;    if (argc &lt; 2) {&#xA;        std::cout &lt;&lt; "provide a filename" &lt;&lt; std::endl;&#xA;        return -1;&#xA;        AVPacket *pkt = av_packet_alloc();&#xA;    }&#xA;}&#xA;</iostream>

    &#xA;

    I was following the examples that ffmpeg provides, so i added this :

    &#xA;

    const AVCodec *codec = avcodec_find_decoder(AV_CODEC_ID_MPEG1VIDEO);&#xA;

    &#xA;

    But now i have this huge error :

    &#xA;

    /usr/bin/ld: /usr/local/lib/libavcodec.a(opusdec.o): in function &#xA;&#xA;`opus_decode_subpacket&#x27;:&#xA;/home/t/Desktop/Code/lib/ffmpeg/libavcodec/opusdec.c:346: undefined reference to `swr_is_initialized&#x27;&#xA;/usr/bin/ld: /usr/local/lib/libavcodec.a(opusdec.o): in function `opus_decode_frame&#x27;:&#xA;/home/t/Desktop/Code/lib/ffmpeg/libavcodec/opusdec.c:188: undefined reference to `swr_is_initialized&#x27;&#xA;/usr/bin/ld: /usr/local/lib/libavcodec.a(opusdec.o): in function `opus_init_resample&#x27;:&#xA;/home/t/Desktop/Code/lib/ffmpeg/libavcodec/opusdec.c:136: undefined reference to `swr_init&#x27;&#xA;/usr/bin/ld: /home/t/Desktop/Code/lib/ffmpeg/libavcodec/opusdec.c:142: undefined reference to `swr_convert&#x27;&#xA;/usr/bin/ld: /usr/local/lib/libavcodec.a(opusdec.o): in function `opus_decode_frame&#x27;:&#xA;/home/t/Desktop/Code/lib/ffmpeg/libavcodec/opusdec.c:202: undefined reference to `swr_convert&#x27;&#xA;/usr/bin/ld: /usr/local/lib/libavcodec.a(opusdec.o): in function `opus_flush_resample&#x27;:&#xA;/home/t/Desktop/Code/lib/ffmpeg/libavcodec/opusdec.c:90: undefined reference to `swr_convert&#x27;&#xA;/usr/bin/ld: /usr/local/lib/libavcodec.a(opusdec.o): in function `opus_decode_subpacket&#x27;:&#xA;/home/t/Desktop/Code/lib/ffmpeg/libavcodec/opusdec.c:379: undefined reference to `swr_close&#x27;&#xA;/usr/bin/ld: /home/t/Desktop/Code/lib/ffmpeg/libavcodec/opusdec.c:346: undefined reference to `swr_is_initialized&#x27;&#xA;/usr/bin/ld: /usr/local/lib/libavcodec.a(opusdec.o): in function `opus_decode_flush&#x27;:&#xA;/home/t/Desktop/Code/lib/ffmpeg/libavcodec/opusdec.c:582: undefined reference to `swr_close&#x27;&#xA;/usr/bin/ld: /usr/local/lib/libavcodec.a(opusdec.o): in function `opus_decode_close&#x27;:&#xA;/home/t/Desktop/Code/lib/ffmpeg/libavcodec/opusdec.c:607: undefined reference to `swr_free&#x27;&#xA;/usr/bin/ld: /usr/local/lib/libavcodec.a(opusdec.o): in function `opus_decode_init&#x27;:&#xA;/home/t/Desktop/Code/lib/ffmpeg/libavcodec/opusdec.c:660: undefined reference to `swr_alloc&#x27;&#xA;collect2: error: ld returned 1 exit status&#xA;make[2]: *** [CMakeFiles/Interview.dir/build.make:122: bin/Interview] Error 1&#xA;make[1]: *** [CMakeFiles/Makefile2:420: CMakeFiles/Interview.dir/all] Error 2&#xA;make: *** [Makefile:84: all] Error 2&#xA;

    &#xA;

    I find some questions with similar issues to no avail :

    &#xA;

    FFmpeg seems to be version conflict&#xA;Linking libavcodec and libavformat : Undefined references

    &#xA;

    NOTE : previously i tried downloading ffmpeg with home-brew and pkg-config maybe that is causing an error, but my guess is my cmake file is faulty.

    &#xA;

    project/CMakeLists :

    &#xA;

    cmake_minimum_required(VERSION 3.14)&#xA;&#xA;project(Interview C CXX)&#xA;set(CMAKE_CXX_STANDARD 14)&#xA;&#xA;SET( EXECUTABLE_OUTPUT_PATH ${dir}/bin )&#xA;set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin )&#xA;set( CMAKE_C_FLAGS "-lswresample")&#xA;&#xA;add_subdirectory(lib/ffmpeg)&#xA;&#xA;add_definitions(-DGL_SILENCE_DEPRECATION)&#xA;&#xA;list(APPEND SOURCES&#xA;    src/main.cpp&#xA;    src/vipch.h&#xA;    src/VideoDecoder.cpp&#xA;    src/VideoDecoder.h&#xA;    src/Application.cpp&#xA;    src/Application.h&#xA;    #src/OpenGLRenderer.cpp&#xA;    #src/OpenGLRenderer.h&#xA;    #src/Layer.h&#xA;    #src/Layer.cpp&#xA;)&#xA;&#xA;find_path(AVCODEC_INCLUDE_DIR libavcodec/avcodec.h)&#xA;find_library(AVCODEC_LIBRARY avcodec)&#xA;&#xA;find_path(AVFORMAT_INCLUDE_DIR libavformat/avformat.h)&#xA;find_library(AVFORMAT_LIBRARY avformat)&#xA;&#xA;find_path(AVDEVICE_INCLUDE_DIR libavdevice/avdevice.h)&#xA;find_library(AVDEVICE_LIBRARY avdevice)&#xA;&#xA;find_path(AVCODEC_INCLUDE_DIR libavcodec/avcodec.h)&#xA;find_library(AVCODEC_LIBRARY avcodec)&#xA;&#xA;set(THREADS_PREFER_PTHREAD_FLAG ON)&#xA;find_package(Threads REQUIRED)&#xA;&#xA;add_executable(Interview src/main.cpp src/Application.cpp src/Application.h ${SOURCES})&#xA;&#xA;target_link_libraries(Interview PRIVATE Threads::Threads)&#xA;&#xA;if(APPLE)&#xA;    list(APPEND EXTRA_LIBS&#xA;        "-framework OpenGL"&#xA;    )&#xA;&#xA;    configure_file(&#xA;        ${CMAKE_CURRENT_SOURCE_DIR}/assets/MacOSXBundleInfo.plist.in&#xA;        ${CMAKE_CURRENT_BINARY_DIR}/assets/MacOSXBundleInfo.plist&#xA;    )&#xA;&#xA;    set_target_properties(Interview PROPERTIES&#xA;        MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/assets/MacOSXBundleInfo.plist&#xA;    )&#xA;&#xA;elseif(WIN32)&#xA;    list(APPEND EXTRA_LIBS&#xA;        "-lglu32 -lopengl32"&#xA;    )&#xA;    set(CMAKE_EXE_LINKER_FLAGS "-std=gnu99 -static -static-libgcc -static-libstdc&#x2B;&#x2B; -mwindows")&#xA;&#xA;endif()&#xA;&#xA;list(APPEND EXTRA_LIBS&#xA;"-lGL -lGLU -lX11 -lz -lva -lswresample"&#xA;)&#xA;&#xA;find_package(OpenGL REQUIRED)&#xA;find_package(GLEW REQUIRED)&#xA;&#xA;#target_link_libraries(Interview ${CORELIBS})&#xA;&#xA;&#xA;target_include_directories(Interview PRIVATE &#xA;    ${AVCODEC_INCLUDE_DIR} &#xA;    ${AVFORMAT_INCLUDE_DIR}&#xA;    ${AVUTIL_INCLUDE_DIR}&#xA;    ${AVDEVICE_INCLUDE_DIR} &#xA;    ${OPENGL_INCLUDE_DIR}&#xA;    ${GLEW_INCLUDE_DIRS}&#xA;)&#xA;&#xA;target_link_libraries(Interview PRIVATE &#xA;    ${AVCODEC_LIBRARY} &#xA;    ${AVFORMAT_LIBRARY} &#xA;    ${AVUTIL_LIBRARY} &#xA;    ${AVDEVICE_LIBRARY} &#xA;    ${OPENGL_LIBRARY}&#xA;    ${GLEW_LIBRARIES}&#xA;)&#xA;

    &#xA;

    NOTE : i previously had a really similar error with pthread but with some fixes to cmake and installing pthread i fixed it.

    &#xA;

    project/lib/ffmpeg/CMakeLists :

    &#xA;

    cmake_minimum_required(VERSION 3.15)&#xA;&#xA;project(FFMPEG C CXX)&#xA;&#xA;add_library(ffmpeg_config INTERFACE)&#xA;&#xA;#TODO:[cmake] COMMON DEFINES (config.h)&#xA;# create list with all that and then pick required from that list in each target&#xA;target_compile_definitions(ffmpeg_config INTERFACE FFMPEG_CONFIGURATION="")&#xA;target_compile_definitions(ffmpeg_config INTERFACE FFMPEG_DATADIR="")&#xA;target_compile_definitions(ffmpeg_config INTERFACE AVCONV_DATADIR="")&#xA;target_compile_definitions(ffmpeg_config INTERFACE FFMPEG_LICENSE="")&#xA;&#xA;target_compile_definitions(ffmpeg_config INTERFACE CC_IDENT="")&#xA;&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_THREADS=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_PTHREADS=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_W32THREADS=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_OS2THREADS=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_ISNAN=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_MMXEXT=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_MMX2=HAVE_MMXEXT)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_MMX2=HAVE_MMXEXT)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_MMX_INLINE=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_MMX=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_AV_CONFIG_H=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_ALTIVEC=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_MMXEXT_INLINE=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_NEON=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_AMD3DNOW_INLINE=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_X86ASM=0)&#xA;if(WIN32)&#xA;    target_compile_definitions(ffmpeg_config INTERFACE HAVE_MKSTEMP=0)&#xA;else()&#xA;    target_compile_definitions(ffmpeg_config INTERFACE HAVE_MKSTEMP=1)&#xA;endif()&#xA;&#xA;&#xA;#TODO:[cmake] detect each function and set to 0 if missing (they are in math.h)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_CBRT=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_CBRTF=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_COPYSIGN=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_ERF=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_HYPOT=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_RINT=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_LRINT=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_LRINTF=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_ROUND=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_ROUNDF=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_TRUNC=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE HAVE_TRUNCF=1)&#xA;&#xA;&#xA;target_link_libraries(ffmpeg_config INTERFACE ffmpeg_compat)&#xA;&#xA;include (TestBigEndian)&#xA;TEST_BIG_ENDIAN(IS_BIG_ENDIAN)&#xA;if(IS_BIG_ENDIAN)&#xA;    target_compile_definitions(ffmpeg_config INTERFACE HAVE_BIGENDIAN=1)&#xA;else()&#xA;    target_compile_definitions(ffmpeg_config INTERFACE HAVE_BIGENDIAN=0)&#xA;endif()&#xA;&#xA;target_compile_definitions(ffmpeg_config INTERFACE av_restrict=)&#xA;&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_THIS_YEAR=2021)&#xA;&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_MEMORY_POISONING=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_FRAME_THREAD_ENCODER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_MEMORY_POISONING=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_GRAY=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_ERROR_RESILIENCE=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_MPEGVIDEODEC=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_SMALL=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_H264_D3D11VA_HWACCEL=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_H264_DXVA2_HWACCEL=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_H264_NVDEC_HWACCEL=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_H264_VAAPI_HWACCEL=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_H264_VIDEOTOOLBOX_HWACCEL=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_H264_VDPAU_HWACCEL=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_NETWORK=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_XVMC=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_FORMAT_FILTER=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_PNG_DECODER=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_APNG_DECODER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_INFLATE_WRAPPER=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_DEFLATE_WRAPPER=1)&#xA;&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_AVUTIL=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_AVCODEC=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_AVFORMAT=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_AVDEVICE=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_SWSCALE=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_SWRESAMPLE=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_POSTPROC=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_AVFILTER=1)&#xA;&#xA;&#xA;&#xA;#CONFIG MUXERS&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_H264_MUXER=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE2_MUXER=1)&#xA;&#xA;#CONFIG DEMUXERS&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE2_DEMUXER=1)&#xA;&#xA;# look at the end of libavformat/img2dec.c file&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_BMP_PIPE_DEMUXER=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_CRI_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_DDS_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_DPX_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_EXR_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_GEM_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_GIF_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_J2K_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_JPEG_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_PAM_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_PBM_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_PCX_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_PGM_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_PGX_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_PHOTOCD_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_PICTOR_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_PNG_PIPE_DEMUXER=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_PPM_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_PSD_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_QDRAW_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_SGI_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_SVG_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_TIFF_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_WEBP_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_XBM_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_XPM_PIPE_DEMUXER=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_IMAGE_XWD_PIPE_DEMUXER=0)&#xA;&#xA;&#xA;#CONFIG PROTOCOLS&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_FILE_PROTOCOL=1)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_PIPE_PROTOCOL=1)&#xA;&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_ZLIB=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE CONFIG_SWSCALE_ALPHA=0)&#xA;&#xA;target_compile_definitions(ffmpeg_config INTERFACE ARCH_X86_32=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE ARCH_X86_64=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE ARCH_AARCH64=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE ARCH_ARM=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE ARCH_PPC=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE ARCH_X86=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE ARCH_MIPS=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE ARCH_ALPHA=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE ARCH_LOONGARCH=0)&#xA;target_compile_definitions(ffmpeg_config INTERFACE ARCH_LOONGARCH64=0)&#xA;&#xA;target_compile_definitions(ffmpeg_config INTERFACE SWS_MAX_FILTER_SIZE=256)&#xA;&#xA;#_________________________WARNINGS__________________________________________&#xA;#TODO[cmake]: set it for all targets individually or remove for WARNING HELL&#xA;if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")&#xA;    add_compile_options("-w")&#xA;endif()&#xA;&#xA;if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")&#xA;    add_compile_options("-w")&#xA;endif()&#xA;&#xA;if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")&#xA;    cmake_policy(SET CMP0092 NEW) #cmake disable std MSVC warnings in CMAKE_C_FLAGS&#xA;    #CMAKE_DEPFILE_FLAGS_C var in windows contains only /showIncludes and produce include tree&#xA;    set(CMAKE_DEPFILE_FLAGS_C "") #erase it&#xA;    add_compile_options("/w")&#xA;endif()&#xA;&#xA;file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/include/config.h "//cmake config will define all that")&#xA;target_include_directories(ffmpeg_config INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/include)&#xA;&#xA;#TODO[cmake]: resolve config_components.h&#xA;file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/include/config_components.h "//")&#xA;target_include_directories(ffmpeg_config INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/include)&#xA;&#xA;add_subdirectory(compat)&#xA;add_subdirectory(libavutil)&#xA;add_subdirectory(libavcodec)&#xA;add_subdirectory(libavformat)&#xA;add_subdirectory(libavdevice)&#xA;add_subdirectory(libavfilter)&#xA;add_subdirectory(libswresample)&#xA;add_subdirectory(libswscale)&#xA;add_subdirectory(libpostproc)&#xA;&#xA;add_subdirectory(fftools)&#xA;&#xA;add_subdirectory(doc/examples)&#xA;&#xA;&#xA;find_path(AVCODEC_INCLUDE_DIR libavcodec/avcodec.h)&#xA;find_library(AVCODEC_LIBRARY avcodec)&#xA;&#xA;find_path(AVFORMAT_INCLUDE_DIR libavformat/avformat.h)&#xA;find_library(AVFORMAT_LIBRARY avformat)&#xA;&#xA;find_path(AVDEVICE_INCLUDE_DIR libavdevice/avdevice.h)&#xA;find_library(AVDEVICE_LIBRARY avdevice)&#xA;&#xA;find_path(AVCODEC_INCLUDE_DIR libavcodec/avcodec.h)&#xA;find_library(AVCODEC_LIBRARY avcodec)&#xA;&#xA;if(APPLE)&#xA;    list(APPEND EXTRA_LIBS&#xA;        "-framework OpenGL"&#xA;    )&#xA;&#xA;    configure_file(&#xA;        ${CMAKE_CURRENT_SOURCE_DIR}/assets/MacOSXBundleInfo.plist.in&#xA;        ${CMAKE_CURRENT_BINARY_DIR}/assets/MacOSXBundleInfo.plist&#xA;    )&#xA;&#xA;    set_target_properties(FFMPEG PROPERTIES&#xA;        MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/assets/MacOSXBundleInfo.plist&#xA;    )&#xA;&#xA;elseif(WIN32)&#xA;    list(APPEND EXTRA_LIBS&#xA;        "-lglu32 -lopengl32"&#xA;    )&#xA;    set(CMAKE_EXE_LINKER_FLAGS "-std=gnu99 -static -static-libgcc -static-libstdc&#x2B;&#x2B; -mwindows")&#xA;else()&#xA;    list(APPEND EXTRA_LIBS&#xA;        "-lGL -lGLU -lX11"&#xA;    )&#xA;endif()&#xA;&#xA;&#xA;#target_link_libraries(Interview ${CORELIBS})&#xA;&#xA;set( CMAKE_C_FLAGS "-lswresample")&#xA;&#xA;list(APPEND EXTRA_LIBS&#xA;"-lGL -lGLU -lX11 -lz -lva -lswresample"&#xA;)&#xA;&#xA;target_include_directories(ffmpeg_config INTERFACE&#xA;    ${AVCODEC_INCLUDE_DIR} &#xA;    ${AVFORMAT_INCLUDE_DIR}&#xA;    ${AVUTIL_INCLUDE_DIR}&#xA;    ${AVDEVICE_INCLUDE_DIR} &#xA;    ${OPENGL_INCLUDE_DIR}&#xA;    ${GLEW_INCLUDE_DIRS}&#xA;)&#xA;&#xA;target_link_libraries(ffmpeg_config INTERFACE&#xA;    ${AVCODEC_LIBRARY} &#xA;    ${AVFORMAT_LIBRARY} &#xA;    ${AVUTIL_LIBRARY} &#xA;    ${AVDEVICE_LIBRARY} &#xA;    ${OPENGL_LIBRARY}&#xA;    ${GLEW_LIBRARIES}&#xA;)&#xA;

    &#xA;

    Ubuntu 22.04, cmake 3.16.3, ffmpeg version git-2022-05-20-cb47f66

    &#xA;

  • Stream image from Android with FFMPEG

    9 février 2023, par xnok

    I'm currently receiving images from an external source as byte array and I would like to send it as raw video format via ffmpeg to a stream URL, where I have a RTSP server that receives RTSP streams (a similar unanswered question). However, I haven't worked with FFMPEG in Java, so i can't find an example on how to do it. I have a callback that copies the image bytes to a byte array as follows :

    &#xA;

            public class MainActivity extends Activity {&#xA;            final String rtmp_url = "rtmp://192.168.0.12:1935/live/test";&#xA;            private int PREVIEW_WIDTH = 384;&#xA;            private int PREVIEW_HEIGHT = 292;&#xA;            private String TAG = "MainActivity";&#xA;            String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);&#xA;            final String command[] = {ffmpeg,&#xA;                            "-y",  //Add "-re" for simulated readtime streaming.&#xA;                            "-f", "rawvideo",&#xA;                            "-vcodec", "rawvideo",&#xA;                            "-pix_fmt", "bgr24",&#xA;                            "-s", (Integer.toString(PREVIEW_WIDTH) &#x2B; "x" &#x2B; Integer.toString(PREVIEW_HEIGHT)),&#xA;                            "-r", "10",&#xA;                            "-i", "pipe:",&#xA;                            "-c:v", "libx264",&#xA;                            "-pix_fmt", "yuv420p",&#xA;                            "-preset", "ultrafast",&#xA;                            "-f", "flv",&#xA;                            rtmp_url};&#xA;            &#xA;      private UVCCamera mUVCCamera;&#xA;&#xA;public void handleStartPreview(Object surface) throws InterruptedException, IOException {&#xA;    Log.e(TAG, "handleStartPreview:mUVCCamera" &#x2B; mUVCCamera &#x2B; " mIsPreviewing:");&#xA;    if ((mUVCCamera == null)) return;&#xA;    Log.e(TAG, "handleStartPreview2 ");&#xA;    try {&#xA;        mUVCCamera.setPreviewSize(mWidth, mHeight, 1, 26, 0, UVCCamera.DEFAULT_BANDWIDTH, 0);&#xA;        Log.e(TAG, "handleStartPreview3 mWidth: " &#x2B; mWidth &#x2B; "mHeight:" &#x2B; mHeight);&#xA;    } catch (IllegalArgumentException e) {&#xA;        try {&#xA;            // fallback to YUV mode&#xA;            mUVCCamera.setPreviewSize(mWidth, mHeight, 1, 26, UVCCamera.DEFAULT_PREVIEW_MODE, UVCCamera.DEFAULT_BANDWIDTH, 0);&#xA;            Log.e(TAG, "handleStartPreview4");&#xA;        } catch (IllegalArgumentException e1) {&#xA;            callOnError(e1);&#xA;            return;&#xA;        }&#xA;    }&#xA;    Log.e(TAG, "handleStartPreview: startPreview1");&#xA;    int result = mUVCCamera.startPreview();&#xA;    mUVCCamera.setFrameCallback(mIFrameCallback, UVCCamera.PIXEL_FORMAT_RGBX);&#xA;    mUVCCamera.startCapture();&#xA;    Toast.makeText(MainActivity.this,"Camera Started",Toast.LENGTH_SHORT).show();&#xA;    ProcessBuilder pb = new ProcessBuilder(command);&#xA;    pb.redirectErrorStream(true);&#xA;    Process process = pb.start();&#xA;    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));&#xA;    OutputStream writer = process.getOutputStream();&#xA;    byte img[] = new byte[192*108*3];&#xA;    for (int i = 0; i &lt; 10; i&#x2B;&#x2B;)&#xA;    {&#xA;        for (int y = 0; y &lt; 108; y&#x2B;&#x2B;)&#xA;        {&#xA;            for (int x = 0; x &lt; 192; x&#x2B;&#x2B;)&#xA;            {&#xA;                byte r = (byte)((x * y &#x2B; i) % 255);&#xA;                byte g = (byte)((x * y &#x2B; i*10) % 255);&#xA;                byte b = (byte)((x * y &#x2B; i*20) % 255);&#xA;                img[(y*192 &#x2B; x)*3] = b;&#xA;                img[(y*192 &#x2B; x)*3&#x2B;1] = g;&#xA;                img[(y*192 &#x2B; x)*3&#x2B;2] = r;&#xA;            }&#xA;        }&#xA;&#xA;        writer.write(img);&#xA;    }&#xA;&#xA;    writer.close();&#xA;    String line;&#xA;    while ((line = reader.readLine()) != null)&#xA;    {&#xA;        System.out.println(line);&#xA;    }&#xA;&#xA;    process.waitFor();&#xA;}&#xA;public static void buildRawFrame(Mat img, int i)&#xA;{&#xA;    int p = img.cols() / 60;&#xA;    img.setTo(new Scalar(60, 60, 60));&#xA;    String text = Integer.toString(i&#x2B;1);&#xA;    int font = Imgproc.FONT_HERSHEY_SIMPLEX;&#xA;    Point pos = new Point(img.cols()/2-p*10*(text.length()), img.rows()/2&#x2B;p*10);&#xA;    Imgproc.putText(img, text, pos, font, p, new Scalar(255, 30, 30), p*2);  //Blue number&#xA;}&#xA;

    &#xA;

    Additionally : Android Camera Capture using FFmpeg

    &#xA;

    uses ffmpeg to capture frame by frame from native android camera and instead of pushing it via RTMP, they used to generate a video file as output. Although how the image was passed via ffmpeg was not informed.

    &#xA;

    frameData is my byte array and I'd like to know how can I write the necessary ffmpeg commands using ProcessBuilder to send an image via RTSP using ffmpeg for a given URL.

    &#xA;

    An example of what I am trying to do, In Python 3 I could easily do it by doing :

    &#xA;

    import cv2&#xA;import numpy as np&#xA;import socket&#xA;import sys&#xA;import pickle&#xA;import struct&#xA;import subprocess&#xA;&#xA;fps = 25&#xA;width = 224&#xA;height = 224&#xA;rtmp_url = &#x27;rtmp://192.168.0.13:1935/live/test&#x27;&#xA;    &#xA;    &#xA;    &#xA;    command = [&#x27;ffmpeg&#x27;,&#xA;               &#x27;-y&#x27;,&#xA;               &#x27;-f&#x27;, &#x27;rawvideo&#x27;,&#xA;               &#x27;-vcodec&#x27;, &#x27;rawvideo&#x27;,&#xA;               &#x27;-pix_fmt&#x27;, &#x27;bgr24&#x27;,&#xA;               &#x27;-s&#x27;, "{}x{}".format(width, height),&#xA;               &#x27;-r&#x27;, str(fps),&#xA;               &#x27;-i&#x27;, &#x27;-&#x27;,&#xA;               &#x27;-c:v&#x27;, &#x27;libx264&#x27;,&#xA;               &#x27;-pix_fmt&#x27;, &#x27;yuv420p&#x27;,&#xA;               &#x27;-preset&#x27;, &#x27;ultrafast&#x27;,&#xA;               &#x27;-f&#x27;, &#x27;flv&#x27;,&#xA;               rtmp_url]&#xA;    &#xA;    p = subprocess.Popen(command, stdin=subprocess.PIPE)&#xA;    &#xA;    while(True):&#xA;        frame = np.random.randint([255], size=(224, 224, 3))&#xA;        frame = frame.astype(np.uint8)&#xA;        p.stdin.write(frame.tobytes())&#xA;

    &#xA;

    I would like to do the same thing in Android

    &#xA;

    Update : I can reproduce @Rotem 's answer on Netbeans although, in Android I am getting NullPointer exception error when trying to execute pb.start().

    &#xA;

        Process: com.infiRay.XthermMini, PID: 32089&#xA;    java.lang.NullPointerException&#xA;        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1012)&#xA;        at com.infiRay.XthermMini.MainActivity.handleStartPreview(MainActivity.java:512)&#xA;        at com.infiRay.XthermMini.MainActivity.startPreview(MainActivity.java:563)&#xA;        at com.infiRay.XthermMini.MainActivity.access$1000(MainActivity.java:49)&#xA;        at com.infiRay.XthermMini.MainActivity$3.onConnect(MainActivity.java:316)&#xA;        at com.serenegiant.usb.USBMonitor$3.run(USBMonitor.java:620)&#xA;        at android.os.Handler.handleCallback(Handler.java:938)&#xA;        at android.os.Handler.dispatchMessage(Handler.java:99)&#xA;        at android.os.Looper.loopOnce(Looper.java:226)&#xA;        at android.os.Looper.loop(Looper.java:313)&#xA;        at android.os.HandlerThread.run(HandlerThread.java:67)&#xA;2022-06-02 11:47:20.300 32089-1049/com.infiRay.XthermMini E/libUVCCamera: [1049*UVCPreviewIR.cpp:505:uvc_preview_frame_callback]:receive err data&#xA;2022-06-02 11:47:20.304 32089-1049/com.infiRay.XthermMini E/libUVCCamera: [1049*UVCPreviewIR.cpp:505:uvc_preview_frame_callback]:receive err data&#xA;2022-06-02 11:47:20.304 32089-1049/com.infiRay.XthermMini E/libUVCCamera: [1049*UVCPreviewIR.cpp:505:uvc_preview_frame_callback]:receive err data&#xA;2022-06-02 11:47:20.308 32089-1049/com.infiRay.XthermMini E/libUVCCamera: [1049*UVCPreviewIR.cpp:505:uvc_preview_frame_callback]:receive err data&#xA;2022-06-02 11:47:20.312 32089-32089/com.infiRay.XthermMini E/MainActivity: onPause:&#xA;2022-06-02 11:47:20.314 32089-32581/com.infiRay.XthermMini I/Process: Sending signal. PID: 32089 SIG: 9&#xA;

    &#xA;