#1947 closed enhancement (fixed)
Support for OpenH264 v1.6.0 codec
Reported by: | ming | Owned by: | nanang |
---|---|---|---|
Priority: | normal | Milestone: | release-2.6 |
Component: | pjmedia | Version: | trunk |
Keywords: | Cc: | ||
Backport to 1.x milestone: | Backported: | no |
Description (last modified by ming)
Support for the open source implementation of H.264 codec from http://www.openh264.org.
Requirement:
- OpenH264 library version 1.6 release (download here)
- To avoid conflict, it is recommended to cleanly remove ALL previous/other versions of OpenH264 on your machine, especially if you previously used OpenH264 version 1.0 following the ticket #1758. (If you encounter runtime error openh264.cpp .......SVC encoder Initialize failed, rc=1, it is likely caused by this issue).
Implementation features:
- Constrained Baseline, default level=30 (0x1e)
- packetization modes: 1, 0
- key frame request and indication
- obey remote's fmtp
Notes:
- currently transmission is hard coded to use only single NAL (packetization mode 0) regardless of remote's fmtp for interop reason. The same is also done in ffmpeg wrapper.
- whole frame for file encoding is implemented but currently doesn't work
Below are the steps to use the codec:
For GNU targets:
- Build the OpenH264 library and install it to a directory (with "make install"). By default it installs to /usr/local. You need to modify the Makefile to install it to different location (=prefix).
- Run PJSIP's configure. If you specify alternate location (prefix) to OpenH264 installation, specify the location with --with-openh264 option. E.g.:
./configure --with-openh264=/home/user/opt
- If you specify an alternate OpenH264 location, add the location path (the path which contains libopenh264*.dylib) to your OS dynamic library path. For example, on Mac:
export DYLD_LIBRARY_PATH=/Users/teluu/openh264-1.6-mac/lib:$DYLD_LIBRARY_PATH
For Visual Studio:
- Build the OpenH264 library with MinGW make & gcc, and install it to a directory (with "make install"). By default it installs to /usr/local. You need to modify the Makefile to install it to different location (=prefix).
- Create openh264.lib from openh264.def, note that the static lib libopenh264.a outputted by MinGW gcc cannot be used by VS, so we are going to use the dynamic lib version instead:
- open 'Visual Studio command prompt', e.g: Win Start Menu -> MS VS 2005 -> VS Tools -> VS 2005 Command Prompt
- change dir to OpenH264 source root directory
- run "lib /def:openh264.def", this will create openh264.lib, copy this file to the OpenH264 installation directory
- rename or copy libopenh264.dll to openh264.dll and put it in the system path
- Add OpenH264 include and library installation paths to Visual Studio search path settings.
- Add this to your config_site.h:
#define PJMEDIA_HAS_OPENH264_CODEC 1
For iOS:
- Modify the Makefile to install it to a custom folder (find the string PREFIX and modify the value), for example: PREFIX=ios_local. Build the OpenH264 library (example: make OS="ios" ARCH=armv7). Install it to the specified directory (example: make OS="ios" ARCH=armv7 install).
- Run PJSIP's configure with --with-openh264 option. E.g.:
./configure --with-openh264=/Users/teluu/openh264-iphone/ios_local
- Copy libopenh264.a to your XCode project directory. Create a folder ios_local/lib inside your XCode project directory (example: for our ipjsua sample app, the directory will be: (PJPROJECT_DIR)/pjsip-apps/src/pjsua/ios/ios_local/lib). Then copy OpenH264 dynamic library files to the folder.
Example:
cp openh264-iphone/ios_local/lib/libopenh264.a pjproject-iphone/pjsip-apps/src/pjsua/ios/ cp openh264-iphone/ios_local/lib/*.dylib pjproject-iphone/pjsip-apps/src/pjsua/ios/ios_local/lib
- Add libopenh264.a and iOS-SDK's libstdc++.dylib to your application project in XCode.
For Android:
- Build the OpenH264 library according to the instructions provided in README.md at the OpenH264 directory. Example for arm64: make OS=android NDKROOT=/home/android-ndk-r13b TARGET=android-15 ARCH=arm64 NDKLEVEL=21 (note that due to the different compiler used (gcc/clang) and system folder structure, using newer NDK may require some changes in the OpenH264 source base). There may be a failure when building the Open264 sample app, but it can be safely ignored since the library itself must have been successfully built by that point.
- Modify the Makefile to install it to a different location (modify the "prefix") and run "make install". Manually copy libopenh264.so to "prefix"/lib, if necessary.
- Copy libopenh264.so to your Android application library directory (such as jniLibs/armeabi, or jniLibs/arm64-v8a).
Change History (7)
comment:1 Changed 8 years ago by ming
- Description modified (diff)
comment:2 Changed 8 years ago by ming
- Milestone set to release-2.6
comment:3 Changed 8 years ago by ming
comment:4 Changed 8 years ago by ming
- Resolution set to fixed
- Status changed from new to closed
comment:5 Changed 8 years ago by ming
- Description modified (diff)
comment:6 Changed 6 years ago by ming
- Description modified (diff)
comment:7 Changed 6 years ago by ming
- Description modified (diff)
Note: See
TracTickets for help on using
tickets.
In r5405:
Fixed #1947: Support for OpenH264 v1.6.0 codec
Thanks to Marc Etcheverry for the patch.