安卓直播推流yasea的使用

紧接着之前写的安卓直播实现方法,项目后期发现有些定制的安卓设备外挂摄像头,原来的android_rtmppush_sdk出现调取摄像头(热插拔)前后异常和画面翻转来回跳动的问题。之后调研发现有个封装比较完善的纯java编译的开源安卓推流客户端——yasea,效率高、延迟低、消息提示、自适应强。
我就简单介绍一下基本使用方法,我下载的是最新版本v2.5,源码包里面需要使用的是library这个module。
安卓直播推流yasea的使用_第1张图片
在android studio ide中import进来,导入可能会出现一些value值不存在或主题参数报错,调高项目Compile Sdk Version(安卓编译sdk版本)。搞定后参照源码包中\app\src\main\java\net\ossrs\yasea\demo\MainActivity.java这里的使用方法。
先在你需要推流的activity进行实现几个接口类

public class ExecuteActivity extends Activity implements RtmpHandler.RtmpListener,
        SrsRecordHandler.SrsRecordListener, SrsEncodeHandler.SrsEncodeListener {
        ......
        }

然后生成需要重写的一些函数。
需要注意的是清单文件声明权限(不赘述)和在布局文件中摄像头展示界面控件需要声明成net.ossrs.yasea.SrsCameraView

.ossrs.yasea.SrsCameraView
    android:id="@+id/surfaceViewEx"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

项目需要界面嵌入摄像头,旁边展示其他业务。activity中只在onCreate()中设置推流的一些核心功能。

//声明推流摄像头展示界面对象
SrsPublisher mPublisher = new SrsPublisher((SrsCameraView) 
                       findViewById(R.id.surfaceViewEx));
//设置编码消息处理
mPublisher.setEncodeHandler(new SrsEncodeHandler(this));
//设置RTMP消息处理
mPublisher.setRtmpHandler(new RtmpHandler(this));
//设置记录消息处理
mPublisher.setRecordHandler(new SrsRecordHandler(this));
//设置展示界面大小
mPublisher.setPreviewResolution(640, 480);
//设置横屏推流 1为竖屏 2为横屏
mPublisher.setScreenOrientation(2);
//设置输出界面大小
mPublisher.setOutputResolution(640, 480);
//设置视频高清模式
mPublisher.setVideoHDMode();
//打开摄像头
mPublisher.startCamera();

//开始或暂停按钮
btnPublish.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!isPublished) {
                    //设为硬编码
                    mPublisher.switchToHardEncoder();
                    //开始推流                  
                    mPublisher.startPublish(rtmpUrl);
                    mPublisher.startCamera();

           btnPublish.setBackgroundResource(R.drawable.stoppush);
                    setTextShow("开始推流!");
                } else {
                    mPublisher.stopPublish();
                    mPublisher.stopRecord();

           btnPublish.setBackgroundResource(R.drawable.push);
                    setTextShow("暂停推流!");
                }
                isPublished = !isPublished;
            }
        });
//切换摄像头按钮        
btnSwitchCamera.setOnClickListener(new 
             View.OnClickListener() {
            @Override
            public void onClick(View v) {           mPublisher.switchCameraFace((mPublisher.getCamraId() + 1) % Camera.getNumberOfCameras());                             
            }
        });

源码中的示例能实现更多功能,有一些滤镜效果,自动切换横竖推流功能(测试会出现卡顿,甚至切换会停止推流,得需要先暂停再重新推流就能解决)。具体请参照示例MainActivity.java中的使用方法,源码还是很规范的,可读性较高。

你可能感兴趣的:(安卓)