Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
dd30632a
authored
Sep 25, 2014
by
ojw28
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
SmoothStreaming Live support.
Issue: #12
parent
4adf8f77
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
59 additions
and
19 deletions
demo/src/main/java/com/google/android/exoplayer/demo/DemoUtil.java
demo/src/main/java/com/google/android/exoplayer/demo/Samples.java
demo/src/main/java/com/google/android/exoplayer/demo/full/FullPlayerActivity.java
demo/src/main/java/com/google/android/exoplayer/demo/full/player/SmoothStreamingRendererBuilder.java
demo/src/main/java/com/google/android/exoplayer/demo/simple/SmoothStreamingRendererBuilder.java
library/src/main/java/com/google/android/exoplayer/BehindLiveWindowException.java
library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingChunkSource.java
demo/src/main/java/com/google/android/exoplayer/demo/DemoUtil.java
View file @
dd30632a
...
...
@@ -45,7 +45,7 @@ public class DemoUtil {
public
static
final
String
CONTENT_ID_EXTRA
=
"content_id"
;
public
static
final
int
TYPE_DASH_VOD
=
0
;
public
static
final
int
TYPE_SS
_VOD
=
1
;
public
static
final
int
TYPE_SS
=
1
;
public
static
final
int
TYPE_OTHER
=
2
;
public
static
final
boolean
EXPOSE_EXPERIMENTAL_FEATURES
=
false
;
...
...
demo/src/main/java/com/google/android/exoplayer/demo/Samples.java
View file @
dd30632a
...
...
@@ -56,7 +56,7 @@ package com.google.android.exoplayer.demo;
false
),
new
Sample
(
"Super speed (SmoothStreaming)"
,
"uid:ss:superspeed"
,
"http://playready.directtaps.net/smoothstreaming/SSWSS720H264/SuperSpeedway_720.ism"
,
DemoUtil
.
TYPE_SS
_VOD
,
false
,
false
),
DemoUtil
.
TYPE_SS
,
false
,
false
),
new
Sample
(
"Dizzy (Misc)"
,
"uid:misc:dizzy"
,
"http://html5demos.com/assets/dizzy.mp4"
,
DemoUtil
.
TYPE_OTHER
,
false
,
false
),
};
...
...
@@ -92,10 +92,10 @@ package com.google.android.exoplayer.demo;
public
static
final
Sample
[]
SMOOTHSTREAMING
=
new
Sample
[]
{
new
Sample
(
"Super speed"
,
"uid:ss:superspeed"
,
"http://playready.directtaps.net/smoothstreaming/SSWSS720H264/SuperSpeedway_720.ism"
,
DemoUtil
.
TYPE_SS
_VOD
,
false
,
true
),
DemoUtil
.
TYPE_SS
,
false
,
true
),
new
Sample
(
"Super speed (PlayReady)"
,
"uid:ss:pr:superspeed"
,
"http://playready.directtaps.net/smoothstreaming/SSWSS720H264PR/SuperSpeedway_720.ism"
,
DemoUtil
.
TYPE_SS
_VOD
,
true
,
true
),
DemoUtil
.
TYPE_SS
,
true
,
true
),
};
public
static
final
Sample
[]
WIDEVINE_GTS
=
new
Sample
[]
{
...
...
demo/src/main/java/com/google/android/exoplayer/demo/full/FullPlayerActivity.java
View file @
dd30632a
...
...
@@ -167,7 +167,7 @@ public class FullPlayerActivity extends Activity implements SurfaceHolder.Callba
private
RendererBuilder
getRendererBuilder
()
{
String
userAgent
=
DemoUtil
.
getUserAgent
(
this
);
switch
(
contentType
)
{
case
DemoUtil
.
TYPE_SS
_VOD
:
case
DemoUtil
.
TYPE_SS
:
return
new
SmoothStreamingRendererBuilder
(
userAgent
,
contentUri
.
toString
(),
contentId
,
new
SmoothStreamingTestMediaDrmCallback
(),
debugTextView
);
case
DemoUtil
.
TYPE_DASH_VOD
:
...
...
demo/src/main/java/com/google/android/exoplayer/demo/full/player/SmoothStreamingRendererBuilder.java
View file @
dd30632a
...
...
@@ -65,6 +65,7 @@ public class SmoothStreamingRendererBuilder implements RendererBuilder,
private
static
final
int
VIDEO_BUFFER_SEGMENTS
=
200
;
private
static
final
int
AUDIO_BUFFER_SEGMENTS
=
60
;
private
static
final
int
TTML_BUFFER_SEGMENTS
=
2
;
private
static
final
int
LIVE_EDGE_LATENCY_MS
=
30000
;
private
final
String
userAgent
;
private
final
String
url
;
...
...
@@ -74,6 +75,7 @@ public class SmoothStreamingRendererBuilder implements RendererBuilder,
private
DemoPlayer
player
;
private
RendererBuilderCallback
callback
;
private
ManifestFetcher
<
SmoothStreamingManifest
>
manifestFetcher
;
public
SmoothStreamingRendererBuilder
(
String
userAgent
,
String
url
,
String
contentId
,
MediaDrmCallback
drmCallback
,
TextView
debugTextView
)
{
...
...
@@ -89,8 +91,8 @@ public class SmoothStreamingRendererBuilder implements RendererBuilder,
this
.
player
=
player
;
this
.
callback
=
callback
;
SmoothStreamingManifestParser
parser
=
new
SmoothStreamingManifestParser
();
ManifestFetcher
<
SmoothStreamingManifest
>
manifestFetcher
=
new
ManifestFetcher
<
SmoothStreamingManifest
>(
parser
,
contentId
,
url
+
"/Manifest"
);
manifestFetcher
=
new
ManifestFetcher
<
SmoothStreamingManifest
>(
parser
,
contentId
,
url
+
"/Manifest"
);
manifestFetcher
.
singleLoad
(
player
.
getMainHandler
().
getLooper
(),
this
);
}
...
...
@@ -154,9 +156,9 @@ public class SmoothStreamingRendererBuilder implements RendererBuilder,
// Build the video renderer.
DataSource
videoDataSource
=
new
HttpDataSource
(
userAgent
,
null
,
bandwidthMeter
);
ChunkSource
videoChunkSource
=
new
SmoothStreamingChunkSource
(
manifest
,
ChunkSource
videoChunkSource
=
new
SmoothStreamingChunkSource
(
manifest
Fetcher
,
videoStreamElementIndex
,
videoTrackIndices
,
videoDataSource
,
new
AdaptiveEvaluator
(
bandwidthMeter
));
new
AdaptiveEvaluator
(
bandwidthMeter
)
,
LIVE_EDGE_LATENCY_MS
);
ChunkSampleSource
videoSampleSource
=
new
ChunkSampleSource
(
videoChunkSource
,
loadControl
,
VIDEO_BUFFER_SEGMENTS
*
BUFFER_SEGMENT_SIZE
,
true
,
mainHandler
,
player
,
DemoPlayer
.
TYPE_VIDEO
);
...
...
@@ -181,8 +183,9 @@ public class SmoothStreamingRendererBuilder implements RendererBuilder,
for
(
int
i
=
0
;
i
<
manifest
.
streamElements
.
length
;
i
++)
{
if
(
manifest
.
streamElements
[
i
].
type
==
StreamElement
.
TYPE_AUDIO
)
{
audioTrackNames
[
audioStreamElementCount
]
=
manifest
.
streamElements
[
i
].
name
;
audioChunkSources
[
audioStreamElementCount
]
=
new
SmoothStreamingChunkSource
(
manifest
,
i
,
new
int
[]
{
0
},
audioDataSource
,
audioFormatEvaluator
);
audioChunkSources
[
audioStreamElementCount
]
=
new
SmoothStreamingChunkSource
(
manifestFetcher
,
i
,
new
int
[]
{
0
},
audioDataSource
,
audioFormatEvaluator
,
LIVE_EDGE_LATENCY_MS
);
audioStreamElementCount
++;
}
}
...
...
@@ -211,8 +214,8 @@ public class SmoothStreamingRendererBuilder implements RendererBuilder,
for
(
int
i
=
0
;
i
<
manifest
.
streamElements
.
length
;
i
++)
{
if
(
manifest
.
streamElements
[
i
].
type
==
StreamElement
.
TYPE_TEXT
)
{
textTrackNames
[
textStreamElementCount
]
=
manifest
.
streamElements
[
i
].
language
;
textChunkSources
[
textStreamElementCount
]
=
new
SmoothStreamingChunkSource
(
manifest
,
i
,
new
int
[]
{
0
},
ttmlDataSource
,
ttmlFormatEvaluator
);
textChunkSources
[
textStreamElementCount
]
=
new
SmoothStreamingChunkSource
(
manifest
Fetcher
,
i
,
new
int
[]
{
0
},
ttmlDataSource
,
ttmlFormatEvaluator
,
LIVE_EDGE_LATENCY_MS
);
textStreamElementCount
++;
}
}
...
...
demo/src/main/java/com/google/android/exoplayer/demo/simple/SmoothStreamingRendererBuilder.java
View file @
dd30632a
...
...
@@ -54,6 +54,7 @@ import java.util.ArrayList;
private
static
final
int
BUFFER_SEGMENT_SIZE
=
64
*
1024
;
private
static
final
int
VIDEO_BUFFER_SEGMENTS
=
200
;
private
static
final
int
AUDIO_BUFFER_SEGMENTS
=
60
;
private
static
final
int
LIVE_EDGE_LATENCY_MS
=
30000
;
private
final
SimplePlayerActivity
playerActivity
;
private
final
String
userAgent
;
...
...
@@ -61,6 +62,7 @@ import java.util.ArrayList;
private
final
String
contentId
;
private
RendererBuilderCallback
callback
;
private
ManifestFetcher
<
SmoothStreamingManifest
>
manifestFetcher
;
public
SmoothStreamingRendererBuilder
(
SimplePlayerActivity
playerActivity
,
String
userAgent
,
String
url
,
String
contentId
)
{
...
...
@@ -74,8 +76,8 @@ import java.util.ArrayList;
public
void
buildRenderers
(
RendererBuilderCallback
callback
)
{
this
.
callback
=
callback
;
SmoothStreamingManifestParser
parser
=
new
SmoothStreamingManifestParser
();
ManifestFetcher
<
SmoothStreamingManifest
>
manifestFetcher
=
new
ManifestFetcher
<
SmoothStreamingManifest
>(
parser
,
contentId
,
url
+
"/Manifest"
);
manifestFetcher
=
new
ManifestFetcher
<
SmoothStreamingManifest
>(
parser
,
contentId
,
url
+
"/Manifest"
);
manifestFetcher
.
singleLoad
(
playerActivity
.
getMainLooper
(),
this
);
}
...
...
@@ -120,8 +122,9 @@ import java.util.ArrayList;
// Build the video renderer.
DataSource
videoDataSource
=
new
HttpDataSource
(
userAgent
,
null
,
bandwidthMeter
);
ChunkSource
videoChunkSource
=
new
SmoothStreamingChunkSource
(
manifest
,
videoStreamElementIndex
,
videoTrackIndices
,
videoDataSource
,
new
AdaptiveEvaluator
(
bandwidthMeter
));
ChunkSource
videoChunkSource
=
new
SmoothStreamingChunkSource
(
manifestFetcher
,
videoStreamElementIndex
,
videoTrackIndices
,
videoDataSource
,
new
AdaptiveEvaluator
(
bandwidthMeter
),
LIVE_EDGE_LATENCY_MS
);
ChunkSampleSource
videoSampleSource
=
new
ChunkSampleSource
(
videoChunkSource
,
loadControl
,
VIDEO_BUFFER_SEGMENTS
*
BUFFER_SEGMENT_SIZE
,
true
);
MediaCodecVideoTrackRenderer
videoRenderer
=
new
MediaCodecVideoTrackRenderer
(
videoSampleSource
,
...
...
@@ -129,8 +132,9 @@ import java.util.ArrayList;
// Build the audio renderer.
DataSource
audioDataSource
=
new
HttpDataSource
(
userAgent
,
null
,
bandwidthMeter
);
ChunkSource
audioChunkSource
=
new
SmoothStreamingChunkSource
(
manifest
,
audioStreamElementIndex
,
new
int
[]
{
0
},
audioDataSource
,
new
FormatEvaluator
.
FixedEvaluator
());
ChunkSource
audioChunkSource
=
new
SmoothStreamingChunkSource
(
manifestFetcher
,
audioStreamElementIndex
,
new
int
[]
{
0
},
audioDataSource
,
new
FormatEvaluator
.
FixedEvaluator
(),
LIVE_EDGE_LATENCY_MS
);
SampleSource
audioSampleSource
=
new
ChunkSampleSource
(
audioChunkSource
,
loadControl
,
AUDIO_BUFFER_SEGMENTS
*
BUFFER_SEGMENT_SIZE
,
true
);
MediaCodecAudioTrackRenderer
audioRenderer
=
new
MediaCodecAudioTrackRenderer
(
...
...
library/src/main/java/com/google/android/exoplayer/BehindLiveWindowException.java
0 → 100644
View file @
dd30632a
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com
.
google
.
android
.
exoplayer
;
import
java.io.IOException
;
/**
* Thrown when a live playback falls behind the available media window.
*/
public
class
BehindLiveWindowException
extends
IOException
{
public
BehindLiveWindowException
()
{
super
();
}
public
BehindLiveWindowException
(
String
message
)
{
super
(
message
);
}
}
library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingChunkSource.java
View file @
dd30632a
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment