Python Ffmpeg In Memory


call location: linuxexchange. Check out the gst-python release notes here or download tarballs from here. Create an op that decodes the contents of an audio file. This option is thus mainly useful for testing. Additionally, avconv will usually need to copy the decoded frames from the GPU memory into the system memory, resulting in further performance loss. I often write about ffmpeg, because I use it for my videos. Nor has this filter been tested with anyone who has photosensitive epilepsy. View Narendra kumar’s profile on LinkedIn, the world's largest professional community. The major limitation throughout this process is the speed at which memory can be copied and transmitted. Toggle navigation sergem personal public notebook. Okay, kind of a weird problem. I've been programming for almost 4 years, but only about a month in python, so my advice may not be the most pertinent to python itself, but geared more towards the actual process. The examples below use the same method as shown in the. What I am doing is in the exec command I am giving the path to ffmpeg. The strip is composed of millions (sometimes billions) of slots. For example, I want to set the current position in my file to the frame #1234567 (in a file encoded at 44100 Hz), which is equivalent to seek at 27994. 2 at the moment). FFMPEGHandler is a handler of cloudooo for developing GUI conversion applications using FFmpeg cross-platform. However, if you want to force the Linux OS to do clearing memory cache on a particular interval, just add the command to cron job. Example: File Conversion. 16, 2019, 2:53 a. Raspberry Pi Setup Guide. It turns out that when decoding a subtitle frame, after processing the information from the got frame all I was missing was: avsubtitle_free( &ffSubtitleFrame ); Now I can get on with the. Additionally, ffmpeg will usually need to copy the decoded frames from the GPU memory into the system memory, resulting in further performance loss. It looks like mysqld was using over 2GB of virtual memory. The main reason for that, was that I thought that was the simplest way of running Linux commands. Firstly the name, because these days "procedural" makes people think of random procedural generation. news about the dynamic, interpreted, interactive, object-oriented, extensible programming language Python. 0 Framework. See the compilation guides for more information. FFmpeg Batch Converter is a Windows front-end for ffmpeg users, that allows to use the full potential of ffmpeg command line with a few mouse clicks in a convenient GUI with drag and drop, progress information, You can change encoding priority, pause and resume, set automatic shutdown. This is the command I want to run. Joomla 4 will have huge improvements for both users and developers. Dhananjoy Mandal. mp4 I hadn’t worked with map data before this so it was a great learning experience for me. This modified text is an extract of the original Stack Overflow Documentation created by following contributors and released under CC BY-SA 3. call location: linuxexchange. tien nguyen. gluon-ts - GluonTS - Probabilistic Time Series Modeling in Python #opensource. Compiling on a regular computer isn’t easy, but compiling for the Raspberry Pi takes a little more patience and care. Most POSIX systems come with a version of Python 2. /app ENV PORT 8081 EXPOSE 8081 These RUN apt-install is my added to default image. I am trying to perform a calculation in numpy that depends on several parameters, and involved the creation of many intermediate arrays. The Python 3 core itself is as much as 10% faster in several aspects, with some standard modules like re processing regular expressions as much as 20x faster. The first step is to download FFmpeg binaries, if not already done, the details are in the first chapter or on the dedicated website. In Python it's simple because the language handles memory management for you. It is a great utility, but also a nightmare to deal with. Apr 5, 2016. In the official python documentation we can read that subprocess should be used for accessing system commands. FFMpeg will then encapsulate this audio in an Icecast ICY/HTTP/TCP container format (a process called “packaging”) and establish a connection to the Icecast server up in the cloud. The ffmpeg showwavespic filter can make a PNG file of the. A while back I asked on the ffmpeg mailing list how to pipe RGB data in to ffmpeg. Warping C libraries with Python CTypes: On the C side 19/11/2014 19/11/2014 zajano Programming Tags: c interface , ctypes , cython , python Python is a nice high-level programming language which offers easy coding partly due to type-free variables (like Matlab), automatic memory allocation/deallocation mechanism, and a comprehensive set of. How to Decode h264 Video Stream?. exe file in web server (we have used - C. c in FFmpeg before 3. The most recent version was released on August 20, 2019. 10-6, it used 1 core on a 4 core system. 7 is the only supported version in 2. Theoretically you do not need to install FFmpeg for using this library. This software simplest example to use FFmpeg to read (or write) from memory. You choose a runtime when you create a function, and you can change runtimes by updating your function's configuration. [email protected] new() and ImageDraw, then an input is given to the simulation, and repeat until i have all the image frames needed to create a GIF. FFmpeg is a very popular and powerful video manipulation tool that can be applied on multiple tasks including decoding, transcoding and so on. You don't have to cross-compile it for ffmpeg. I've considered using ffmpeg to stream, but I feel like that's a silly way if going about it. Let’s see the output for this program: Notice that we even closed the buffer after we’re done with the buffer. com aspires to publish all content under a Creative Commons license but may not be able to do so in all cases. Using a python wrapper, I'm feeding ffmpeg a webm chunk (let's say 1 chunk each second) and. ffmpeg documentation: Reading from an IStream in a IOContext. c66x accelerator resources can be assigned / allocated to VMs, allowing multiple instances of ffmpeg to run concurrently, each with their own accelerator cores, memory, streaming network I/O, independently from the server motherboard. sounds like you are hitting the memory limit, and so certain processes aren't able to run, and therefore no file was created, and then finally you are unable to find that file. 04 LTS with CUDA 5. Also see: How to grab the desktop (screen) with FFmpeg. Also, we used the print method with an optional argument to specify an IO stream of the variable, which is perfectly compatible with print statement. The 3to2 project, and the pasteurize tool (also part of python-future) offer options for migrating a pure Python 3 application to the large common subset of Python 2 and Python 3 if a critical Python 2 only dependency is identified, and it can’t be invoked in a separate Python 2 process, or cost effectively ported to also run on Python 3. sounds like you are hitting the memory limit, and so certain processes aren't able to run, and therefore no file was created, and then finally you are unable to find that file. When using ffmpeg to compress a video, I recommend using the libx264 codec, from experience it has given me excellent quality for small video sizes. How to Use FFmpeg. Using the base programming of Python, web scraping can be performed without using any other third party tool. OpenCV-Python Tutorials. FFmpeg (or "Fast Forward MPEG") is a simple yet feature rich command line utility to allow the manipulation (including decoding, encoding, transcoding, muxing, demuxing, streaming, filtering, and playing) of media and video files. These together with a provided internal Python module that makes use of FFmpeg utility applications serve to ensure video de-/encoding capabilities are operational. However, we should be careful if we use an 8-bit character set. Linux benchmarking. Not everyone knows how to use it though. org (the website) welcomes all Python game, art, music, sound, video and multimedia projects. It is most commonly used to work with Unicode text, but other encodings are also available for. comment: S(k) -> N as k->0, due to finite size and periodic boundary condition, where N is the total number of particles. We use cookies for various purposes including analytics. ffplay [options] [input_url] 2 Description. You can use this easily accessible tool to organize, analyze and store your data in tables. com - date: July 31, 2013 I've read several similar posts on this issue but none seem to help me directly. StringIO, however, is a native in-memory unicode container and will exhibit similar speed to BytesIO. cliping a webm file using moviepy and ffmpeg parameters. Install OpenCV 2. The 3to2 project, and the pasteurize tool (also part of python-future) offer options for migrating a pure Python 3 application to the large common subset of Python 2 and Python 3 if a critical Python 2 only dependency is identified, and it can’t be invoked in a separate Python 2 process, or cost effectively ported to also run on Python 3. MusicPlayer - MusicPlayer is a high-quality music player implemented in Python, using FFmpeg and PortAudio. What made you feel competent in Python? Something simple like a GUI frontend to command line tools like ffmpeg, or PIL. Why ffmpeg? Because: Which is better: FFmpeg or GStreamer? Why? - Quora ffmpeg is also base for KODI (XBMC) player and works very well as probably we all know. Getting help. You will also receive a free Computer Vision Resource Guide. As a resource for sharing data across processes, shared memory blocks may outlive the original process that created them. subprocess. org, a friendly and active Linux Community. here is the part of the code of the animation. There are plenty of bugs when running a stream using older versions of ffmpeg or avconv, including but not limited to 6GB of memory use, problems with the audio and synchronization of the audio and the video. Submitted by Guo, Yejun on Oct. A Student s Guide to Python for Physical Modeling. It has been widely integrated into other tools which. +apache2 is now the default, since that's the most popular and also the only one that works with Leopard right now, and there's also a new variant +no_web if you don't want. The video output is very light as it does not occupy much memory. I use FFmpeg in my Android app to merge videos together. Check out the gst-python release notes here or download tarballs from here. It is a great utility, but also a nightmare to deal with. cliping a webm file using moviepy and ffmpeg parameters. When using ffmpeg to compress a video, I recommend using the libx264 codec, from experience it has given me excellent quality for small video sizes. Change Python related directories as per your installation. exe shouldn't be there. FFMpeg will then encapsulate this audio in an Icecast ICY/HTTP/TCP container format (a process called “packaging”) and establish a connection to the Icecast server up in the cloud. Using -threads 4 made all my CPU cores go to 100% and I got a conversion rate of 47 fps. ffmpeg - i input. [[email protected] opencv-1. jpg This command generates a 320×240 sized JPG thumbnail at the 4th second in the video. As of Python 2. Due to the complexity of the dependencies, PyAV is not always the easiest Python package to install. Reading Media Related Examples. ffmpeg documentation: Seeking within an IStream in an IOContext. Writing pages out to disk is a relatively slow process (compared to the speed of the CPU and the main memory), however it is a better option than just crashing or killing off processes. Linux benchmarking. then it might work better over pipes. Right now, if i use the command line with ffmpeg: ffmpeg -i test. FFMPEG run out of memory. But there’s still a problem. Is there some way to tell ffmpeg to drop frames more aggressively? The problems happen when the memory use reaches 1. Stepping through a few functions, showing what is created in Global Space, what goes on the Heap, and how call frames are created and deleted as functions begin and end. OSError: [Errno 12] Cannot allocate memory from python subprocess. Additionally, ffmpeg will usually need to copy the decoded frames from the GPU memory into the system memory, resulting in further performance loss. ffmpeg documentation: Seeking within an IStream in an IOContext. So that was nice, one-liner FFmpeg command to convert video to high quality GIF clip. Julius [1] is a pretty good offline speech recognition engine. FFmpeg and its photosensitivity filter are not making any medical claims. The good thing about this tool is that it is absolutely free to use. I'm working on a Python module that harnesses some functionality from the FFmpeg framework - specifically, the ebur128 filter function. Scroll down to the process named ffmpeg, left click it to select, right click it, and set the priority to "Low" or "Very Low". Use the ffmpeg force_key_frames option to force key frames in the input at the specified location, together with the segment option segment_time_delta to account for possible roundings operated when setting key frame times. You can set the output format you can set the co-ordinates of the image which is to be overplayed. mp4 So I included in HTMLv5 code such entry: It works correctly with Chrome but not with Firefox. FFMpeg will then encapsulate this audio in an Icecast ICY/HTTP/TCP container format (a process called “packaging”) and establish a connection to the Icecast server up in the cloud. by Christoph Gohlke, Laboratory for Fluorescence Dynamics, University of California, Irvine. If you need additional help then send a message to the ffmpeg-user mailing list (see MailingListEtiquette first) or hang out in the #ffmpeg IRC channel on Freenode. The ffmpeg showwavespic filter can make a PNG file of the. 0 ffmpeg-debian Several vulnerabilities have been discovered in FFmpeg coders, which are used by by MPlayer and other applications. C, C++ and Python programmer. (Because of this, Quora can run many more Python processes on a single machine, since they all share a single copy of this data in memory. All of the columns are sortable; give them a click!. The code is returning the segment I want, however, I am noticed a decrease in the quality of the. c66x accelerator resources can be assigned / allocated to VMs, allowing multiple instances of ffmpeg to run concurrently, each with their own accelerator cores, memory, streaming network I/O, independently from the server motherboard. In this example the input has a duration of 00:57:28. Release every 2 weeks. 00 for use of this handout Introduction. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Real-world signal graphs can get a heck of a lot more complex, but ffmpeg-python handles arbitrarily large (directed-acyclic) signal graphs. js application. el7 - Packer is a tool for creating identical machine images for multiple platforms from a single source configuration. libavformat usually takes in a file name and reads media directly from the filesystem. This file contains the python code used to interface with the Twitch chat. WITH_FFMPEG flag decided on compilation with FFMpeg Verify the configuration before proceeding. Unofficial Windows Binaries for Python Extension Packages. Longer release cycles = exponential complexity, more difficult to troubleshoot and rollback. I downloaded the files for ffmpeg and tried to run the php script and convert the file but no success. 5 or later with developer packages (python-dev, python-numpy) ffmpeg or libav development packages. 04 ships with the ffmpeg fork libav in version 0. Reader for the SPE format (#358 by lschr). Actually, the input will be a string in python, of the form "RGBRGBRGBRGB" where R,G,B are each one character (one byte) that gives a value between 0 and 255. Unfortunately (depending on your version and release of Python) some types of objects use "free lists" which are a neat local optimization but may cause memory fragmentation, specifically by making more and more memory "earmarked" for only objects of a certain type and thereby unavailable to the "general fund". Why the blank look? Just a temporary site glitch. I asked my wife to read something out loud as if she was dictating to Siri for about 1. You can also create the ffmpeg process from python and consume its output directly. FFmpeg utility supports almost all major audio and video formats, if you want to check the ffmpeg supported available formats you can use. Install FFmpeg if it isn't already installed. html - Table - vertical numbering using PHP for cycle - I have to do something in PHP for "cycle" which will generate a table. Theoretically you do not need to install FFmpeg for using this library. This is my first instructable on opencv. sounds like you are hitting the memory limit, and so certain processes aren't able to run, and therefore no file was created, and then finally you are unable to find that file. Like I said in the last section, machine learning based algorithms are rarely 100% accurate. SSH Communications Security SSH Secure Shell for Servers. Reading from memory; Seeking within an IStream in an IOContext Introduction. Which worked just fine. Matplotlib and Seaborn are some nice libraries in Python to create great looking plots. yeah it turned out to be an issue in using an ffmpeg pipe. For other platforms, specifically Windows, macOS, Android, and iOS, we provide binary releases in the form of official installers or tarballs maintained by the GStreamer project. I'm looking for the duration, height, width, etc. Supported Python versions. You get the warning because ffmpeg's internal JPEG encoder expects JPEG-range input, and does so using the old (deprecated. 4, the following command creates output. and encoder with ffmpeg lib and x264, then both save in a. In order to calculate the duration of the original file and create the clip, I used the os Python module to run ffmpeg commands. But there's still a problem. Theoretically you do not need to install FFmpeg for using this library. ffmpeg documentation: Seeking within an IStream in an IOContext. FFmpeg (or "Fast Forward MPEG") is a simple yet feature rich command line utility to allow the manipulation (including decoding, encoding, transcoding, muxing, demuxing, streaming, filtering, and playing) of media and video files. Most distributions don't ship it manually and many don't support it, so. Using FFmpeg and libavcodec you can develop applications that can parse and display video files and be sure they will work on most platform, including of course Linux, Macintosh, and Windows boxes. Dockerfile - python, opencv and ffmpeg on ARM Architecture This image is based on docker-python-opencv-ffmpeg with the base image changed from ubuntu to resin/rpi-raspbian:stretch. Detecting Barcodes in Images using Python and OpenCV provides python scripts which run with OpenCV 2. 6 How to add ffmpeg support to. Real-world signal graphs can get a heck of a lot more complex, but ffmpeg-python handles arbitrarily large (directed-acyclic) signal graphs. This tutorial introduces the processing of a huge dataset in python. Using the system Python runtime and not patching it. ffplay [options] [input_url] 2 Description. 2, am trying to understand its memory usage, and put the RAM in that machine accordingly. el provides python-mode, which enables basic indentation and syntax highlighting support. 3-Rolling, and Solus Linux were the operating systems under test in the latest of our Windows vs. Direct calculation with Fourier density correlation. So you managed to install VapourSynth. For other platforms, specifically Windows, macOS, Android, and iOS, we provide binary releases in the form of official installers or tarballs maintained by the GStreamer project. I've a python script which basically converts a video into images and stores them in a folder, then all this images are read and informations are extracted from them, then images are deleted. I'm looking for the duration, height, width, etc. Search for jobs related to Ffmpeg filters using example or hire on the world's largest freelancing marketplace with 15m+ jobs. Stack Exchange network consists of 175 Q&A communities including Stack Overflow, the largest, most trusted online community for developers to learn, share their knowledge, and build their careers. To make sure things are in order, reboot your RaspberryPi. To preserve memory, only the last 50 to 100 frames are kept. ffmpeg is a powerful media library. Many Thanks. Good developers will want to track the memory usage of their application and look to lower memory usage. The kernel automatically controls memory allocation for processes. Each process has its own system state, which includes memory, lists of open files, a program counter that keeps track of the instruction being executed, and a call stack used to hold the local vari. There are a few ways to read Audio/Video into FFmpeg. Specify custom flags and renaming with regular expressions. If you want the option of being able to supply some extra command line flags / args to the script, then make a new file named video2gif-prompt. It is most commonly used to work with Unicode text, but other encodings are also available for. If you're on Linux or a BSD variant, you can install GStreamer using your package manager. 10 and are licensed as GNU GPL 3. If you want to read from memory (such as streams), do the following:. Raspberry Pi Setup Guide. Installing SWIG on debian systems is simple as. After downloading, we need to install it as per the specifications of our OS. DevOps Linux. 2019/09/16 [FFmpeg-user] changes to ffmpeg to stop having to put an escape Julian Gardner 2019/09/13 Re: [FFmpeg-user] Playback of mp4 file created by concatenating 9 mp4 files Adrian 2019/09/13 Re: [FFmpeg-user] Playback of mp4 file created by concatenating 9 mp4 files Carl Eugen Hoyos. 0 — Python 3. 10-6, it used 1 core on a 4 core system. I have in mind generating a large number of these, as long as a full DVD worth at 30fps, then using ffmpeg (followed by dvdauthor) to encode them in to MPEG2 for DVD usage. So, that's me with a passport sized photo in my hand. Download with Google Download with Facebook or download with email. But there's still a problem. Re-encoding video library in x265 (HEVC) with no quality loss. This aims to provide a universal driver in the same way that a generic driver handles USB storage devices (memory sticks, hard drives etc). chat module¶. Make sure you have a test suite, make sure it runs simply and quickly and is documented for other people to use, and try to get it on continuous integration somewhere. When you install musdb (which depends on stempeg), it is therefore necessary to also install the FFMPEG library. played with gstreamer take 80MB of RAM memory where with libeplayer3 the same stream take only 30MB. - iwishiwasaneagle Nov 10 '17 at 10:07 I would work directly in C++ and use only OpenCV to process the image data, you can use things like MIT's shared memory extension for X to capture the screen, in some cases (small rectangles), you can get much. 4ti2 7za _go_select _libarchive_static_for_cph. Subprocess A running program is called a process. Submitted by Guo, Yejun on Oct. It is available for Windows, Linux and Mac operating systems. To properly compete with Python-specific IDEs (Integrated Development Environments), you’ll add more capabilities. To celebrate OpenCV 3. I downloaded the files for ffmpeg and tried to run the php script and convert the file but no success. It can also capture and encode in real-time. Also it's more limited than the C version and I suspect much less performant because of the frequent calls to C code from python (parsing messages from the bus, for example, or a callback per buffer). When using ffmpeg to compress a video, I recommend using the libx264 codec, from experience it has given me excellent quality for small video sizes. Sometimes it plays agains the developers. ffmpeg version 3. For example Python 3. 1 toolkit) with the now-inbuilt GPU based YADIF_CUDA deinterlacer mentioned. View Javier Gil’s profile on LinkedIn, the world's largest professional community. Specify custom flags and renaming with regular expressions. Tag Archives: ffmpeg Developing a Tetris game with PixarUSD and Python Scripting in Omniverse Kit; Ogl - Minimal WebGL framework D3D12 Memory Allocator 1. exe extension on a filename indicates an exe cutable file. For convenience, we developed a python package called stempeg that allows to easily parse the stem files and decode them on-the-fly. in Python the class hierarchy is defined right to left, so in this case the Mixin2 class is the base class, extended by Mixin1 and finally by BaseClass. My Blog Saturday, 15 September 2012. Changing the colors. I can't guarantee that there aren't any production chains that use FFMPEG or a modified form of it, but in general, it is worth simply pointing out that not all encoders are created equally and while ffmpeg does very, very well for being free, it isn't the best option in all cases all the time, even if for business reasons rather than technical. After downloading, we need to install it as per the specifications of our OS. raw: Invalid data found when processing input. This is inherent in the design as flash memory is solid state whereas hard disks are electro-mechanical with a “head” that needs to be moved around using a “drive” mechanism. I've googled around but I can't see a solution to this problem. decode_audio( contents, file_format=None, samples_per_second=None, channel_count=None, stream=None ) Warning: THIS FUNCTION IS DEPRECATED. The code uses very common software (Numpy and FFMPEG) and can run on (almost) any machine with (almost) any version of Python. if it's anything in between (as it is by default), the memory footprint is considerably greater. Start Python from the Start Menu, or make sure the PATH is set correctly so Windows can find the Python interpreter. The standard FFMPEG install provides support for basic video and audio formats. Download the Panda3D SDK. misc; Tags. You don't have to cross-compile it for ffmpeg. exe on your computer is a Trojan that you should remove, or whether it is a file belonging to the Windows operating system or to a trusted application. DevOps Automation. Download And Install ffmpeg (. Even more handy is somewhat controversially-named setdefault(key, val) which sets the value of the key only if it is not already in the dict, and returns that value in any case:. Open a terminal on the Raspberry Pi either via the desktop or by SSH'ing in (default credentials are pi/raspberry). • If a program actually fits in memory and has enough disk space, it is guaranteed to crash. OpenCV-Python Tutorials Documentation Release 1. Unofficial Windows Binaries for Python Extension Packages. The default is something like 384 MB. Secondly, the memory usage column displayed does not account for full process usage. ffmpeg's use in professional film and broadcast settings is probably also limited by the learning curve of not just the application's own syntax(es) but also the exposed complexity of video formats. Sometimes in ffmpeg a user has to know a ton about source and target codec in order to get things done. 5GB, however then it gets restarted every 10 minutes which breaks the preferred 15-minute length of each transcoded file. If it is a crash, then compile x264 with. You get the warning because ffmpeg's internal JPEG encoder expects JPEG-range input, and does so using the old (deprecated. So it's the encoder whose memory use needs to be addressed, not FFmpeg directly. One hacky way to acheive the same would be to call ffmpeg using…. Nor has this filter been tested with anyone who has photosensitive epilepsy. 本项目的音频分类流程如下,整个处理流程都基于python实现:从线上拿到m3u8媒体数据流,解析ts链接,通过ffmpeg库提取视频流中的音频数据,音频重采样到16k,切分为10s的音频段,使用librosa库提取10s音频段的mfcc…. Face and Eye Detection With Raspberry Pi Zero and Opencv: In this instructable i'm going to show how you can detect face and eye using raspberry pi and opencv. The mSys make version seems to be 3. Installation. Building and Parsing XML Document using Python While developing a web Application in most cases we need to build and parse XML document using Python. How to create and manage Python environments in Visual Studio. Theoretically you do not need to install FFmpeg for using this library. FFmpeg in VMs. Furthermore, Opencv videoCapture expects BGR or gray8 format in cpu memory (not NVMM) as appsink. The following is the code I am using to capture the video from rtsp stream and then save some frames every several minutes. OpenCV provides a very simple interface to this. raw: Invalid data found when processing input. Ideally I think I should not do this way because it seem strange and some "unknown" drawback. preferably in admin command line and ffmpeg-normalize should automatically install (I suppose you have your python installation dir in PATH as well). You can also use ffmpeg to get the duration by fully decoding the file. I would like to run the following command in a python script, I also want to make it loop over several videos in a folder. Hi Ernest — to get FFMPEG support for OpenCV, you’ll need to (1) install FFMPEG on your Ubuntu system, (2) compile OpenCV with the -D WITH_ffmpeg=ON flag set (you should also make sure that’s the correct flag, I’m doing this from memory since it’s been a long time since I’ve had to use FFMPEG), and then (3) re-install OpenCV once. For convenience, we developed a python package called stempeg that allows to easily parse the stem files and decode them on-the-fly. This only works in Linux as ffserver is not available on the other platforms although ffmpeg itself is. 0 ffmpeg-debian Several vulnerabilities have been discovered in FFmpeg coders, which are used by by MPlayer and other applications. 08/06/2019; 12 minutes to read +4; In this article. If I do # ulimit-a I get. With mod_python you can write web-based applications in Python that will run many times faster than traditional CGI and will have access to advanced features such as ability to retain database connections and other data between hits and access to Apache internals.