Librestreaming

Android real-time effect filter rtmp streaming library.using Mediacodec HWencoding&librtmp stream.
Alternatives To Librestreaming
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Ffmpeg39,576
7 hours ago3otherC
Mirror of https://git.ffmpeg.org/ffmpeg.git
Srs23,120
7 days ago97June 05, 2023187mitC++
SRS is a simple, high-efficiency, real-time video server supporting RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH, and GB28181.
Nginx Rtmp Module12,649
5 months ago1,107bsd-2-clauseC
NGINX-based Media Streaming Server
Owncast8,418
12 hours ago78November 18, 2023176mitTypeScript
Take control over your live stream video by running it yourself. Streaming + chat out of the box.
Mediamtx8,377
10 hours ago232November 12, 2023124otherGo
Ready-to-use SRT / WebRTC / RTSP / RTMP / LL-HLS media server and media proxy that allows to read, publish, proxy and record video and audio streams.
Yasea4,569
2 years ago265mitC
RTMP live streaming client for Android
Ant Media Server3,9492618 hours ago54October 31, 20231,115otherJava
Ant Media Server is a live streaming engine software that provides adaptive, ultra low latency streaming by using WebRTC technology with ~0.5 seconds latency. Ant Media Server is auto-scalable and it can run on-premise or on-cloud.
Restreamer2,792
7 months ago47apache-2.0HTML
The Restreamer is a complete streaming server solution for self-hosting. It has a visually appealing user interface and no ongoing license costs. Upload your live stream to YouTube, Twitch, Facebook, Vimeo, or other streaming solutions like Wowza. Receive video data from OBS and publish it with the RTMP and SRT server.
Haishinkit.swift2,602
33 days ago88November 09, 20234bsd-3-clauseSwift
Camera and Microphone streaming library via RTMP and SRT for iOS, macOS, tvOS and visionOS.
Joy42,4155192 years ago1May 07, 202087mitGo
Golang audio/video library and streaming server
Alternatives To Librestreaming
Select To Compare


Alternative Project Comparisons
Readme

Android real-time effect filter rtmp streaming library
安卓实时滤镜RTMP推流库

This project uses Android lastest MediaCodec API for video/audio encoding and popular C ibrary librtmp (source code included) for rtmp streaming, in addionion, provides ability to implement real-time effect filters after camera capturing phase and before encoding phase. Some features are:

  • Support Android 4.3 and higher (Android 6.0/7.0-preview tested)
  • Filters support soft mode (CPU processing) and hard mode (GPU/OpenGLES rendering)
  • Soft mode filter can be implemented by processing NV21 image array captured from camera
  • Hard mode filter can be implemented by rendering image texture captured from camera
  • Compatible with GPUImage,use GPUImageFilter without change one line
  • Support pixel rotation and flip
  • Support encoding paramaters like resolution, bitrate,fps etc
  • Fast front/rear camera swaping without interrupt rtmp streaming
  • Support draw android View into video

Soft Filter Mode

  • Color format is NV21
  • Create your own filter by extending BaseSoftVideoFilter
  • Filter effect can be manipulated via java, ndk or renderscript
  • Adjust your filter properties between acquireSoftVideoFilter and releaseSoftVideoFilter, call releaseSoftVideoFilter as soon as operation finished (after acquireSoftVideoFilter), interval better be less than 3ms

Hard Filter Mode

  • Create your own filter by extending either BaseHardVideoFilter or OriginalHardVideoFilter
  • OriginalHardVideoFilter is more simple to use, just need to proivde custmom shader to get various effects
  • BaseHardVideoFilter is more powerful and flexible and need write openGLES code by yourself. You can theoretically achieve any effects you want via BaseHardVideoFilter.
  • Adjust your filter properties between acquireHardVideoFilter and releaseHardVideoFilter, call releaseHardVideoFilter as soon as operation finished (after acquireHardVideoFilter), interval better be less than 3ms

Start/stop preview and stream:

    @Override
    public void onCreate(final Bundle savedInstanceState) {
        ... ...
        RESConfig resConfig = RESConfig.obtain();
        resConfig.setRtmpAddr("rtmp://***");
        resConfig.setFilterMode(RESConfig.FilterMode.HARD);
        resConfig.setTargetVideoSize(new Size(720, 480));
        resConfig.setBitRate(1000 * 1024);
        resConfig.setVideoFPS(30);
        resConfig.setVideoGOP(1);
        resConfig.setRenderingMode(RESConfig.RenderingMode.OpenGLES);//setrender mode in softmode
        resConfig.setDefaultCamera(Camera.CameraInfo.CAMERA_FACING_FRONT);
        if (!resClient.prepare(resConfig)) {
            Log.e("Main", "prepare,failed!!");
            finish();
        }
    }

    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
        resClient.startPreview(surface, width, height);
    }

    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
        resClient.updatePreview(width, height);
    }

    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
        resClient.stopPreview();
        return false;
    }

    @Override
    protected void onStart() {
        super.onResume();
        resClient.startStreaming();
    }

    @Override
    protected void onStop() {
        super.onPause();
        resClient.stopStreaming();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        resClient.destroy();
    }

Set recording direction:

        int frontDirection, backDirection;
        Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
        Camera.getCameraInfo(Camera.CameraInfo.CAMERA_FACING_FRONT, cameraInfo);
        frontDirection = cameraInfo.orientation;
        Camera.getCameraInfo(Camera.CameraInfo.CAMERA_FACING_BACK, cameraInfo);
        backDirection = cameraInfo.orientation;
        if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            resConfig.setFrontCameraDirectionMode((frontDirection == 90 ? RESConfig.DirectionMode.FLAG_DIRECTION_ROATATION_270 : RESConfig.DirectionMode.FLAG_DIRECTION_ROATATION_90) | RESConfig.DirectionMode.FLAG_DIRECTION_FLIP_HORIZONTAL);
            resConfig.setBackCameraDirectionMode((backDirection == 90 ? RESConfig.DirectionMode.FLAG_DIRECTION_ROATATION_90 : RESConfig.DirectionMode.FLAG_DIRECTION_ROATATION_270));
        } else {
            resConfig.setBackCameraDirectionMode((backDirection == 90 ? RESConfig.DirectionMode.FLAG_DIRECTION_ROATATION_0 : RESConfig.DirectionMode.FLAG_DIRECTION_ROATATION_180));
            resConfig.setFrontCameraDirectionMode((frontDirection == 90 ? RESConfig.DirectionMode.FLAG_DIRECTION_ROATATION_180 : RESConfig.DirectionMode.FLAG_DIRECTION_ROATATION_0) | RESConfig.DirectionMode.FLAG_DIRECTION_FLIP_HORIZONTAL);
        }

Add filter:

    BlackWhiteSoftFilter bwsFilter = new BlackWhiteSoftFilter();
    resClient.setSoftVideoFilter(bwsFilter);
    BaseSoftVideoFilter filter = resClient.acquireSoftVideoFilter();
    if (filter != null) {
        if (filter instanceof BlackWhiteFilterSoft) {
            BlackWhiteFilterSoft bwsFilter = (BlackWhiteFilterSoft) filter;
            blackWhiteFilter.setGap((byte) 128); // 0 ~ 255
        }
    ... ...
    resClient.releaseSoftVideoFilter();

For more information, please checkout sample code in me.lake.librestreaming.sample.softfilter and me.lake.librestreaming.sample.hardfilter.

简介:

  • 支持cpu滤镜和gpu滤镜。
  • 硬编码基于Mediacodec。
  • 推流基于librtmp。

特性:

  • 支持cpu滤镜,并可以通过处理图像数组来自定义滤镜。
  • 支持gpu滤镜,并可以通过opengles绘制图像纹理来自定义滤镜。
  • gpu滤镜模式下兼容GPUImage,一行代码不用修改就可以直接使用GPUImage的滤镜。
  • 前后摄像头快速切换,不会打断推流。
  • 可以自定义帧率,最大不会超过设备支持帧率
  • 可以选择图像大小,码流比特率,具体取决于设备支持。

关于滤镜:

支持两种滤镜模式:使用cpu的软模式和使用gpu(opengles)的硬模式,硬模式效率通常高于软模式。

软模式下:

  • 你可以通过继承BaseSoftVideoFilter创建自定义滤镜。
  • sample.softfilter中有一些使用Java,NDK和RenderScript来处理图像的滤镜示例。
  • 在acquireSoftVideoFilter和releaseSoftVideoFilter之间可以安全的修改滤镜的属性,不要持有滤镜超过3毫秒。
  • 滤镜中的颜色格式为NV21。

硬模式下:

  • 你可以通过继承BaseHardVideoFilter或者OriginalHardVideoFilter来创建自定义滤镜。
  • sample.hardfilter中有一些示例。
  • 继承OriginalHardVideoFilter只需要通过提供Shader就可以容易的实现大部分效果。
  • 继承BaseHardVideoFilter需要自己处理opengl细节,但是可以实现任何效果。
  • 在acquireHardVideoFilter和releaseHardVideoFilter之间可以安全的修改滤镜的属性。不要持有滤镜超过3毫秒。

关于磨皮算法:

  • 使用优化过的带阈值的高斯模糊算法(Selective Gaussian Blur),sigma = 0.1,稀疏的取周围24个点,正态分布取权重计算均值。

关于兼容GPUImageFilter:

  • 使GPUImageCompatibleFilter来兼容GPUImage的滤镜,注意不能直接使用GPUImageGroupFilter,需要把单独的滤镜用GPUImageCompatibleFilter包裹,再用HardVideoGroupFilter组合起来,具体可以参考sample中的gpuimage:SketchGroup滤镜。
Popular Streaming Projects
Popular Rtmp Projects
Popular Networking Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
C
Camera
Streaming
Rtmp
Opengl Es
Gpuimage