
Recherche avancée
Médias (1)
-
Video d’abeille en portrait
14 mai 2011, par
Mis à jour : Février 2012
Langue : français
Type : Video
Autres articles (42)
-
Demande de création d’un canal
12 mars 2010, parEn fonction de la configuration de la plateforme, l’utilisateur peu avoir à sa disposition deux méthodes différentes de demande de création de canal. La première est au moment de son inscription, la seconde, après son inscription en remplissant un formulaire de demande.
Les deux manières demandent les mêmes choses fonctionnent à peu près de la même manière, le futur utilisateur doit remplir une série de champ de formulaire permettant tout d’abord aux administrateurs d’avoir des informations quant à (...) -
Diogene : création de masques spécifiques de formulaires d’édition de contenus
26 octobre 2010, parDiogene est un des plugins ? SPIP activé par défaut (extension) lors de l’initialisation de MediaSPIP.
A quoi sert ce plugin
Création de masques de formulaires
Le plugin Diogène permet de créer des masques de formulaires spécifiques par secteur sur les trois objets spécifiques SPIP que sont : les articles ; les rubriques ; les sites
Il permet ainsi de définir en fonction d’un secteur particulier, un masque de formulaire par objet, ajoutant ou enlevant ainsi des champs afin de rendre le formulaire (...) -
Configuration spécifique pour PHP5
4 février 2011, parPHP5 est obligatoire, vous pouvez l’installer en suivant ce tutoriel spécifique.
Il est recommandé dans un premier temps de désactiver le safe_mode, cependant, s’il est correctement configuré et que les binaires nécessaires sont accessibles, MediaSPIP devrait fonctionner correctement avec le safe_mode activé.
Modules spécifiques
Il est nécessaire d’installer certains modules PHP spécifiques, via le gestionnaire de paquet de votre distribution ou manuellement : php5-mysql pour la connectivité avec la (...)
Sur d’autres sites (6797)
-
How to send libmmpeg AVPacket through WebRTC (using libdatachannel)
29 mars 2022, par mikeI'm encoding a video frame with the
ffmpeg
libraries, generating anAVPacket
with compressed data.

Thanks to some recent advice here on S/O, I am trying to send that frame over a network using the
WebRTC
librarylibdatachannel
, specifically by adapting the example here :

https://github.com/paullouisageneau/libdatachannel/tree/master/examples/streamer


I am seeing problems inside
h264rtppacketizer.cpp
(part of the library, not the example) which are almost certainly to do with how I'm providing the sample data.
(I don't think that this is anything to do with libdatachannel specifically, it will be an issue with what I'm sending)

The example code reads each encoded frame from a file, and populates a
sample
by setting the content of the file to the contents of the file :

sample = *reinterpret_cast *>(&fileContents);


sample
is just astd::vector<byte>;</byte>


I have naively copied the contents of an
AVPacket->data
pointer into thesample
vector :

sample.resize(pkt->size);
memcpy(sample.data(), pkt->data, pkt->size * sizeof(std::byte)); 



but the packetizer is falling over when trying to get length values out of that data.
Specifically, in the following code, the first iteration gets a length of 1, but the second, looking up index 5, gives 1119887324. This is way too big for my data, which is only 3526 bytes (the whole frame is a single colour so likely to be small once encoded) :


while (index < message->size()) {
assert(index + 4 < message->size());
auto lengthPtr = (uint32_t *)(message->data() + index);
uint32_t length = ntohl(*lengthPtr);
auto naluStartIndex = index + 4;
auto naluEndIndex = naluStartIndex + length;
assert(naluEndIndex <= message->size()); 
 
auto begin = message->begin() + naluStartIndex;
auto end = message->begin() + naluEndIndex;
nalus->push_back(std::make_shared<nalunit>(begin, end));
index = naluEndIndex;
}
</nalunit>


Here is a dump of


uint32_t length = ntohl(*lengthPtr);



for the first few elements of the message (
*lengthPtr
in parentheses) :

[2022-03-29 15:12:01.182] [info] index 0: 1 (16777216)
[2022-03-29 15:12:01.183] [info] index 1: 359 (1728118784)
[2022-03-29 15:12:01.184] [info] index 2: 91970 (1114046720)
[2022-03-29 15:12:01.186] [info] index 3: 23544512 (3225577217)
[2022-03-29 15:12:01.186] [info] index 4: 1732427807 (532693607)
[2022-03-29 15:12:01.187] [info] index 5: 1119887324 (3693068354)
[2022-03-29 15:12:01.188] [info] index 6: 3223313413 (98312128)
[2022-03-29 15:12:01.188] [info] index 7: 534512896 (384031)
[2022-03-29 15:12:01.188] [info] index 8: 3691315291 (1526728156)
[2022-03-29 15:12:01.189] [info] index 9: 83909537 (2707095557)
[2022-03-29 15:12:01.189] [info] index 10: 6004992 (10574592)
[2022-03-29 15:12:01.190] [info] index 11: 1537277952 (41307)
[2022-03-29 15:12:01.190] [info] index 12: 2701131779 (50331809)
[2022-03-29 15:12:01.192] [info] index 13: 768 (196608)



(I know I should post a complete sample, I am working on it)


- 

-
I am fairly sure I am just missing something basic. E.g. am I supposed to do something with the
AVPacket
side_data
, does AVPacket have or miss some header info ?

-
If I just fwrite the
pkt->data
for a single frame to disk, I can read the codec information with ffprobe :







Input #0, h264, from 'encodedOut.h264':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: h264 (Constrained Baseline), yuv420p(progressive), 1280x720, 30 tbr, 1200k tbn



- 

- whereas the same for the example input files (again a single frame) gives the following :




[h264 @ 000001c88d1135c0] Format h264 detected only with low score of 1, misdetection possible!
[h264 @ 000001c88f337400] missing picture in access unit with size 85306
[extract_extradata @ 000001c88d11ee40] No start code is found.
sample-0.h264: Invalid data found when processing input



-
-
Android FFMPEG video editing operation failed
30 mai 2022, par Bipin VayaluI am using FFMPEG in my Android app for video cropping and trimming but when I execute the following command on a specific video. FFMPEG command execution failed and the app crashed.


Command :


ffmpeg -y -i "/storage/emulated/0/DCIM/Camera/Test-Video.mp4" -crf 19 -color_primaries 1 -color_trc 1 -colorspace 1 -vcodec h264 -acodec aac -ss 00:00:00 -t 00:00:15 -async 1 -vf "crop=540:539:0:0:exact=0 , scale='if(gt(iw,ih),min(640,iw),-2)':'if(gt(iw,ih),-2,min(640,ih))'" "/data/user/0/com.bipin.myapp/cache/Test-Video_16535454525974982000318197164476.mp4"



Failure logs :


2022-05-26 11:40:52.605 5308-9484/com.bipin.myapp D/[RxCachedThreadScheduler-11;FFmpegUtil#performVideoOperation:151]: Debug - performVideoOperation - Source File: Test-Video.mp4, size: 9.697972297668457 MBs
2022-05-26 11:40:52.605 5308-9484/com.bipin.myapp D/[RxCachedThreadScheduler-11;FFmpegUtil#performVideoOperation:159]: Debug - performVideoOperation - Command: -y -i "/storage/emulated/0/DCIM/Camera/Test-Video.mp4" -crf 19 -color_primaries 1 -color_trc 1 -colorspace 1 -vcodec h264 -acodec aac -ss 00:00:00 -t 00:00:15 -async 1 -vf "crop=540:539:0:0:exact=0 , scale='if(gt(iw,ih),min(640,iw),-2)':'if(gt(iw,ih),-2,min(640,ih))'" "/data/user/0/com.bipin.myapp/cache/Test-Video_16535454525974982000318197164476.mp4"
2022-05-26 11:40:52.607 5308-9484/com.bipin.myapp I/mobile-ffmpeg: Loading mobile-ffmpeg.
2022-05-26 11:40:52.617 5308-9484/com.bipin.myapp I/mobile-ffmpeg: Loaded mobile-ffmpeg-min-gpl-arm64-v8a-4.4-lts-20200724.
2022-05-26 11:40:52.619 5308-9485/com.bipin.myapp D/mobile-ffmpeg: Callback thread started.
2022-05-26 11:40:52.620 5308-9485/com.bipin.myapp I/mobile-ffmpeg: ffmpeg version v4.4-dev-416
2022-05-26 11:40:52.620 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Copyright (c) 2000-2020 the FFmpeg developers
2022-05-26 11:40:52.620 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.620 5308-9485/com.bipin.myapp I/mobile-ffmpeg: built with Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn)
2022-05-26 11:40:52.620 5308-9485/com.bipin.myapp I/mobile-ffmpeg: configuration: --cross-prefix=aarch64-linux-android- --sysroot=/files/android-sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/linux-x86_64/sysroot --prefix=/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm64/ffmpeg --pkg-config=/usr/bin/pkg-config --enable-version3 --arch=aarch64 --cpu=armv8-a --cc=aarch64-linux-android21-clang --cxx=aarch64-linux-android21-clang++ --extra-libs='-L/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm64/cpu-features/lib -lndk_compat' --target-os=android --enable-neon --enable-asm --enable-inline-asm --enable-cross-compile --enable-pic --enable-jni --enable-optimizations --enable-swscale --enable-shared --enable-v4l2-m2m --disable-outdev=fbdev --disable-indev=fbdev --enable-small --disable-openssl --disable-xmm-clobber-test --disable-debug --enable-lto --disable-neon-clobber-test --disable-programs --disable-postproc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --disable-sndio --disable-schannel --disable-securetransport --disable-xlib --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --disable-videotoolbox --disable-audiotoolbox --disable-appkit --disable-alsa --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --enable-libx264 --enable-gpl --enable-libxvid --enable-gpl --enable-libx265 --enable-gpl --enable-libvidstab --enable-gpl --disable-sdl2 --enable-zlib --enable-mediacodec
2022-05-26 11:40:52.621 5308-9485/com.bipin.myapp I/mobile-ffmpeg: libavutil 56. 55.100 / 56. 55.100
2022-05-26 11:40:52.621 5308-9485/com.bipin.myapp I/mobile-ffmpeg: libavcodec 58. 96.100 / 58. 96.100
2022-05-26 11:40:52.621 5308-9485/com.bipin.myapp I/mobile-ffmpeg: libavformat 58. 48.100 / 58. 48.100
2022-05-26 11:40:52.622 5308-9485/com.bipin.myapp I/mobile-ffmpeg: libavdevice 58. 11.101 / 58. 11.101
2022-05-26 11:40:52.622 5308-9485/com.bipin.myapp I/mobile-ffmpeg: libavfilter 7. 87.100 / 7. 87.100
2022-05-26 11:40:52.622 5308-9485/com.bipin.myapp I/mobile-ffmpeg: libswscale 5. 8.100 / 5. 8.100
2022-05-26 11:40:52.622 5308-9485/com.bipin.myapp I/mobile-ffmpeg: libswresample 3. 8.100 / 3. 8.100
2022-05-26 11:40:52.638 5308-5308/com.bipin.myapp D/InputMethodManager: startInputInner - Id : 0
2022-05-26 11:40:52.638 5308-5308/com.bipin.myapp I/InputMethodManager: startInputInner - mService.startInputOrWindowGainedFocus
2022-05-26 11:40:52.645 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/DCIM/Camera/Test-Video.mp4':
2022-05-26 11:40:52.645 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Metadata:
2022-05-26 11:40:52.645 5308-9485/com.bipin.myapp I/mobile-ffmpeg: major_brand : 
2022-05-26 11:40:52.646 5308-9485/com.bipin.myapp I/mobile-ffmpeg: mp42
2022-05-26 11:40:52.646 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.646 5308-9485/com.bipin.myapp I/mobile-ffmpeg: minor_version : 
2022-05-26 11:40:52.646 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 1
2022-05-26 11:40:52.646 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.646 5308-9485/com.bipin.myapp I/mobile-ffmpeg: compatible_brands: 
2022-05-26 11:40:52.646 5308-9485/com.bipin.myapp I/mobile-ffmpeg: isommp41mp42
2022-05-26 11:40:52.646 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.646 5308-9485/com.bipin.myapp I/mobile-ffmpeg: creation_time : 
2022-05-26 11:40:52.646 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 2022-04-05T14:20:18.000000Z
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Duration: 
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 00:00:15.48
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: , start: 
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 0.000000
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: , bitrate: 
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 5255 kb/s
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Stream #0:0
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: (und)
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: : Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709), 540x960, 5251 kb/s
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: , 
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 30.04 fps, 
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 30 tbr, 
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 600 tbn, 
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 1200 tbc
2022-05-26 11:40:52.647 5308-9485/com.bipin.myapp I/mobile-ffmpeg: (default)
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Metadata:
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: creation_time : 
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 2022-04-05T14:20:18.000000Z
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: handler_name : 
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Core Media Video
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Stream mapping:
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Stream #0:0 -> #0:0
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: (h264 (native) -> h264 (libx264))
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.648 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Press [q] to stop, [?] for help
2022-05-26 11:40:52.673 5308-9485/com.bipin.myapp W/mobile-ffmpeg: [graph 0 input from stream 0:0 @ 0xb400007bf58e0ed0] sws_param option is deprecated and ignored
2022-05-26 11:40:52.674 5308-9485/com.bipin.myapp I/mobile-ffmpeg: [libx264 @ 0xb400007c65974720] using cpu capabilities: ARMv8 NEON
2022-05-26 11:40:52.678 5308-9485/com.bipin.myapp I/mobile-ffmpeg: [libx264 @ 0xb400007c65974720] profile High, level 3.0, 4:2:0, 8-bit
2022-05-26 11:40:52.678 5308-9485/com.bipin.myapp I/mobile-ffmpeg: [libx264 @ 0xb400007c65974720] 264 - core 160 - H.264/MPEG-4 AVC codec - Copyleft 2003-2020 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=19.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
2022-05-26 11:40:52.678 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Output #0, mp4, to '/data/user/0/com.bipin.myapp/cache/Test-Video_16535454525974982000318197164476.mp4':
2022-05-26 11:40:52.678 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Metadata:
2022-05-26 11:40:52.678 5308-9485/com.bipin.myapp I/mobile-ffmpeg: major_brand : 
2022-05-26 11:40:52.678 5308-9485/com.bipin.myapp I/mobile-ffmpeg: mp42
2022-05-26 11:40:52.678 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.678 5308-9485/com.bipin.myapp I/mobile-ffmpeg: minor_version : 
2022-05-26 11:40:52.678 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 1
2022-05-26 11:40:52.679 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.679 5308-9485/com.bipin.myapp I/mobile-ffmpeg: compatible_brands: 
2022-05-26 11:40:52.679 5308-9485/com.bipin.myapp I/mobile-ffmpeg: isommp41mp42
2022-05-26 11:40:52.679 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.679 5308-9485/com.bipin.myapp I/mobile-ffmpeg: encoder : 
2022-05-26 11:40:52.679 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Lavf58.48.100
2022-05-26 11:40:52.679 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.679 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Stream #0:0
2022-05-26 11:40:52.679 5308-9485/com.bipin.myapp I/mobile-ffmpeg: (und)
2022-05-26 11:40:52.679 5308-9485/com.bipin.myapp I/mobile-ffmpeg: : Video: h264 (libx264) (avc1 / 0x31637661), yuv420p(bt709), 540x538, q=-1--1
2022-05-26 11:40:52.679 5308-9485/com.bipin.myapp I/mobile-ffmpeg: , 
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 30 fps, 
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 15360 tbn, 
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 30 tbc
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: (default)
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Metadata:
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: creation_time : 
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 2022-04-05T14:20:18.000000Z
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: handler_name : 
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Core Media Video
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: encoder : 
2022-05-26 11:40:52.680 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Lavc58.96.100 libx264
2022-05-26 11:40:52.681 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.681 5308-9485/com.bipin.myapp I/mobile-ffmpeg: Side data:
2022-05-26 11:40:52.681 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.681 5308-9485/com.bipin.myapp I/mobile-ffmpeg: cpb: 
2022-05-26 11:40:52.682 5308-9485/com.bipin.myapp I/mobile-ffmpeg: bitrate max/min/avg: 0/0/0 buffer size: 0 
2022-05-26 11:40:52.684 5308-9485/com.bipin.myapp I/mobile-ffmpeg: vbv_delay: N/A
2022-05-26 11:40:52.684 5308-9485/com.bipin.myapp I/mobile-ffmpeg: 
2022-05-26 11:40:52.797 5308-5308/com.bipin.myapp D/[main;BaseDaggerFragment#onDestroyView:90]: Debug - PostMediaTabFragment onDestroyView called
2022-05-26 11:40:52.798 5308-5308/com.bipin.myapp D/[main;ViewBindingBaseFragment#onDestroyView:32]: Debug - PostMediaTabFragment onDestroyView called
2022-05-26 11:40:52.895 5308-9521/com.bipin.myapp A/libc: Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xb400007a53e6d000 in tid 9521 (RxCachedThreadS), pid 5308 (com.bipin.myapp)
2022-05-26 11:40:54.302 9524-9524/? A/DEBUG: Cmdline: com.bipin.myapp
2022-05-26 11:40:54.302 9524-9524/? A/DEBUG: pid: 5308, tid: 9521, name: RxCachedThreadS >>> com.bipin.myapp <<<
2022-05-26 11:40:54.302 9524-9524/? A/DEBUG: #00 pc 000000000058b8d0 /data/app/~~QE7_ItG7A3ZSxt4PIZf-2w==/com.bipin.myapp-o6_afbhi9zItP6DEnUAd6w==/base.apk!libavcodec.so
2022-05-26 11:40:54.398 1189-1447/? W/ActivityManager: Missing app error report, app = com.bipin.myapp crashing = true notResponding = false
2022-05-26 11:40:54.407 1189-9530/? W/ActivityManager: crash : com.bipin.myapp,10342



-
Stream image from Android with FFMPEG
9 février 2023, par xnokI'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 :


public class MainActivity extends Activity {
 final String rtmp_url = "rtmp://192.168.0.12:1935/live/test";
 private int PREVIEW_WIDTH = 384;
 private int PREVIEW_HEIGHT = 292;
 private String TAG = "MainActivity";
 String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
 final String command[] = {ffmpeg,
 "-y", //Add "-re" for simulated readtime streaming.
 "-f", "rawvideo",
 "-vcodec", "rawvideo",
 "-pix_fmt", "bgr24",
 "-s", (Integer.toString(PREVIEW_WIDTH) + "x" + Integer.toString(PREVIEW_HEIGHT)),
 "-r", "10",
 "-i", "pipe:",
 "-c:v", "libx264",
 "-pix_fmt", "yuv420p",
 "-preset", "ultrafast",
 "-f", "flv",
 rtmp_url};
 
 private UVCCamera mUVCCamera;

public void handleStartPreview(Object surface) throws InterruptedException, IOException {
 Log.e(TAG, "handleStartPreview:mUVCCamera" + mUVCCamera + " mIsPreviewing:");
 if ((mUVCCamera == null)) return;
 Log.e(TAG, "handleStartPreview2 ");
 try {
 mUVCCamera.setPreviewSize(mWidth, mHeight, 1, 26, 0, UVCCamera.DEFAULT_BANDWIDTH, 0);
 Log.e(TAG, "handleStartPreview3 mWidth: " + mWidth + "mHeight:" + mHeight);
 } catch (IllegalArgumentException e) {
 try {
 // fallback to YUV mode
 mUVCCamera.setPreviewSize(mWidth, mHeight, 1, 26, UVCCamera.DEFAULT_PREVIEW_MODE, UVCCamera.DEFAULT_BANDWIDTH, 0);
 Log.e(TAG, "handleStartPreview4");
 } catch (IllegalArgumentException e1) {
 callOnError(e1);
 return;
 }
 }
 Log.e(TAG, "handleStartPreview: startPreview1");
 int result = mUVCCamera.startPreview();
 mUVCCamera.setFrameCallback(mIFrameCallback, UVCCamera.PIXEL_FORMAT_RGBX);
 mUVCCamera.startCapture();
 Toast.makeText(MainActivity.this,"Camera Started",Toast.LENGTH_SHORT).show();
 ProcessBuilder pb = new ProcessBuilder(command);
 pb.redirectErrorStream(true);
 Process process = pb.start();
 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
 OutputStream writer = process.getOutputStream();
 byte img[] = new byte[192*108*3];
 for (int i = 0; i < 10; i++)
 {
 for (int y = 0; y < 108; y++)
 {
 for (int x = 0; x < 192; x++)
 {
 byte r = (byte)((x * y + i) % 255);
 byte g = (byte)((x * y + i*10) % 255);
 byte b = (byte)((x * y + i*20) % 255);
 img[(y*192 + x)*3] = b;
 img[(y*192 + x)*3+1] = g;
 img[(y*192 + x)*3+2] = r;
 }
 }

 writer.write(img);
 }

 writer.close();
 String line;
 while ((line = reader.readLine()) != null)
 {
 System.out.println(line);
 }

 process.waitFor();
}
public static void buildRawFrame(Mat img, int i)
{
 int p = img.cols() / 60;
 img.setTo(new Scalar(60, 60, 60));
 String text = Integer.toString(i+1);
 int font = Imgproc.FONT_HERSHEY_SIMPLEX;
 Point pos = new Point(img.cols()/2-p*10*(text.length()), img.rows()/2+p*10);
 Imgproc.putText(img, text, pos, font, p, new Scalar(255, 30, 30), p*2); //Blue number
}



Additionally : Android Camera Capture using FFmpeg


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.


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.


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


import cv2
import numpy as np
import socket
import sys
import pickle
import struct
import subprocess

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



I would like to do the same thing in Android


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


Process: com.infiRay.XthermMini, PID: 32089
 java.lang.NullPointerException
 at java.lang.ProcessBuilder.start(ProcessBuilder.java:1012)
 at com.infiRay.XthermMini.MainActivity.handleStartPreview(MainActivity.java:512)
 at com.infiRay.XthermMini.MainActivity.startPreview(MainActivity.java:563)
 at com.infiRay.XthermMini.MainActivity.access$1000(MainActivity.java:49)
 at com.infiRay.XthermMini.MainActivity$3.onConnect(MainActivity.java:316)
 at com.serenegiant.usb.USBMonitor$3.run(USBMonitor.java:620)
 at android.os.Handler.handleCallback(Handler.java:938)
 at android.os.Handler.dispatchMessage(Handler.java:99)
 at android.os.Looper.loopOnce(Looper.java:226)
 at android.os.Looper.loop(Looper.java:313)
 at android.os.HandlerThread.run(HandlerThread.java:67)
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
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
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
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
2022-06-02 11:47:20.312 32089-32089/com.infiRay.XthermMini E/MainActivity: onPause:
2022-06-02 11:47:20.314 32089-32581/com.infiRay.XthermMini I/Process: Sending signal. PID: 32089 SIG: 9