b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Android 播放端 SDK(2)

电脑杂谈  发布时间:2019-08-11 08:01:47  来源:网络整理

可以借助 getRtmpAudioTimestamp 与 getRtmpVideoTimestamp 方法获取时间戳


/**
 * Get video timestamp in RTMP message
 * @return timestamp
 */
public long getRtmpVideoTimestamp();
/**
 * Get audio timestamp in RTMP message
 * @return timestamp
 */
public long getRtmpAudioTimestamp();

可以借助 captureImage 方法进行视频截图,截图数据将要在 PLOnImageCapturedListener 中回调

/**
 * Capture video image
 * @param delayTimeMs 截取调用此方法后相应毫秒后的视频画面,仅对点播流生效
 */
public void captureImage(long delayTimeMs);

可以借助 setVideoArea 方法,播放视频的一部分区域。若一切参数均为 ,则不裁剪画面。

/**
 * Set video area
 * @param topLeftX top left x
 * @param topLeftY top left y
 * @param bottomRightX bottom right x
 * @param bottomRightY bottom right y
 */
 public void setVideoArea(int topLeftX, int topLeftY, int bottomRightX, int bottomRightY);

可以像功能的 SurfaceView 一样设置 PLVideoView 的 ZOrder 属性,原理如下:

public void setZOrderOnTop(boolean onTop);
public void setZOrderMediaOverlay(boolean overlay);

在播放点播流时,可以按照详细需求动态暂停/恢复播放器的预缓冲,原理如下:

/**
 * Set buffering enabled
 * @param enabled enable or not
 */
public void setBufferingEnabled(boolean enabled);

在播放 http 点播流时,可以获取播放器已经缓冲的 byte 数,原理如下:

/**
 * Get buffered length
 * @return length
 */
public BigInteger getHttpBufferSize();

PLDroidPlayer SDK 提供的 PLMediaPlayer 实现了一个媒体播放器的这些基础系统和插口,与 Android 官方的 MediaPlayer 的设计基本维持一致。

PLMediaPlayer 不是一个 View 控件,所以,所以能够用它播放视频而不是纯音频的话,则需要在布局文件中自己定义一个 SurfaceView 或者 TextureView 控件,然后将 Surface 或者 SurfaceHolder 传递给 PLMediaPlayer,实例布局如下:

<SurfaceView
    android:id="@+id/SurfaceView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center" />

七牛云存储 提供什么接口_七牛云开发者中心_七牛云存储 备案

PLMediaPlayer mMediaPlayer = new PLMediaPlayer(mContext);
PLMediaPlayer mMediaPlayer = new PLMediaPlayer(mContext, mAVOptions);
mMediaPlayer.setDataSource(mVideoPath);

PLMediaPlayer 提供了多样的播映状态消息回调,您可以借助 setXXXListener 接口实现这些传闻状态的获取,实例如下:

public class PLMediaPlayerActivity extends Activity implements
        PLOnPreparedListener,
        PLOnInfoListener,
        PLOnCompletionListener,
        PLOnVideoSizeChangedListener,
        PLOnErrorListener {
...
    mMediaPlayer.setOnPreparedListener(this);
    mMediaPlayer.setOnInfoListener(this);
    mMediaPlayer.setOnCompletionListener(this);
    mMediaPlayer.setOnVideoSizeChangedListener(this);
    mMediaPlayer.setOnErrorListener(this);
...

关于各个传闻状态的具体含义,将在 章节详细说明。

当 SurfaceView 成功创建后,需要将 SurfaceHolder 传入PLMediaPlayer,实例如下:

mMediaPlayer.setDisplay(mSurfaceHolder);

注意,所以是纯音频播放的话,则没有这一步。

当所有都打算就绪之后,就可以读取 prepareAsync() 开始打算播放了,该过程是异步的,所以需要首先注册一个 PLOnPreparedListener 获取准备结束的下跌(因为后面已经注册过,则不用重复注册)。

mMediaPlayer.setOnPreparedListener(new PLOnPreparedListener() {
    @Override
    public void onPrepared(PLMediaPlayer plMediaPlayer) {
        mMediaPlayer.start();
    }
});
mMediaPlayer.prepareAsync();

PLMediaPlayer 提供的播映控制接口如下:

mMediaPlayer.start();
mMediaPlayer.pause();
mMediaPlayer.stop();
mMediaPlayer.reset();

当播放完成,功能退出时,不要忘记调用 release 函数释放资源:

mMediaPlayer.release();

可以借助 getRtmpAudioTimestamp 与 getRtmpVideoTimestamp 方法获取时间戳


/**
 * Get video timestamp in RTMP message
 * @return timestamp
 */
public long getRtmpVideoTimestamp();
/**
 * Get audio timestamp in RTMP message
 * @return timestamp
 */
public long getRtmpAudioTimestamp();

可以借助 captureImage 方法进行视频截图,截图数据将要在 PLOnImageCapturedListener 中回调

/**
 * Capture video image
 * @param delayTimeMs 截取调用此方法后相应毫秒后的视频画面
 */
public void captureImage(long delayTimeMs);

可以借助 setVideoArea 方法,播放视频的一部分区域。若一切参数均为 ,则不裁剪画面。

/**
 * Set video area
 * @param topLeftX top left x
 * @param topLeftY top left y
 * @param bottomRightX bottom right x
 * @param bottomRightY bottom right y
 */
 public void setVideoArea(int topLeftX, int topLeftY, int bottomRightX, int bottomRightY);

在播放点播流时,可以按照详细需求动态暂停/恢复播放器的预缓冲,原理如下:

/**
 * Set buffering enabled
 * @param enabled enable or not
 */
public void setBufferingEnabled(boolean enabled);

在播放 http 点播流时,可以获取播放器已经缓冲的 byte 数,原理如下:

/**
 * Get buffered length
 * @return length
 */
public BigInteger getHttpBufferSize();

在播放 http 点播流前,提前缓存头资料还有大概一个 gop 的内容,原理如下:

/**
* Add cache before play
* @param url
*/
public void addCache(String url) 

去除预缓存的内容,取值为 null 表示清理所有预缓存内容,原理如下:

/**
* Clear cache
* @param url
*/
public void delCache(String url)

获取请求 http 点播流的号召信息,可以在播放开始后读取,原理如下:

/**
*  Get connect response info
* @return String info
*/
public String getResponseInfo()

七牛云存储 提供什么接口_七牛云存储 备案_七牛云开发者中心

设置预加载的形状,单位为 byte,默认 10 * 1024,原理如下:

/**
* Set IOCache size
* @param size
*/
public void setIOCacheSize(long size)

在播放 http 点播流前,提前加载部分文档的内容,原理如下:

 /**
 * Add IOCache before play
 * @param url
 */
 public void addIOCache(String url)

去除预加载的内容七牛云开发者中心,取值为 null 表示清理所有预加载内容,原理如下:

/**
* Clear IOCache
* @param url
*/
public void delIOCache(String url)

PLDroidPlayer SDK 提供的 AVOptions 类,可以用于配置播放参数,例如:

AVOptions options = new AVOptions();
public final static int MEDIA_CODEC_SW_DECODE = 0;
public final static int MEDIA_CODEC_HW_DECODE = 1;
public final static int MEDIA_CODEC_AUTO = 2;
// DNS 服务器设置
// 若不设置此项,则默认使用 DNSPod 的 httpdns 服务
// 若设置为 127.0.0.1,则会使用系统的 DNS 服务器
// 若设置为其他 DNS 服务器地址,则会使用设置的服务器
options.setString(AVOptions.KEY_DNS_SERVER, server);
// DNS 缓存设置
// 若不设置此项,则每次播放未缓存的域名时都会进行 DNS 解析,并将结果缓存
// 参数为 String[],包含了要缓存 DNS 结果的域名列表
// SDK 在初始化时会解析列表中的域名,并将结果缓存
options.setStringArray(AVOptions.KEY_DOMAIN_LIST, domainList);
// 解码方式:
// codec=AVOptions.MEDIA_CODEC_HW_DECODE,硬解
// codec=AVOptions.MEDIA_CODEC_SW_DECODE, 软解
// codec=AVOptions.MEDIA_CODEC_AUTO, 硬解优先,失败后自动切换到软解
// 默认值是:MEDIA_CODEC_SW_DECODE
options.setInteger(AVOptions.KEY_MEDIACODEC, codec);
// 若设置为 1,则底层会进行一些针对直播流的优化
options.setInteger(AVOptions.KEY_LIVE_STREAMING, 1);
// 快开模式,启用后会加快该播放器实例再次打开相同协议的视频流的速度
options.setInteger(AVOptions.KEY_FAST_OPEN, 1);
// 打开重试次数,设置后若打开流地址失败,则会进行重试
options.setInteger(AVOptions.KEY_OPEN_RETRY_TIMES, 5);
// 预设置 SDK 的 log 等级, 0-4 分别为 v/d/i/w/e
options.setInteger(AVOptions.KEY_LOG_LEVEL, 2);
// 打开视频时单次 http 请求的超时时间,一次打开过程最多尝试五次
// 单位为 ms
options.setInteger(AVOptions.KEY_PREPARE_TIMEOUT, 10 * 1000);
// 默认的缓存大小,单位是 ms
// 默认值是:500
options.setInteger(AVOptions.KEY_CACHE_BUFFER_DURATION, 500);
// 最大的缓存大小,单位是 ms
// 默认值是:2000,若设置值小于 KEY_CACHE_BUFFER_DURATION 则不会生效
options.setInteger(AVOptions.KEY_MAX_CACHE_BUFFER_DURATION, 4000);
// 是否开启直播优化,1 为开启,0 为关闭。若开启,视频暂停后再次开始播放时会触发追帧机制
// 默认为 0
options.setInteger(AVOptions.KEY_LIVE_STREAMING);
// 设置拖动模式,1 位精准模式,即会拖动到时间戳的那一秒;0 为普通模式,会拖动到时间戳最近的关键帧。默认为 0
options.setInteger(AVOptions.KEY_SEEK_MODE);
// 设置 HLS DRM 密钥
byte[] key = {0x##, 0x##, 0x##, 0x##, 0x##, ……};
options.setByteArray(AVOptions.KEY_DRM_KEY, key);
// 设置 MP4 DRM 密钥
String key = "AbcDefgh";
options.setString(AVOptions.KEY_COMP_DRM_KEY, key);
// 设置偏好的视频格式,设置后会加快对应格式视频流的打开速度,但播放其他格式会出错
// m3u8 = 1, mp4 = 2, flv = 3
options.setInteger(AVOptions.KEY_PREFER_FORMAT, 1);
// 开启解码后的视频数据回调
// 默认值为 0,设置为 1 则开启
options.setInteger(AVOptions.KEY_VIDEO_DATA_CALLBACK, 1);
// 开启解码后的音频数据回调
// 默认值为 0,设置为 1 则开启
options.setInteger(AVOptions.KEY_VIDEO_DATA_CALLBACK, 1);
// 设置开始播放位置
// 默认不开启,单位为 ms
options.setInteger(AVOptions.KEY_START_POSITION, 10 * 1000);
// 请在开始播放之前配置
mVideoView.setAVOptions(options);

PLDroidPlayer SDK 提供的所有状况接口,状况、错误的常量,均定义在 PLMediaPlayer 类中。

/**
 * Called when the media file is ready for playback.
 *
 * @param preparedTime prepared time: ms
 */
public interface PLOnPreparedListener {
    void onPrepared(int preparedTime);
}

该对象用来播放器的 prepare 过程,该过程主要包含:创建资源、构建连接、请求码流等等,当 prepare 完成后,SDK 会回调该对象的 onPrepared 接口,下一步则可以读取播放器的 start() 启动播放。

public interface PLOnInfoListener {
    void onInfo(int what, int extra);
}

what 定义了传闻类型,extra 是附加参数

whatvalue描述

MEDIA_INFO_UNKNOWN

未知消息

MEDIA_INFO_VIDEO_RENDERING_START

第一帧视频已成功渲染

MEDIA_INFO_CONNECTED

连接成功

MEDIA_INFO_METADATA

调用到 metadata 信息

MEDIA_INFO_BUFFERING_START

直到缓冲

MEDIA_INFO_BUFFERING_END

停止缓冲

MEDIA_INFO_SWITCHING_SW_DECODE

硬解失败,自动切换软解

MEDIA_INFO_CACHE_DOWN

预加载完成

七牛云存储 备案_七牛云开发者中心_七牛云存储 提供什么接口

MEDIA_INFO_LOOP_DONE

loop 中的一次播映完成

MEDIA_INFO_VIDEO_ROTATION_CHANGED

10001

获取到视频的播映角度

MEDIA_INFO_AUDIO_RENDERING_START

10002

第一帧音频已成功播放

MEDIA_INFO_VIDEO_GOP_TIME

10003

获取视频的I帧间隔

MEDIA_INFO_VIDEO_BITRATE

20001

视频的帧数统计结果

MEDIA_INFO_VIDEO_FPS

20002

视频的画质统计结果

MEDIA_INFO_AUDIO_BITRATE

20003

音频的画质统计结果

MEDIA_INFO_AUDIO_FPS

20004

音频的画质统计结果

MEDIA_INFO_VIDEO_FRAME_RENDERING

10004

视频帧的时间戳

MEDIA_INFO_AUDIO_FRAME_RENDERING

10005

音频帧的时间戳

MEDIA_INFO_CACHED_COMPLETE

离线缓存的部份播放完成

MEDIA_INFO_IS_SEEKING


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-118828-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...