HardwareVideoCodec is an efficient video recording library for Android. Supports software and hardware encode. With it, you can record a video at any resolution, no need to care about camera resolution. Everything is so easy.
This project has been migrated to hwvc now. hwvc is a cross-platform project. Committed to quickly and easily implement a variety of complex multimedia needs, including recording and editing. This project uses c / c + + implementation, currently only supports Android platform, but it can also be easily ported to other platforms, such as IOS.
HWVC is an efficient video encoding library for Android. Supports software
and hardware
encode.
With it, you can encode a video at any resolution, no longer need to care about camera resolution. Everything is so easy.
If you are building with Gradle, simply add the following code to your project:
buildscript {
ext.kotlin_version = '1.2.30'//Latest kotlin version
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
dependencies {
implementation 'com.lmy.codec:hardwarevideocodec:1.7.3'
implementation 'com.lmy.codec:rtmp:1.7.3'//If you want to use RTMP stream.
}
class MainActivity : AppCompatActivity() {
private lateinit var mRecorder: VideoRecorderImpl
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val mTextureView = TextureView(this)
setContentView(mTextureView)
mRecorder = VideoRecorderImpl(this).apply {
reset()
setOutputUri("${Environment.getExternalStorageDirectory().absolutePath}/test.mp4")
setOutputSize(720, 1280)//Default 720x1280
setFps(30)
setFilter(getDefaultFilter())
setPreviewDisplay(mTextureView)
}
mRecorder.prepare()
//For recording control
mTextureView.setOnTouchListener { v, event ->
when (event.action) {
MotionEvent.ACTION_DOWN -> {
if (mRecorder.prepared())
mRecorder.start()
}
MotionEvent.ACTION_UP -> {
if (mRecorder.started())
mRecorder.pause()
}
}
true
}
}
private fun getDefaultFilter(): BaseFilter = GroupFilter.create(BeautyV4Filter())
.addSticker(TextSticker().apply {
setText(TextSticker.Text("HWVC", 56f).apply {
x = 0.8f
y = 0.03f
})
})
.addSticker(ImageSticker().apply {
setImage(ImageSticker.Image().apply {
x = 0.03f
y = 0.03f
scale = 1.6f
bitmap = BitmapFactory.decodeResource(resources, R.mipmap.ic_logo_hwvc)
})
})
override fun onDestroy() {
super.onDestroy()
mRecorder.release()
}
}
class MainActivity : AppCompatActivity() {
private lateinit var mRecorder: VideoRecorderImpl
private val onStateListener = object : VideoRecorder.OnStateListener {
override fun onStop() {
}
override fun onPrepared(encoder: Encoder) {
mRecorder.start()
}
override fun onRecord(encoder: Encoder, timeUs: Long) {
}
override fun onError(error: Int, msg: String) {
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val mTextureView = TextureView(this)
setContentView(mTextureView)
mRecorder = VideoRecorderImpl(this).apply {
reset()
setOutputUri("rtmp://192.168.16.125:1935/live/livestream")
setOutputSize(720, 1280)//Default 720x1280
setFps(30)
setFilter(getDefaultFilter())//Default NormalFilter
setPreviewDisplay(mTextureView)
setOnStateListener(onStateListener)
}
mRecorder.prepare()
}
private fun getDefaultFilter(): BaseFilter = GroupFilter.create(BeautyV4Filter())
.addSticker(TextSticker().apply {
setText(TextSticker.Text("HWVC", 56f).apply {
x = 0.8f
y = 0.03f
})
})
.addSticker(ImageSticker().apply {
setImage(ImageSticker.Image().apply {
x = 0.03f
y = 0.03f
scale = 1.6f
bitmap = BitmapFactory.decodeResource(resources, R.mipmap.ic_logo_hwvc)
})
})
override fun onDestroy() {
super.onDestroy()
mRecorder.release()
}
}
Please use our issues page to let us know of any problems.
HWVC(HardwareVideoCodec) is GPL-licensed.