android hls dvr seek playback

5 篇文章 0 订阅
1 篇文章 0 订阅

apple官方地址

HTTP Live Streaming

draft-pantos-http-live-streaming-16

http://tools.ietf.org/html/draft-pantos-http-live-streaming-16

一 android对hls的支持调研

android 3.0之后虽然加入了对hls的支持,但是一直没有增加对直播的seek功能

下面是android的官方描述


http://developer.android.com/guide/appendix/media-formats.html

http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Jeroen-Wijering-Talks-HLS,-DASH,-and-the-JW-Player-6-86523.aspx

Network Protocols

The following network protocols are supported for audio and video playback:

RTSP (RTP, SDP)

HTTP/HTTPS progressive streaming

HTTP/HTTPS live streaming draft protocol:

MPEG-2 TS media files only

Protocol version 3 (Android 4.0 and above)

Protocol version 2 (Android 3.x)

Not supported before Android 3.0

Note: HTTPS is not supported before Android 3.1.


二 播放器调研

android播放器从js播放器 ,media player播放器以及第三方播放器入手,经调研,js播放器基本是调用本地的播放器,然而android自带播放器又不支持直播的seek,所以从第三方播放器下手寻找突破口。

1 使用js播放器

调研过的js播放器有:jw player ;sewise player;HLSPlayer(http://www.52player.com/VideoPlayer/2014/121751.html)


2 使用本地播放器

NuPlayer AwesomePlayer

3 第三方播放器


--ffmpeg vlc中都自带了hls的解析模块,最新的ffmpeg中hls.c(http://ffmpeg.org/doxygen/trunk/hls_8c_source.html),vlc中的vlc/modules/stream_filter/httplive.c

但是vlc中播放直播和android自带的播放器一样都获取不到总时长,也就没法seek。

强大的mplayer安装后一播放url就闪退了

--Kaltura Player
https://github.com/Dongyafeiying/Android-HLS-lib
不支持直播

--nexstreaming 
http://www.nexstreaming.com
貌似要收费,没有深入调研

--brightcove hls player for android

http://docs.brightcove.com/en/video-cloud/mobile-sdks/hls-player/guides/hls-player-for-android-sdk.html

不支持直播seek


https://github.com/BrightcoveOS/android-player-samples/tree/master/brightcove-exoplayer

Playback
HLS

  • There is currently no support for HLS Live DVR playback with sliding windows.
  • There is currently no support for HLSe playback with token authorization.

--ExoPlayer

https://github.com/google/ExoPlayer/tree/master
Android version 4.1 and above (API level 16 and up)

只能从ExoPlayer上边下手了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中,可以通过使用 `android.media.MediaDrm` 类来获取 HLS 带宽信息。具体步骤如下: 1. 创建一个 `MediaDrm` 对象,使用 `MediaDrm.getInstance()` 方法。 2. 调用 `MediaDrm.openSession()` 方法创建一个会话。 3. 通过 `MediaDrm.getKeyRequest()` 方法获取用于加密的密钥请求。 4. 将密钥请求发送到服务器进行处理,获取到加密密钥。 5. 使用 `android.media.MediaDataSource` 接口创建一个 `MediaDataSource` 对象,该对象用于读取 HLS 流数据。 6. 使用 `android.media.MediaExtractor` 类解析 HLS 流,获取带宽信息。 以下是示例代码: ```java MediaDrm mediaDrm = MediaDrm.getInstance("com.android.media.cts"); byte[] sessionId = mediaDrm.openSession(); KeyRequest keyRequest = mediaDrm.getKeyRequest(sessionId, null, null, MediaDrm.KEY_TYPE_STREAMING, null); // 发送keyRequest到服务器,获取密钥 byte[] key = getEncryptionKeyFromServer(keyRequest.getData()); MediaDataSource dataSource = new MyMediaDataSource(url, key); MediaExtractor extractor = new MediaExtractor(); extractor.setDataSource(dataSource); for (int i = 0; i < extractor.getTrackCount(); i++) { MediaFormat format = extractor.getTrackFormat(i); if (format.getString(MediaFormat.KEY_MIME).equals("audio/vnd.dlna.adts")) { // 获取音频带宽信息 int bitrate = format.getInteger(MediaFormat.KEY_BIT_RATE); // ... } else if (format.getString(MediaFormat.KEY_MIME).equals("video/avc")) { // 获取视频带宽信息 int bitrate = format.getInteger(MediaFormat.KEY_BIT_RATE); // ... } } ``` 其中,`MyMediaDataSource` 类用于实现 `MediaDataSource` 接口,用于读取 HLS 流数据。在该类中,可以使用 `OkHttp` 或其他网络库实现数据的读取。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值