
Recherche avancée
Autres articles (72)
-
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs -
HTML5 audio and video support
13 avril 2011, parMediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
For older browsers the Flowplayer flash fallback is used.
MediaSPIP allows for media playback on major mobile platforms with the above (...) -
Support audio et vidéo HTML5
10 avril 2011MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)
Sur d’autres sites (12116)
-
OpenCV and Cloud Cameras
8 mai 2014, par AlexanderSo as a bit of context ; this program was built originally to work with USB cameras - but a few things changed. I’m trying to convert it to work with networked cameras, but my presence here should make it quite apparent what my level of success has been. I still consider myself somewhat new at programming, and definately new at visual processing/OpenCV - so please forgive a few blunders if I make them. I’m going to try to provide as much detail as possible, so apologies for the length below.
I’m using :
- OpenCV 2.4.6.0
- Microsoft Visual Studio Express 2012
- C++
- D-Link Cloud Camera 7100
I am trying to access the DLink camera’s video feed through OpenCV.
I can access the camera through it’s IP address with a browser without any issues. Unfourtunately ; my program is less cooperative. I’ve put it on two computers (excluding the computer it gets compiled on, which for unrelated/unchangable reasons cannot be placed on the same network the network camera is on) which both fail to grant my program access to the camera. One computer gives the OpenCV-generated error :
warning : Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:529)
This error occurs with just about everything I try that doesn’t somehow generate more problems. The other computer (same code) generates no such error - it just doesn’t get the camera’s output either.
For reference - the code in OpenCV’s cap_ffmpeg_impl.hpp around line 529 is as follows :
522 bool CvCapture_FFMPEG::open( const char* _filename )
523 {
524 unsigned i;
525 bool valid = false;
526
527 close();
528
529 #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0)
530 int err = avformat_open_input(&ic, _filename, NULL, NULL);
531 #else
532 int err = av_open_input_file(&ic, _filename, NULL, 0, NULL);
533 #endif
...
616 }...for which I have no idea what I’m looking at.
My entire program is rather large, so I’m editing it down as much as possible to help keep this readable - if I miss something you think is important please leave a comment telling me as much so I can throw it in...
First up - this is one of the first things in main() so I don’t have to recompile every time I want to try a different value :
3380 cout << "Please Enter Video Location: ";
3381 cin >> videoFeedAddress;
3382 cout << "videoFeedAddress: " << videoFeedAddress << endl;Just a simple string value.
Next up - the actual place we’re having the problem ! Probably...Note that in the below code - if networkCam is false and a USB camera is connected there is no problem. The error here is caused by line 153.
121 void displayCameraView()
122 {
123 if(camviewOn) // displayCameraView is triggered by a button the user can press as often as they want. Doesn't mean we want to let them break everything.
124 {return;}
125 else
126 {
127 CvCapture* cv_cap;
128 VideoCapture cv_cap_IP;
129 Mat color_img_IP;
130 camviewOn = true;
131 int capture;
132 IplImage* color_img;
133 if(!networkCam)
134 {
135 cv_cap = cvCaptureFromCAM(0);
136 Sleep(100);
137 if(!cv_cap)
138 {
139 setExitError(1002);
140 if(textOutput){cout << "Video Error: Video input will not work.\n";}
141 MessageBox(hwnd, "Error opening camera.", "Error", MB_ICONEXCLAMATION);
142 cvReleaseCapture( &cv_cap );
143 cvDestroyWindow("Camera View");
144 return;
145 }
146 color_img = cvQueryFrame(cv_cap);
147 clickPointStorage.create(((Mat)color_img).rows, ((Mat)color_img).cols, CV_8UC3);
148 }
149 else
150 {
151 ///*\
152
153 cv_cap_IP.open(videoFeedAddress);
154 Sleep(100);
155 if(!cv_cap_IP.isOpened())
156 {
157 setExitError(1002);
158 if(textOutput){cout << "Video Error: Video input will not work.\n";}
159 MessageBox(hwnd, "Error opening camera.", "Error", MB_ICONEXCLAMATION);
160 cvDestroyWindow("Camera View");
161 return;
162 }
163 clickPointStorage.create(color_img_IP.rows, color_img_IP.cols, CV_8UC3);
164
165 //\*/
166 }
167 clickPointStorage.setTo(Scalar(0, 0, 0));
168 cvNamedWindow("Camera View", 0); // create window
169 cvSetMouseCallback("Camera View", CallBackFunc, NULL);
170 IplImage* IplClickPointStorage = new IplImage(clickPointStorage);
171 IplImage* Ipl_IP_Img;
172
173 if(!networkCam)
174 {
175 for(;;)
176 {
177 IplClickPointStorage = new IplImage(clickPointStorage);
178 cvAdd(cvQueryFrame(cv_cap), IplClickPointStorage, color_img); // get frame
181 cvShowImage("Camera View", color_img); // show frame
182 capture = cvWaitKey(10); // wait 10 ms or for key stroke
183 if(capture == 27 || capture == 13 || capture == 32){break;} // if ESC, Return, or space; close window.
184 }
185 /* clean up */
186 cvReleaseCapture( &cv_cap );
187 delete cv_cap;
188 delete IplClickPointStorage;
189 }
190 else
191 {
192 ///*\
193
194 for(;;)
195 {
196 cv_cap_IP.read(color_img_IP);
197 IplClickPointStorage = new IplImage(clickPointStorage);
198 Ipl_IP_Img = new IplImage(color_img_IP);
199 cvAdd(Ipl_IP_Img, IplClickPointStorage, color_img);
200 cvShowImage("Camera View", color_img); // show frame
201 capture = cvWaitKey(10); // wait 10 ms or for key stroke
202 if(capture == 27 || capture == 13 || capture == 32){break;} // if ESC, Return, or space; close window.
203 }
204 cv_cap_IP.release();
205 delete Ipl_IP_Img;
206 delete IplClickPointStorage;
207
208 //\*/
209 }
210 cvDestroyWindow("Camera View");
211 camviewOn = false;
212 }
213 return;
214 }As I said, on one computer I get the above error - both of them give me my own error from here :
155 if(!cv_cap_IP.isOpened())
156 {
157 setExitError(1002);
158 if(textOutput){cout << "Video Error: Video input will not work.\n";}
159 MessageBox(hwnd, "Error opening camera.", "Error", MB_ICONEXCLAMATION);
160 cvDestroyWindow("Camera View");
161 return;
162 }...which of course tells me cv_cap_IP is not open. One of my primary concerns is with the videoFeedAddress variable. No value I enter seems to get a different result.
I searched the Googles - and come across a number of different "possible" answers - but none of them seem to work for me. If you attempt to google it yourself you may come across some of these :
- This is one of the first configurations my code was in. No dice.
- This one is talking about files - not cameras. It also mentions codecs - but I wouldn’t be able to watch it in a web browser if that were the problem, right ? (Correct me if I’m wrong here...)
- This one has the wrong error code/points to the wrong line of code !
- This one mentions compiling OpenCV with ffmpeg support - but I believe 2.4.6.0 already comes with that all set and ready ! Otherwise it’s not that different from what I’ve already tried.
- Now THIS one appears to be very similar to what I have, but the only proposed solution doesn’t really help as I had already located a list of connections. I do not believe this is a duplicate, because as per THIS meta discussion I had a lot more information and so didn’t feel comfortable taking over someone else’s question - especially if I end up needing to add even more information later.
Back to the videoFeedAddress variable : I found THIS site that lists a number of possible addresses to connect to it. since there exists no 7100 anywhere in the list - and the install is the same for the DCS-7010L I used the addresses found next to the DCS-7010L listings. Most of them can be reached through the browser, confirming that they reach the camera - but they don’t seem to affect the outcome when I change them.
As per many of the above links, I’ve tried many of them both with any without username:password, port number (554), and variations on ?.mjpg (the format) at the end.
Any ideas ?
-
Compress video with ffmpeg4android library
30 mars 2015, par Huy TowerI tried to follow ffmpeg4android library, and I get the problem when compressing the video, as the Log image below.
I use intent to transfer to Compressing Media class,
Intent intent = new Intent(this, CompressingMedia.class);
intent.putExtra("file_path", mLlItems.get(0).getPath());
startActivity(intent);This is the class was transfered to :
public class CompressingMedia extends BaseWizard {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Log.d(Prefs.TAG, "path " + intent.getExtras().getString("file_path"));
// /storage/emulated/0/DCIM/Camera/VID_20140312_090612.mp4
String command = "ffmpeg -y -i " + intent.getExtras().getString("file_path") +
" -strict experimental -s 320x240 -r 15 -aspect 3:4 -ab 12288 -vcodec mpeg4 -b 2097152 -sample_fmt s16 /sdcard/out.mp4";
// if you want to change the default work location (/sdcard/videokit/) use the uncomment the below method.
// It must be defined before calling the copyLicenseAndDemoFilesFromAssetsToSDIfNeeded method,
// in order for this method to copy the assets to the correct location.
// setWorkingFolder("/sdcard/videokit/");
// this will copy the license file and the demo video file.
// to the videokit work folder location.
// without the license file the library will not work.
copyLicenseAndDemoFilesFromAssetsToSDIfNeeded();
commandStr = command;
setCommand(commandStr);
runTranscoing();
}
}Although I received the notification Transcoding Successfully, but it looks like the capacity of file after compressing is always be 0. (the log in the bottom of images)
I don’t know the result as image below is good or not, I can not get the expected result - The video was compressed totally successfully.
Someone know why after compressing the file is always be 0, please tell me. Thanks.
This is the Log Cat :
03-13 14:49:45.655 : I/ActivityManager(6065) : Timeline :
Activity_launch_request id:app.cloudstringers time:3821235903-13 14:49:45.665 : V/Home(6065) : Global ID is 000400010007 ;Sell is 3
03-13 14:49:45.770 : D/ffmpeg4android(6065) : path
/storage/emulated/0/videokit/out.mp403-13 14:49:45.770 : I/ffmpeg4android(6065) : workingFolderPath :
/sdcard/videokit/03-13 14:49:45.775 : D/ffmpeg4android(6065) : Working directory exists,
not coping assests (license file and demo videos)03-13 14:49:45.785 : D/ffmpeg4android(6065) : output directory exists.
03-13 14:49:45.785 : I/ffmpeg4android(6065) : Command is set
03-13 14:49:45.785 : I/ffmpeg4android(6065) : set
remoteNotificationIconId : 003-13 14:49:45.785 : D/ffmpeg4android(6065) : Client Cannot unbind -
service not bound03-13 14:49:45.785 : D/ffmpeg4android(6065) : Client stopService()
03-13 14:49:45.790 : W/ContextImpl(6065) : Implicit intents with
startService are not safe : Intent
act=com.netcompss.ffmpeg4android.FFMpegRemoteServiceBridge
android.content.ContextWrapper.stopService:499
com.netcompss.ffmpeg4android_client.BaseWizard.stopService:451
com.netcompss.ffmpeg4android_client.BaseWizard.runTranscoing:28503-13 14:49:45.795 : I/ffmpeg4android(6065) :
!!!!!!!!!!!!!!!!!!services.size() : 103-13 14:49:45.795 : I/ffmpeg4android(6065) : putting Base categoty
03-13 14:49:45.810 : D/ffmpeg4android(6065) : started :
com.netcompss.ffmpeg4android.FFMpegRemoteServiceBridge03-13 14:49:45.810 : D/ffmpeg4android(6065) : Client startService()
03-13 14:49:45.810 : D/ffmpeg4android(6065) : bindService() called
03-13 14:49:45.815 : W/ContextImpl(6065) : Implicit intents with
startService are not safe : Intent
act=com.netcompss.ffmpeg4android.FFMpegRemoteServiceBridge
android.content.ContextWrapper.bindService:517
com.netcompss.ffmpeg4android_client.BaseWizard.bindService:462
com.netcompss.ffmpeg4android_client.BaseWizard.runTranscoing:28803-13 14:49:45.820 : D/ffmpeg4android(6065) : Client bindService()
03-13 14:49:45.935 : I/ffmpeg4android(6616) : =======service onCreate() :
Stopping forground (to overcome 2.3.x bug)03-13 14:49:45.935 : I/ffmpeg4android(6616) : =======service
onBind()=======03-13 14:49:45.940 : I/ffmpeg4android(6616) : ===onStartCommand called
03-13 14:49:45.940 : I/ffmpeg4android(6616) : ===onStartCommand cat :
Base03-13 14:49:45.940 : D/ffmpeg4android(6616) : onStartCommand,
START_STICKY, base Command03-13 14:49:45.955 : I/ffmpeg4android(6616) : get
remoteNotificationIconId : 003-13 14:49:45.955 : I/ffmpeg4android(6616) : notifIcon is set
03-13 14:49:45.955 : I/ffmpeg4android(6616) : Start RemoteService with
notification id : 532603-13 14:49:45.965 : I/ffmpeg4android(6616) : Run called.
03-13 14:49:45.965 : D/ffmpeg4android(6616) : Sleeping, waiting for
command03-13 14:49:45.970 : D/ffmpeg4android(6065) : Client
onServiceConnected()03-13 14:49:45.970 : I/ffmpeg4android(6065) : invokeService called
03-13 14:49:45.970 : I/Videokit(6065) : licenseCheck in path :
/sdcard/videokit03-13 14:49:45.970 : I/Videokit(6065) : isLicExistsComplex...
03-13 14:49:45.970 : I/Videokit(6065) : trying to open
/sdcard/videokit/ffmpeglicense.lic03-13 14:49:45.970 : I/Videokit(6065) : license file found...
03-13 14:49:45.970 : I/Videokit(6065) : time decoded : 1394535283
03-13 14:49:45.970 : I/Videokit(6065) : timeStrDec 1394535283 is a valid
number.03-13 14:49:45.970 : I/Videokit(6065) : time diff : 161702
03-13 14:49:45.970 : I/Videokit(6065) : You used 1 of your 15 trial
days.03-13 14:49:45.970 : I/ffmpeg4android(6065) : setting remote
notification info03-13 14:49:45.970 : D/ffmpeg4android(6616) : command items num : 21
03-13 14:49:45.970 : D/ffmpeg4android(6616) : command : ffmpeg -y -i
/storage/emulated/0/videokit/out.mp4 -strict experimental -s 320x240
-r 15 -aspect 3:4 -ab 12288 -vcodec mpeg4 -b 2097152 -sample_fmt s16 /sdcard/out.mp403-13 14:49:45.970 : D/ffmpeg4android(6616) : workingFolder from remote :
/sdcard/videokit03-13 14:49:45.970 : D/ffmpeg4android(6065) : deleteing :
/sdcard/videokit/vk.log isdeleted : true03-13 14:49:45.975 : D/ffmpeg4android(6065) : deleteing :
/sdcard/videokit/ffmpeg4android.log isdeleted : false03-13 14:49:45.975 : D/ffmpeg4android(6065) : deleteing :
/sdcard/videokit/videokit.log isdeleted : true03-13 14:49:45.980 : D/ffmpeg4android(6065) : Client invokeService()
03-13 14:49:45.980 : D/ffmpeg4android(6065) : Acquire wake lock
03-13 14:49:46.265 : D/ffmpeg4android(6616) : Sleeping, waiting for
command03-13 14:49:46.295 : D/ffmpeg4android(6065) : TranscodeBackground
doInBackground started03-13 14:49:46.295 : I/ffmpeg4android(6616) : =======remote service
runTranscoding ======03-13 14:49:46.340 : V/HomeAsync(6065) : TOTAL_SPACE is
1 ;AVAILABLE_SPACE is 0.45103-13 14:49:46.345 : I/ActivityManager(6065) : Timeline : Activity_idle
id : android.os.BinderProxy@423deed8 time:3821304503-13 14:49:46.345 : I/ActivityManager(6065) : Timeline : Activity_idle
id : android.os.BinderProxy@420323a0 time:3821304503-13 14:49:46.565 : D/dalvikvm(6616) : Trying to load lib
/data/app-lib/app.cloudstringers-2/libvideokit.so 0x41b285f003-13 14:49:46.570 : D/dalvikvm(6616) : Added shared lib
/data/app-lib/app.cloudstringers-2/libvideokit.so 0x41b285f003-13 14:49:46.570 : I/Videokit(6616) : Loading native library compiled
at 21:59:53 Oct 23 201303-13 14:49:46.575 : I/ffmpeg4android(6616) : ===============Running
command from thread path : /sdcard/videokit03-13 14:49:46.575 : I/Videokit(6616) : vk ffmpeg sdcardPath :
/sdcard/videokit03-13 14:49:46.575 : I/Videokit(6616) : licenseCheck in path :
/sdcard/videokit03-13 14:49:46.575 : I/Videokit(6616) : isLicExistsComplex...
03-13 14:49:46.575 : I/Videokit(6616) : trying to open
/sdcard/videokit/ffmpeglicense.lic03-13 14:49:46.575 : I/Videokit(6616) : license file found...
03-13 14:49:46.575 : I/ffmpeg4android(6616) :
=======ProgressBackgroundRemote doInBackground=========03-13 14:49:46.575 : I/Videokit(6616) : time decoded : 1394535283
03-13 14:49:46.575 : I/Videokit(6616) : timeStrDec 1394535283 is a valid
number.03-13 14:49:46.575 : I/Videokit(6616) : time diff : 161703
03-13 14:49:46.575 : I/Videokit(6616) : You used 1 of your 15 trial
days.03-13 14:49:46.575 : D/Videokit(6616) : license check rc : 0
03-13 14:49:46.575 : D/Videokit(6616) : run() called verion 2.0
03-13 14:49:46.575 : D/Videokit(6616) : run passing off to main()
03-13 14:49:46.800 : D/ffmpeg4android(6065) : onServiceDisconnected
03-13 14:49:48.640 : I/ffmpeg4android(6065) : Got real duration :
00:00:07.7803-13 14:49:48.640 : I/ffmpeg4android(6065) : ==== getting
currentVkLogSize from VK03-13 14:49:48.640 : D/ffmpeg4android(6065) : currentVkLogSize : 5751
03-13 14:49:48.645 : I/ffmpeg4android(6065) : No ffmpeg4android_log
file, using vk log03-13 14:49:48.645 : I/line(6065) : _rate, rate, width or height
03-13 14:49:48.650 : I/line(6065) : Statistics : 0 seeks, 0 writeouts
03-13 14:49:48.650 : I/line(6065) : Statistics : 72873 bytes read, 2
seeks03-13 14:49:48.650 : D/ffmpeg4android(6065) : currentTimeStr : exit
03-13 14:49:48.650 : D/ffmpeg4android(6065) : ============Found one of
the exit tokens in the log============03-13 14:49:48.650 : I/ffmpeg4android(6065) : onProgressUpdate : 100
03-13 14:49:48.650 : D/ffmpeg4android(6065) : Releasing wake lock
03-13 14:49:48.650 : D/ffmpeg4android(6065) : TranscodeBackground
onPostExecute03-13 14:49:48.700 : D/ffmpeg4android(6065) : /sdcard/videokit/null
length in bytes : 003-13 14:49:48.700 : D/ffmpeg4android(6065) : showNotifications
03-13 14:49:48.700 : W/ffmpeg4android(6065) : output file is not set use
the setOutputFilePath method to set the full output file path03-13 14:49:48.705 : I/ffmpeg4android(6065) : FFMPEG finished.
03-13 14:49:48.710 : D/ffmpeg4android(6065) : releaseService()
03-13 14:49:48.710 : D/ffmpeg4android(6065) : Client stopService()
03-13 14:49:48.710 : W/ContextImpl(6065) : Implicit intents with
startService are not safe : Intent
act=com.netcompss.ffmpeg4android.FFMpegRemoteServiceBridge
android.content.ContextWrapper.stopService:499
com.netcompss.ffmpeg4android_client.BaseWizard.stopService:451
com.netcompss.ffmpeg4android_client.BaseWizard.handleServiceFinished:513 -
Convert video to animated GIF with FFmpeg [migrated]
5 janvier 2014, par flexageI have FFmpeg installed and working on my Ubuntu 12.04 LTS Server.
I have managed to successfully automate the process of uploading a video and converting it to both H264/MP4 and OGV for display on the web.
I also wanted to generate an animated GIF thumbnail for the video.
I have got as far as the following, which I'm pretty sure is generating 2 frames a second for the first 10 seconds of the video :
/usr/local/bin/ffmpeg -i "$3/uploads/video-queue/$1.$2" -vf scale=320:-1 -t 10 -r 2 "$3/uploads/video-queue/processing/$1.gif"
What I would prefer to do is generate 1 frame every 25 seconds for the duration of the entire video, but also with a maximum number of frames set as something like 50 frames.
I would prefer not to have dependencies on other components such as Image Magik, and I would like to keep this purely shell based.
Thanks in advance ! You guys are way smarter than me for sure !
Here is the complete console output from an ffmpeg run of the command above :
root@ubuntu:/home/fckster/etc/php5# /home/fckster/public_html/cronscripts/process-video-gif.sh 1-1388841621 wmv /home/fckster/public_html
ffmpeg version N-59480-g8feaa83-syslint Copyright (c) 2000-2014 the FFmpeg developers
built on Jan 2 2014 00:32:20 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
configuration: --prefix=/usr/local/cpffmpeg --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libopencore-amrnb --enable-decoder=liba52 --enable-libopencore-amrwb --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/local/cpffmpeg/include/ --extra-ldflags=-L/usr/local/cpffmpeg/lib --enable-version3 --extra-version=syslint
libavutil 52. 59.100 / 52. 59.100
libavcodec 55. 47.100 / 55. 47.100
libavformat 55. 22.102 / 55. 22.102
libavdevice 55. 5.102 / 55. 5.102
libavfilter 4. 0.103 / 4. 0.103
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
[wmv3 @ 0x24dd680] Extra data: 8 bits left, value: 0
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, asf, from '/home/fckster/public_html/uploads/video-queue/1-1388841621.wmv':
Metadata:
WM/ToolName : Flip4Mac WMV Export Component for QuickTime (Mac)
WM/ToolVersion : 2204
encoder : Lavf54.29.104
Duration: 00:01:11.30, start: 0.140000, bitrate: 2096 kb/s
Stream #0:0: Video: wmv3 (Main) (WMV3 / 0x33564D57), yuv420p, 1280x720, 29.97 tbr, 1k tbn, 1k tbc
Stream #0:1: Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, stereo, fltp, 48 kb/s
[wmv3 @ 0x24dd680] Extra data: 8 bits left, value: 0
Output #0, gif, to '/home/fckster/public_html/uploads/video-queue/processing/1-1388841621.gif':
Metadata:
WM/ToolName : Flip4Mac WMV Export Component for QuickTime (Mac)
WM/ToolVersion : 2204
encoder : Lavf55.22.102
Stream #0:0: Video: gif, pal8, 320x180, q=2-31, 200 kb/s, 100 tbn, 10 tbc
Stream mapping:
Stream #0:0 -> #0:0 (wmv3 -> gif)
Press [q] to stop, [?] for help
frame= 87 fps= 52 q=0.0 Lsize= 2131kB time=00:00:10.00 bitrate=1745.9kbits/s dup=0 drop=170
video:2219kB audio:0kB subtitle:0 global headers:0kB muxing overhead -3.939009%