PLDroidMediaStreaming 是七牛推出的一款适用于 Android 平台的推流 SDK,支持 RTMP 推流,h.264 和 AAC 编码,硬编、软编支持。具有丰富的数据和状态回调,方便用户根据自己的业务定制化开发。具有直播场景下的重要功能,如:美颜、背景音乐、水印等功能。PLDroidMediaStreaming 是现在目前重点维护的版本,自带采集模块也支持用户自己做采集端。
APACHE-2.0 License
PLDroidCameraStreaming 是一个适用于 Android 的 RTMP 直播推流 SDK,可高度定制化和二次开发。特色是同时支持 H.264 软编/硬编和 AAC 软编/硬编。支持 Android Camera 画面捕获,并进行 H.264 编码,以及支持 Android 麦克风音频采样并进行 AAC 编码;还实现了一套可供开发者选择的编码参数集合,以便灵活调节相应的分辨率和码率;同时,SDK 提供数据源回调接口,用户可进行 Filter 处理。借助 PLDroidCameraStreaming ,开发者可以快速构建一款类似 Meerkat 或 Periscope 的 Android 直播应用。
详细的开发指南请参考官方文档
android.arch.lifecycle:extensions:x.y.z
的依赖StreamingEnv.init(Context context)
已被弃用,请更新到 StreamingEnv.init(Context contex, String userId)
进行环境的初始化,其中,userId 代表用户的唯一标识符,用于区分不同的用户例如目前设有如下配置的客户:
StreamingProfile.VideoProfile vProfile =
new StreamingProfile.VideoProfile(20, 1000 * 1024, 60, false);
需将参数调整为:
StreamingProfile.VideoProfile vProfile =
new StreamingProfile.VideoProfile(20, 1000 * 1024, 60, true);
dependencies {
...
compile 'com.qiniu.pili:pili-android-qos:0.8.+'
...
}
<activity
android:name="com.qiniu.pili.droid.streaming.screen.ScreenCaptureRequestActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
pili-android-qos 最新版本为 0.8.13
更新 StreamingPreviewCallback#onPreviewFrame
StreamingPreviewCallback#onPreviewFrame(byte[] data, int width, int height)
调整为
/**
* Called if the {@link StreamingPreviewCallback} registered.
*
* @param data the contents of the preview frame in fmt format
* @param width the width of the frame
* @param height the height of the frame
* @param rotation set the clockwise rotation of frame in degrees to achieve the same effect of preview display.
* @param fmt the format of the frame. See also {@link com.qiniu.pili.droid.streaming.av.common.PLFourCC}
* @param tsInNanoTime the timestamp of the frame
*
* */
boolean StreamingPreviewCallback#onPreviewFrame(byte[] data, int width, int height, int rotation, int fmt, long tsInNanoTime);
从 v2.0.1 开始:
CameraStreamingManager
,可使用 MediaStreamingManager
dependencies {
...
compile 'com.qiniu:happy-dns:0.2.+'
compile 'com.qiniu.pili:pili-android-qos:0.8.+'
...
}
废弃的 StreamingPreviewCallback#onPreviewFrame(byte[] bytes, Camera camera)
被删掉,可使用 StreamingPreviewCallback#onPreviewFrame(byte[] bytes, int width, int height)
AudioSourceCallback#onAudioSourceAvailable(ByteBuffer byteBuffer, int size, boolean eof)
接口回调中增加时间戳信息,更改为 AudioSourceCallback#onAudioSourceAvailable(ByteBuffer byteBuffer, int size, long tsInNanoTime, boolean eof)
从 v2.0.0 Beta 开始,SDK 由 PLDroidCameraStreaming 更名为 PLDroidMediaStreaming,将会提供更丰富的功能接口。有如下重大更新:
MediaStreamingManager
,废弃 CameraStreamingManager
且不再被维护StreamingStateChangedListener
,并废弃 CameraStreamingManager#StreamingStateListener
StreamingState
,并废弃 CameraStreamingManager#STATE
StreamingSessionListener
,并废弃 CameraStreamingManager#StreamingSessionListener
AVCodecType
,并废弃 CameraStreamingManager#EncodingType
com.qiniu.pili.droid.streaming.*;
,因此需要更新混淆相关代码从 v1.6.1 开始,为了便于用户更好地定制化,将 TransformMatrix 信息加入到 SurfaceTextureCallback#onDrawFrame
。因此更新到 v1.6.1 版本之后,若实现了 SurfaceTextureCallback
接口,需要将
int onDrawFrame(int texId, int texWidth, int texHeight);
更改为:
int onDrawFrame(int texId, int texWidth, int texHeight, float[] transformMatrix);
从 v1.6.0 开始,在使用 SDK 之前,需要保证 StreamingEnv
被正确初始化 ,否则在构造核心类 CameraStreamingManager
的阶段会抛出异常。具体可参看 Demo。
StreamingEnv.init(getApplicationContext());
从 v1.4.6 版本开始,需要在宿主项目中的 build.gradle 中加入如下语句:
dependencies {
...
compile 'com.qiniu:happy-dns:0.2.7'
...
}
否则,在运行时会发生找不到 happydns 相关类的错误。
从 v1.6.0 开始,在使用 SDK 之前,需要保证 StreamingEnv
被正确初始化 ,否则在构造核心类 CameraStreamingManager
的阶段会抛出异常。具体可参看 Demo。
StreamingEnv.init(getApplicationContext());
从 v1.6.1 开始,为了便于用户更好地定制化,将 TransformMatrix 信息加入到 SurfaceTextureCallback#onDrawFrame
。因此更新到 v1.6.1 版本之后,若实现了 SurfaceTextureCallback
接口,需要将
int onDrawFrame(int texId, int texWidth, int texHeight);
更改为:
int onDrawFrame(int texId, int texWidth, int texHeight, float[] transformMatrix);
当你遇到任何问题时,可以通过在 GitHub 的 repo 提交 issues 来反馈问题,请尽可能的描述清楚遇到的问题,如果有错误信息也一同附带,并且在 Labels 中指明类型为 bug 或者其他。