https://github.com/cine-io/android-ffmpeg-with-rtmp
script(s) to build ffmpeg for android, including support for RTMP (and OpenSSL)
https://github.com/cine-io/android-ffmpeg-with-rtmp
Last synced: 6 months ago
JSON representation
script(s) to build ffmpeg for android, including support for RTMP (and OpenSSL)
- Host: GitHub
- URL: https://github.com/cine-io/android-ffmpeg-with-rtmp
- Owner: cine-io
- Created: 2014-06-22T02:02:02.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2016-04-07T07:00:55.000Z (about 10 years ago)
- Last Synced: 2024-04-14T11:05:53.701Z (about 2 years ago)
- Language: Shell
- Size: 279 KB
- Stars: 238
- Watchers: 36
- Forks: 106
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-android-ui - https://github.com/cine-io/android-ffmpeg-with-rtmp
- awesome-android-libraries - android-ffmpeg-with-rtmp
README
# android-ffmpeg-with-rtmp
This repository contains script(s) to build ffmpeg for android with RTMP (and OpenSSL) support.
## Instructions
1. Install the [Android NDK][android-ndk] (tested with version r10).
2. Ensure that [cURL][cURL] is installed.
3. Ensure that [pkg-config][pkg-config] is installed.
4. Clone this repository and `cd` into its directory.
5. Run `build.sh`.
6. Look in `build/dist` for the resulting libraries and executables.
7. Look in `build/build.log` if something goes wrong.
For example:
```bash
$ git clone git@github.com:cine-io/android-ffmpeg-with-rtmp.git
$ cd android-ffmpeg-with-rtmp
$ ./build.sh
```
## Notes
The first time you run the script, it will try to find the location where
you've installed the NDK. It will also try to auto-detect your operating
system and architecture. This process might take a minute or two, so the
information will be saved into a configuration file called
`.build-config.sh` which will be used on subsequent executions of
the script.
The script is meant to be idempotent. However, should you want to start over
from scratch, it's a simple matter of:
```bash
$ rm -rf src build .build-config.sh
$ ./build.sh
```
## Android
To use `ffmpeg` with an Android app you will need to deploy the binaries along
with the libraries. Here's a listing of the `build/dist` directory.
```
.
├── bin
│ ├── ffmpeg
│ ├── openssl
│ └── ssltest
└── lib
├── libavcodec-56.so
├── libavdevice-56.so
├── libavfilter-5.so
├── libavformat-56.so
├── libavutil-54.so
├── libcrypto.so
├── librtmp-1.so
├── libssl.so
├── libswresample-1.so
└── libswscale-3.so
```
A simple way to deploy the binaries would be to archive (e.g. zip) these directories
and copy the archive in a res/raw directory within the Android project. Then at runtime,
unpack the archive into a directory accessible to the app and set the appropriate permissions,
e.g. chmod 750 -R directory-name.
In order for the Android app to use the libraries the LD_LIBRARY_PATH must be set to the location
where the libraries reside. For example:
```java
// Change the permissions
Runtime.getRuntime().exec("chmod -R 0750 "+ abspath).waitFor();
//...
ProcessBuilder processBuilder = new ProcessBuilder(cmd);
final Map environment = processBuilder.environment();
environment.put("LD_LIBRARY_PATH", context.getDir("lib", 0).getAbsolutePath());
Process process = processBuilder.start();
//...
```
## Acknowledgements
Inspired by: [openssl-android][openssl-android] and [FFmpeg-Android][FFmpeg-Android].
[openssl-android]:https://github.com/guardianproject/openssl-android
[FFmpeg-Android]:https://github.com/OnlyInAmerica/FFmpeg-Android
[android-ndk]:https://developer.android.com/tools/sdk/ndk/index.html
[cURL]:http://curl.haxx.se/
[pkg-config]:http://www.freedesktop.org/wiki/Software/pkg-config/