├── .classpath
├── .gitignore
├── .project
├── .settings
└── org.eclipse.jdt.core.prefs
├── AndroidManifest.xml
├── README.md
├── build.gradle
├── ic_launcher-web.png
├── proguard-project.txt
├── project.properties
├── res
├── drawable-hdpi
│ ├── focusads_default.png
│ ├── ic_launcher.png
│ ├── image_progress.png
│ ├── series_bg.png
│ └── video_item_play_icon.png
├── drawable-mdpi
│ └── ic_launcher.png
├── drawable-xhdpi
│ └── ic_launcher.png
├── drawable-xxhdpi
│ ├── ic_launcher.png
│ ├── play_ctrl_share_bg.png
│ └── play_ctrl_share_press_bg.png
├── drawable
│ ├── item_track.xml
│ ├── loading_iamge_progress.xml
│ └── play_ctrl_share.xml
├── layout
│ ├── common_control_layer.xml
│ ├── control_layer.xml
│ ├── control_layer_horizon.xml
│ ├── list_vision.xml
│ ├── list_vision_item.xml
│ ├── live_video_detail_control_layer.xml
│ ├── live_video_detail_control_layer_horizon.xml
│ ├── m3u8_test.xml
│ ├── m3u8_ui_control_layer.xml
│ ├── m3u8_ui_control_layer_horizon.xml
│ ├── main.xml
│ ├── my_test_layer1.xml
│ ├── only_horizon.xml
│ ├── playerlist1_layout.xml
│ ├── send_comment_layout_full_screen.xml
│ ├── simple_control_layer.xml
│ ├── simple_test.xml
│ ├── simple_ui_ad_layer.xml
│ ├── simple_ui_ad_layer_horizon.xml
│ ├── simple_ui_control_layer.xml
│ ├── simple_ui_control_layer_horizon.xml
│ ├── sinavideo_test.xml
│ ├── test1.xml
│ ├── test_vid_vms.xml
│ ├── test_webview.xml
│ ├── video_grid_item.xml
│ ├── video_gridview.xml
│ ├── video_layout.xml
│ ├── video_list_sport.xml
│ ├── video_listview.xml
│ ├── vidvms_ui_control_layer.xml
│ └── vidvms_ui_control_layer_horizon.xml
├── raw
│ └── test_webview.html
├── values-v11
│ └── styles.xml
├── values-v14
│ └── styles.xml
└── values
│ ├── attrs.xml
│ ├── color.xml
│ ├── strings.xml
│ └── styles.xml
└── src
└── com
└── sina
└── playerdemo_v2
├── MainActivity.java
├── MyApplication.java
└── activity
├── OnlyHorizonActivity.java
├── SimpleTestActivity.java
├── SinaVideoActivity.java
├── Test2Activity.java
├── TestAutoSaveActivity.java
├── TestListActivity.java
├── TestM3u8Activity.java
├── TestMultiADActivity.java
├── TestSimpleADActivity.java
└── TestWebviewActivity.java
/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | *.i
3 |
4 | .hg/store/fncache
5 |
6 | .hg/store/phaseroots
7 |
8 | .hg/store/undo
9 |
10 | *.phaseroots
11 |
12 | *.bookmarks
13 |
14 | *.branch
15 |
16 | *.desc
17 |
18 | *.dirstate
19 |
20 | .hg/cache/branchheads
21 |
22 | .hg/cache/tags
23 |
24 | .hg/dirstate
25 |
26 | .hg/last-message.txt
27 |
28 | .hg/requires
29 |
30 | .hg/sourcetreeconfig
31 |
32 | bin/AndroidManifest.xml
33 |
34 | *.class
35 |
36 | *.apk
37 |
38 | *.dex
39 |
40 | *.jar
41 |
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | demo
4 |
5 |
6 |
7 |
8 |
9 | com.android.ide.eclipse.adt.ResourceManagerBuilder
10 |
11 |
12 |
13 |
14 | com.android.ide.eclipse.adt.PreCompilerBuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.jdt.core.javabuilder
20 |
21 |
22 |
23 |
24 | com.android.ide.eclipse.adt.ApkBuilder
25 |
26 |
27 |
28 |
29 |
30 | com.android.ide.eclipse.adt.AndroidNature
31 | org.eclipse.jdt.core.javanature
32 |
33 |
34 |
--------------------------------------------------------------------------------
/.settings/org.eclipse.jdt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
3 | org.eclipse.jdt.core.compiler.compliance=1.6
4 | org.eclipse.jdt.core.compiler.source=1.6
5 |
--------------------------------------------------------------------------------
/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
23 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
35 |
36 |
39 |
40 |
43 |
44 |
47 |
48 |
51 |
52 |
55 |
56 |
59 |
60 |
64 |
65 |
69 |
70 |
73 |
74 |
77 |
78 |
81 |
82 |
85 |
86 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # demo
2 | 播放器的例子代码
3 |
4 | 直接从当前的代码里面copy一份出去,就可以成为一个新的播放器代码。
5 |
6 | 【具体请参考https://github.com/SinaVDDeveloper/demo/wiki/】
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'android'
2 |
3 | dependencies {
4 | compile fileTree(dir: 'libs', include: '*.jar')
5 | compile project(':sinavideo_playersdk')
6 | }
7 |
8 | android {
9 | compileSdkVersion 20
10 | buildToolsVersion "22.0.1"
11 |
12 | sourceSets {
13 | main {
14 | manifest.srcFile 'AndroidManifest.xml'
15 | java.srcDirs = ['src']
16 | resources.srcDirs = ['src']
17 | aidl.srcDirs = ['src']
18 | renderscript.srcDirs = ['src']
19 | res.srcDirs = ['res']
20 | assets.srcDirs = ['assets']
21 | }
22 |
23 | // Move the tests to tests/java, tests/res, etc...
24 | instrumentTest.setRoot('tests')
25 |
26 | // Move the build types to build-types/
27 | // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
28 | // This moves them out of them default location under src//... which would
29 | // conflict with src/ being used by the main source set.
30 | // Adding new build types or product flavors should be accompanied
31 | // by a similar customization.
32 | debug.setRoot('build-types/debug')
33 | release.setRoot('build-types/release')
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SinaVDDeveloper/demo/ce1f1a479dc431f21161b88150fd67fb790da154/ic_launcher-web.png
--------------------------------------------------------------------------------
/proguard-project.txt:
--------------------------------------------------------------------------------
1 | # To enable ProGuard in your project, edit project.properties
2 | # to define the proguard.config property as described in that file.
3 | #
4 | # Add project specific ProGuard rules here.
5 | # By default, the flags in this file are appended to flags specified
6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt
7 | # You can edit the include path and order by changing the ProGuard
8 | # include property in project.properties.
9 | #
10 | # For more details, see
11 | # http://developer.android.com/guide/developing/tools/proguard.html
12 |
13 | # Add any project specific keep options here:
14 |
15 | # If your project uses WebView with JS, uncomment the following
16 | # and specify the fully qualified class name to the JavaScript interface
17 | # class:
18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
19 | # public *;
20 | #}
21 |
--------------------------------------------------------------------------------
/project.properties:
--------------------------------------------------------------------------------
1 | # This file is automatically generated by Android Tools.
2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3 | #
4 | # This file must be checked in Version Control Systems.
5 | #
6 | # To customize properties used by the Ant build system edit
7 | # "ant.properties", and override values to adapt the script to your
8 | # project structure.
9 | #
10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
12 |
13 | # Project target.
14 | target=android-20
15 | android.library.reference.1=../sinavideo_playersdk
16 |
--------------------------------------------------------------------------------
/res/drawable-hdpi/focusads_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SinaVDDeveloper/demo/ce1f1a479dc431f21161b88150fd67fb790da154/res/drawable-hdpi/focusads_default.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SinaVDDeveloper/demo/ce1f1a479dc431f21161b88150fd67fb790da154/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/image_progress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SinaVDDeveloper/demo/ce1f1a479dc431f21161b88150fd67fb790da154/res/drawable-hdpi/image_progress.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/series_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SinaVDDeveloper/demo/ce1f1a479dc431f21161b88150fd67fb790da154/res/drawable-hdpi/series_bg.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/video_item_play_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SinaVDDeveloper/demo/ce1f1a479dc431f21161b88150fd67fb790da154/res/drawable-hdpi/video_item_play_icon.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SinaVDDeveloper/demo/ce1f1a479dc431f21161b88150fd67fb790da154/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SinaVDDeveloper/demo/ce1f1a479dc431f21161b88150fd67fb790da154/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SinaVDDeveloper/demo/ce1f1a479dc431f21161b88150fd67fb790da154/res/drawable-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable-xxhdpi/play_ctrl_share_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SinaVDDeveloper/demo/ce1f1a479dc431f21161b88150fd67fb790da154/res/drawable-xxhdpi/play_ctrl_share_bg.png
--------------------------------------------------------------------------------
/res/drawable-xxhdpi/play_ctrl_share_press_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SinaVDDeveloper/demo/ce1f1a479dc431f21161b88150fd67fb790da154/res/drawable-xxhdpi/play_ctrl_share_press_bg.png
--------------------------------------------------------------------------------
/res/drawable/item_track.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/loading_iamge_progress.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
15 |
--------------------------------------------------------------------------------
/res/drawable/play_ctrl_share.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
7 |
9 |
11 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/res/layout/common_control_layer.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/res/layout/control_layer.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
18 |
19 |
28 |
29 |
33 |
34 |
41 |
42 |
47 |
48 |
49 |
50 |
62 |
63 |
74 |
75 |
76 |
82 |
83 |
86 |
87 |
90 |
91 |
92 |
97 |
98 |
105 |
106 |
114 |
115 |
123 |
124 |
128 |
129 |
133 |
134 |
135 |
136 |
137 |
138 |
148 |
149 |
154 |
155 |
164 |
165 |
--------------------------------------------------------------------------------
/res/layout/control_layer_horizon.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 |
20 |
21 |
26 |
27 |
36 |
37 |
42 |
43 |
49 |
50 |
51 |
52 |
53 |
61 |
62 |
66 |
67 |
73 |
74 |
89 |
90 |
98 |
99 |
100 |
101 |
102 |
109 |
110 |
111 |
112 |
121 |
122 |
129 |
130 |
137 |
138 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
167 |
168 |
179 |
180 |
181 |
186 |
187 |
191 |
192 |
193 |
199 |
200 |
203 |
204 |
207 |
208 |
209 |
215 |
216 |
220 |
221 |
227 |
228 |
229 |
234 |
235 |
242 |
243 |
251 |
252 |
256 |
257 |
261 |
262 |
263 |
274 |
275 |
279 |
280 |
284 |
285 |
--------------------------------------------------------------------------------
/res/layout/list_vision.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
--------------------------------------------------------------------------------
/res/layout/list_vision_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
14 |
15 |
20 |
21 |
25 |
26 |
27 |
33 |
34 |
41 |
42 |
48 |
49 |
59 |
60 |
61 |
62 |
68 |
69 |
--------------------------------------------------------------------------------
/res/layout/live_video_detail_control_layer.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
14 |
23 |
24 |
28 |
29 |
36 |
37 |
42 |
43 |
44 |
45 |
57 |
58 |
68 |
69 |
70 |
76 |
77 |
80 |
81 |
84 |
85 |
86 |
91 |
92 |
99 |
100 |
108 |
109 |
114 |
115 |
119 |
120 |
123 |
124 |
125 |
126 |
127 |
128 |
138 |
139 |
143 |
144 |
--------------------------------------------------------------------------------
/res/layout/live_video_detail_control_layer_horizon.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 |
17 |
18 |
19 |
28 |
29 |
36 |
37 |
42 |
43 |
52 |
53 |
61 |
62 |
69 |
70 |
76 |
77 |
85 |
86 |
91 |
92 |
93 |
99 |
100 |
101 |
102 |
103 |
104 |
113 |
114 |
119 |
120 |
131 |
132 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
165 |
166 |
177 |
178 |
179 |
184 |
185 |
189 |
190 |
191 |
197 |
198 |
201 |
202 |
205 |
206 |
207 |
213 |
214 |
218 |
219 |
225 |
226 |
227 |
232 |
233 |
240 |
241 |
249 |
250 |
255 |
256 |
260 |
261 |
264 |
265 |
266 |
272 |
273 |
274 |
281 |
282 |
289 |
290 |
291 |
302 |
303 |
307 |
308 |
312 |
313 |
314 |
325 |
326 |
335 |
336 |
345 |
346 |
355 |
356 |
357 |
--------------------------------------------------------------------------------
/res/layout/m3u8_test.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/res/layout/m3u8_ui_control_layer.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
18 |
19 |
28 |
29 |
33 |
34 |
41 |
42 |
47 |
48 |
49 |
50 |
62 |
63 |
74 |
75 |
76 |
82 |
83 |
86 |
87 |
90 |
91 |
92 |
97 |
98 |
105 |
106 |
114 |
115 |
123 |
124 |
128 |
129 |
133 |
134 |
135 |
136 |
137 |
138 |
148 |
149 |
154 |
155 |
164 |
165 |
--------------------------------------------------------------------------------
/res/layout/main.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
15 |
16 |
22 |
23 |
29 |
30 |
36 |
37 |
43 |
44 |
50 |
51 |
57 |
58 |
64 |
65 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/res/layout/my_test_layer1.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
13 |
14 |
18 |
19 |
23 |
24 |
30 |
31 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/res/layout/only_horizon.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/res/layout/playerlist1_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
--------------------------------------------------------------------------------
/res/layout/send_comment_layout_full_screen.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/res/layout/simple_control_layer.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
13 |
17 |
18 |
22 |
23 |
29 |
30 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/res/layout/simple_test.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/res/layout/simple_ui_ad_layer.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
16 |
17 |
26 |
27 |
35 |
36 |
37 |
44 |
45 |
46 |
52 |
53 |
54 |
55 |
62 |
63 |
64 |
65 |
72 |
73 |
74 |
75 |
82 |
83 |
89 |
90 |
91 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/res/layout/simple_ui_ad_layer_horizon.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
18 |
19 |
25 |
26 |
34 |
35 |
43 |
44 |
45 |
52 |
53 |
54 |
60 |
61 |
62 |
63 |
70 |
71 |
72 |
73 |
80 |
81 |
82 |
83 |
90 |
91 |
99 |
100 |
101 |
102 |
--------------------------------------------------------------------------------
/res/layout/simple_ui_control_layer.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
18 |
19 |
28 |
29 |
33 |
34 |
41 |
42 |
47 |
48 |
49 |
50 |
62 |
63 |
74 |
75 |
76 |
82 |
83 |
86 |
87 |
90 |
91 |
92 |
97 |
98 |
103 |
104 |
110 |
111 |
121 |
122 |
123 |
131 |
132 |
140 |
141 |
145 |
146 |
150 |
151 |
152 |
153 |
154 |
155 |
165 |
166 |
171 |
172 |
181 |
182 |
--------------------------------------------------------------------------------
/res/layout/simple_ui_control_layer_horizon.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 |
20 |
21 |
26 |
27 |
36 |
37 |
42 |
43 |
50 |
51 |
52 |
53 |
54 |
62 |
63 |
69 |
70 |
76 |
77 |
92 |
93 |
101 |
102 |
103 |
104 |
105 |
112 |
113 |
114 |
115 |
124 |
125 |
130 |
131 |
138 |
139 |
150 |
151 |
152 |
153 |
154 |
155 |
167 |
168 |
179 |
180 |
181 |
186 |
187 |
191 |
192 |
193 |
199 |
200 |
203 |
204 |
207 |
208 |
209 |
215 |
216 |
220 |
221 |
227 |
228 |
229 |
234 |
235 |
242 |
243 |
251 |
252 |
256 |
257 |
261 |
262 |
263 |
274 |
275 |
279 |
280 |
284 |
285 |
286 |
287 |
294 |
295 |
300 |
301 |
302 |
--------------------------------------------------------------------------------
/res/layout/sinavideo_test.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/res/layout/test1.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/res/layout/test_vid_vms.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/res/layout/test_webview.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
11 |
--------------------------------------------------------------------------------
/res/layout/video_grid_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/res/layout/video_gridview.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/res/layout/video_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/res/layout/video_list_sport.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
17 |
18 |
19 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/res/layout/video_listview.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
16 |
17 |
18 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/res/layout/vidvms_ui_control_layer.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
18 |
19 |
28 |
29 |
33 |
34 |
41 |
42 |
47 |
48 |
49 |
50 |
62 |
63 |
74 |
75 |
76 |
82 |
83 |
86 |
87 |
90 |
91 |
92 |
97 |
98 |
105 |
106 |
114 |
115 |
123 |
124 |
128 |
129 |
133 |
134 |
135 |
136 |
137 |
138 |
148 |
149 |
153 |
154 |
163 |
164 |
--------------------------------------------------------------------------------
/res/raw/test_webview.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 测试
5 |
10 |
11 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/res/values-v11/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/res/values-v14/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | - @layout/control_layer
6 |
7 |
8 | - @layout/common_control_layer
9 |
10 |
11 | - @layout/common_control_layer
12 |
13 |
14 | - @layout/my_test_layer1
15 |
16 |
17 |
18 |
19 | - @layout/simple_control_layer
20 |
21 |
22 | - @array/sv_videoview_layer_controllayer
23 |
24 |
25 |
26 | - @array/sv_videoview_layer_controllayer2
27 |
28 |
29 |
30 | - @array/simple_ui_layer_controllayer
31 | - @array/simple_ui_ad_controllayer
32 |
33 |
34 |
35 | - @array/sinavideo_layer_controllayer
36 |
37 |
38 | - @layout/live_video_detail_control_layer
39 | - @layout/live_video_detail_control_layer_horizon
40 |
41 |
42 |
43 | - @layout/control_layer
44 | - @layout/control_layer_horizon
45 |
46 |
47 |
48 | - @layout/simple_ui_control_layer
49 | - @layout/simple_ui_control_layer_horizon
50 |
51 |
52 |
53 | - @layout/simple_ui_ad_layer
54 | - @layout/simple_ui_ad_layer_horizon
55 |
56 |
57 |
58 | - @null
59 | - @layout/control_layer_horizon
60 |
61 |
62 |
63 | - @array/sv_m3u8_layer_controllayer
64 | - @array/simple_ui_ad_controllayer
65 |
66 |
67 | - @layout/m3u8_ui_control_layer
68 | - @layout/m3u8_ui_control_layer_horizon
69 |
70 |
71 | - @array/sv_vid_vms_controllayer
72 |
73 |
74 | - @layout/vidvms_ui_control_layer
75 | - @layout/vidvms_ui_control_layer_horizon
76 |
77 |
78 |
79 |
80 | - @drawable/ic_launcher
81 | - @drawable/ic_launcher
82 | - @drawable/ic_launcher
83 | - @drawable/ic_launcher
84 | - @drawable/ic_launcher
85 | - @drawable/ic_launcher
86 | - @drawable/ic_launcher
87 | - @drawable/ic_launcher
88 | - @drawable/ic_launcher
89 | - @drawable/ic_launcher
90 |
91 |
92 |
--------------------------------------------------------------------------------
/res/values/color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #9B9B9B
5 | #78a22f
6 | #FFFFFF
7 | #DF9FFF
8 | #FFFFFFFF
9 | #DF9FFF
10 | #FFFFFF
11 | #FFFFFF
12 | #CFCFCF
13 | #63B8FF
14 | #f3f3f3
15 | #AAAAAA
16 | #FF33B5E5
17 | #cc8c8c8d
18 | #cc1f7eea
19 | #eaeaea
20 | #3FA3F8
21 |
22 |
23 |
24 | #f1f1f1
25 |
26 | #1f7eea
27 | #666666
28 | #858585
29 | #d6d4d4
30 |
31 | #1f7eea
32 |
33 | #1f7eea
34 | #3878c1
35 | #98d0ff
36 | #63b5fb
37 | #c80000
38 | #ffffff
39 | #f1f1f1
40 | #d6d4d4
41 | #a5a5a5
42 | #898a8b
43 | #858585
44 | #777777
45 | #373737
46 | #666666
47 | #474646
48 | #fefefe
49 | #000000
50 | #c0000000
51 | #c6c6c6
52 | #e5e2e2
53 | #e6e6e6
54 | #898e91
55 | #63b5fb
56 | #555555
57 | #888888
58 | #2a85eb
59 | #333333
60 | #40ffffff
61 | #999999
62 | #206bbf
63 | #848484
64 | #585858
65 | #c0c0c0
66 | #f53400
67 | #a9c5f5
68 | #e8eae6
69 | #d7d7d7
70 | #66000000
71 | #f5ffffff
72 | #9bffffff
73 | #e51f7eea
74 | #8c8c8d
75 | #9b9b9d
76 | #9c9c9c
77 | #90bdf4
78 | #ff5d69
79 | #ff3c98ff
80 | #ff6a75
81 | #5daaff
82 | #444444
83 | #afafaf
84 | #00000000
85 |
86 | #fefefe
#FFFFFF
87 |
88 |
89 | #0078db
90 | #d1d1d1
91 | #0078db
92 |
93 |
94 | #3fa3f8
95 | #ffffff
96 | #ffffff
97 |
98 |
99 | #d9dbdf
100 |
101 | #ff747474
102 |
103 |
104 | #2286F8
105 | #66222425
106 | #c0ffbd21
107 | #f9f9f9
108 |
109 |
--------------------------------------------------------------------------------
/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SDK2实例代码
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
14 |
15 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/com/sina/playerdemo_v2/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.sina.playerdemo_v2;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.os.Bundle;
6 | import android.view.View;
7 | import android.widget.Button;
8 |
9 | import com.sina.playerdemo_v2.activity.OnlyHorizonActivity;
10 | import com.sina.playerdemo_v2.activity.SimpleTestActivity;
11 | import com.sina.playerdemo_v2.activity.SinaVideoActivity;
12 | import com.sina.playerdemo_v2.activity.TestAutoSaveActivity;
13 | import com.sina.playerdemo_v2.activity.TestListActivity;
14 | import com.sina.playerdemo_v2.activity.TestM3u8Activity;
15 | import com.sina.playerdemo_v2.activity.TestMultiADActivity;
16 | import com.sina.playerdemo_v2.activity.TestSimpleADActivity;
17 | import com.sina.playerdemo_v2.activity.TestWebviewActivity;
18 |
19 | public class MainActivity extends Activity {
20 |
21 | @Override
22 | protected void onCreate(Bundle savedInstanceState) {
23 | super.onCreate(savedInstanceState);
24 |
25 | setContentView(R.layout.main);
26 | Button button1 = (Button) findViewById(R.id.button1);
27 | button1.setOnClickListener(new View.OnClickListener() {
28 |
29 | @Override
30 | public void onClick(View v) {
31 | // TODO Auto-generated method stub
32 | Intent intent = new Intent(MainActivity.this,
33 | SimpleTestActivity.class);
34 | startActivity(intent);
35 | }
36 | });
37 |
38 | Button button2 = (Button) findViewById(R.id.button2);
39 | button2.setOnClickListener(new View.OnClickListener() {
40 |
41 | @Override
42 | public void onClick(View arg0) {
43 | // TODO Auto-generated method stub
44 | Intent intent = new Intent(MainActivity.this,
45 | SinaVideoActivity.class);
46 | startActivity(intent);
47 | }
48 | });
49 |
50 | Button button3 = (Button) findViewById(R.id.button3);
51 | button3.setOnClickListener(new View.OnClickListener() {
52 |
53 | @Override
54 | public void onClick(View arg0) {
55 | // TODO Auto-generated method stub
56 | Intent intent = new Intent(MainActivity.this,
57 | TestSimpleADActivity.class);
58 | startActivity(intent);
59 | }
60 | });
61 |
62 | Button button4 = (Button) findViewById(R.id.button4);
63 | button4.setOnClickListener(new View.OnClickListener() {
64 |
65 | @Override
66 | public void onClick(View arg0) {
67 | // TODO Auto-generated method stub
68 | Intent intent = new Intent(MainActivity.this,
69 | TestMultiADActivity.class);
70 | startActivity(intent);
71 | }
72 | });
73 |
74 | Button button5 = (Button) findViewById(R.id.button5);
75 | button5.setOnClickListener(new View.OnClickListener() {
76 |
77 | @Override
78 | public void onClick(View arg0) {
79 | // TODO Auto-generated method stub
80 | Intent intent = new Intent(MainActivity.this,
81 | OnlyHorizonActivity.class);
82 | startActivity(intent);
83 | }
84 | });
85 |
86 | Button button6 = (Button) findViewById(R.id.button6);
87 | button6.setOnClickListener(new View.OnClickListener() {
88 |
89 | @Override
90 | public void onClick(View arg0) {
91 | // TODO Auto-generated method stub
92 | Intent intent = new Intent(MainActivity.this,
93 | TestM3u8Activity.class);
94 | startActivity(intent);
95 | }
96 | });
97 |
98 | Button button7 = (Button) findViewById(R.id.button7);
99 | button7.setOnClickListener(new View.OnClickListener() {
100 |
101 | @Override
102 | public void onClick(View arg0) {
103 | // TODO Auto-generated method stub
104 | Intent intent = new Intent(MainActivity.this,
105 | TestAutoSaveActivity.class);
106 | startActivity(intent);
107 | }
108 | });
109 |
110 | Button button8 = (Button) findViewById(R.id.button8);
111 | button8.setOnClickListener(new View.OnClickListener() {
112 |
113 | @Override
114 | public void onClick(View arg0) {
115 | // TODO Auto-generated method stub
116 | Intent intent = new Intent(MainActivity.this,
117 | TestWebviewActivity.class);
118 | startActivity(intent);
119 | }
120 | });
121 |
122 | Button button9 = (Button) findViewById(R.id.button9);
123 | button9.setOnClickListener(new View.OnClickListener() {
124 |
125 | @Override
126 | public void onClick(View arg0) {
127 | // TODO Auto-generated method stub
128 | Intent intent = new Intent(MainActivity.this,
129 | TestListActivity.class);
130 | startActivity(intent);
131 | }
132 | });
133 |
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/src/com/sina/playerdemo_v2/MyApplication.java:
--------------------------------------------------------------------------------
1 | package com.sina.playerdemo_v2;
2 |
3 | import com.sina.sinavideo.sdk.utils.VDApplication;
4 | import com.sina.sinavideo.sdk.utils.VDResolutionManager;
5 |
6 | import android.app.Application;
7 |
8 | public class MyApplication extends Application {
9 |
10 | @Override
11 | public void onCreate() {
12 | // TODO Auto-generated method stub
13 | super.onCreate();
14 |
15 | // 播放器初始化,要在app启动前进行初始化,才能解压出相应的解码器
16 | VDApplication.getInstance().initPlayer(this);
17 | VDResolutionManager.getInstance(this).init(
18 | VDResolutionManager.RESOLUTION_SOLUTION_NONE);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/com/sina/playerdemo_v2/activity/OnlyHorizonActivity.java:
--------------------------------------------------------------------------------
1 | package com.sina.playerdemo_v2.activity;
2 |
3 | import com.sina.playerdemo_v2.R;
4 | import com.sina.sinavideo.coreplayer.util.LogS;
5 | import com.sina.sinavideo.sdk.VDVideoView;
6 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoFrameADListener;
7 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoInsertADListener;
8 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoPlaylistListener;
9 | import com.sina.sinavideo.sdk.data.VDVideoInfo;
10 | import com.sina.sinavideo.sdk.data.VDVideoListInfo;
11 | import com.sina.sinavideo.sdk.utils.VDVideoFullModeController;
12 | import com.sina.sinavideo.sdk.widgets.playlist.VDVideoPlayListView;
13 |
14 | import android.app.Activity;
15 | import android.content.res.Configuration;
16 | import android.os.Bundle;
17 | import android.view.KeyEvent;
18 | import android.view.ViewGroup;
19 | import android.view.Window;
20 | import android.widget.Toast;
21 |
22 | public class OnlyHorizonActivity extends Activity implements
23 | OnVDVideoFrameADListener, OnVDVideoInsertADListener,
24 | OnVDVideoPlaylistListener {
25 |
26 | private VDVideoView mVDVideoView = null;
27 | private final static String TAG = "Test1Activity";
28 |
29 | @Override
30 | protected void onCreate(Bundle savedInstanceState) {
31 | super.onCreate(savedInstanceState);
32 | requestWindowFeature(Window.FEATURE_NO_TITLE);
33 | setContentView(R.layout.only_horizon);
34 | mVDVideoView = (VDVideoView) findViewById(R.id.vv1);
35 | mVDVideoView.setVDVideoViewContainer((ViewGroup) mVDVideoView
36 | .getParent());
37 |
38 | VDVideoListInfo infoList = new VDVideoListInfo();
39 | VDVideoInfo info = new VDVideoInfo();
40 | info.mTitle = "这就是一个测试视频0";
41 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131396797&tags=videoapp_android";
42 | infoList.addVideoInfo(info);
43 |
44 | info = new VDVideoInfo();
45 | info.mTitle = "这就是一个测试视频1";
46 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
47 | infoList.addVideoInfo(info);
48 |
49 | info = new VDVideoInfo();
50 | info.mTitle = "这就是一个测试视频2";
51 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
52 | infoList.addVideoInfo(info);
53 |
54 | info = new VDVideoInfo();
55 | info.mTitle = "这就是一个测试视频3";
56 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
57 | infoList.addVideoInfo(info);
58 |
59 | registerListener();
60 |
61 | // 简单方式处理的视频列表
62 | VDVideoPlayListView listView = (VDVideoPlayListView) findViewById(R.id.play_list_view);
63 | if (listView != null) {
64 | listView.onVideoList(infoList);
65 | }
66 | mVDVideoView.open(OnlyHorizonActivity.this, infoList);
67 | mVDVideoView.play(0);
68 |
69 | }
70 |
71 | @Override
72 | protected void onResume() {
73 | super.onResume();
74 | mVDVideoView.onResume();
75 | }
76 |
77 | @Override
78 | protected void onPause() {
79 | super.onPause();
80 | mVDVideoView.onPause();
81 | }
82 |
83 | @Override
84 | public boolean onKeyDown(int keyCode, KeyEvent event) {
85 | if (!mVDVideoView.onVDKeyDown(keyCode, event)) {
86 | return super.onKeyDown(keyCode, event);
87 | }
88 | return true;
89 | }
90 |
91 | private void registerListener() {
92 | mVDVideoView.setFrameADListener(this);
93 | mVDVideoView.setInsertADListener(this);
94 | mVDVideoView.setPlaylistListener(this);
95 | }
96 |
97 | // private void openVideo(VDVideoInfo info, int p) {
98 | // mVDVideoView.stop();
99 | // mVDVideoView.release(true);
100 | // mVDVideoView.open(this, info);
101 | // mVDVideoView.play(p);
102 | // }
103 |
104 | @Override
105 | protected void onStop() {
106 | super.onStop();
107 | mVDVideoView.onStop();
108 | }
109 |
110 | @Override
111 | protected void onDestroy() {
112 | mVDVideoView.release(false);
113 | super.onDestroy();
114 | }
115 |
116 | @Override
117 | public void onConfigurationChanged(Configuration newConfig) {
118 | super.onConfigurationChanged(newConfig);
119 |
120 | if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
121 | mVDVideoView.setIsFullScreen(true);
122 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---横屏");
123 | } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
124 | mVDVideoView.setIsFullScreen(false);
125 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---竖屏");
126 | }
127 |
128 | }
129 |
130 | @Override
131 | public void onPlaylistClick(VDVideoInfo info, int p) {
132 | // TODO Auto-generated method stub
133 | if (info == null) {
134 | LogS.e(TAG, "info is null");
135 | }
136 | mVDVideoView.play(p);
137 | }
138 |
139 | @Override
140 | public void onInsertADClick(VDVideoInfo info) {
141 | // TODO Auto-generated method stub
142 | Toast.makeText(this, "广告被点击了", Toast.LENGTH_LONG).show();
143 | }
144 |
145 | @Override
146 | public void onInsertADStepOutClick(VDVideoInfo info) {
147 | // TODO Auto-generated method stub
148 | Toast.makeText(this, "去掉广告被点击了", Toast.LENGTH_LONG).show();
149 | }
150 |
151 | @Override
152 | public void onFrameADPrepared(VDVideoInfo info) {
153 | // TODO Auto-generated method stub
154 | Toast.makeText(this, "从这儿换图", Toast.LENGTH_LONG).show();
155 | }
156 | }
157 |
--------------------------------------------------------------------------------
/src/com/sina/playerdemo_v2/activity/SimpleTestActivity.java:
--------------------------------------------------------------------------------
1 | package com.sina.playerdemo_v2.activity;
2 |
3 | import android.app.Activity;
4 | import android.content.res.Configuration;
5 | import android.os.Bundle;
6 | import android.view.KeyEvent;
7 | import android.view.View;
8 | import android.view.ViewGroup;
9 | import android.view.Window;
10 | import android.widget.ImageView;
11 | import android.widget.Toast;
12 |
13 | import com.sina.playerdemo_v2.R;
14 | import com.sina.sinavideo.coreplayer.util.LogS;
15 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoFrameADListener;
16 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoInsertADListener;
17 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoPlaylistListener;
18 | import com.sina.sinavideo.sdk.VDVideoView;
19 | import com.sina.sinavideo.sdk.data.VDVideoInfo;
20 | import com.sina.sinavideo.sdk.data.VDVideoListInfo;
21 | import com.sina.sinavideo.sdk.utils.VDVideoFullModeController;
22 | import com.sina.sinavideo.sdk.widgets.playlist.VDVideoPlayListView;
23 |
24 | public class SimpleTestActivity extends Activity implements
25 | OnVDVideoInsertADListener, OnVDVideoFrameADListener,
26 | OnVDVideoPlaylistListener {
27 |
28 | private VDVideoView mVDVideoView = null;
29 | private final static String TAG = "Test1Activity";
30 |
31 | @Override
32 | protected void onCreate(Bundle savedInstanceState) {
33 | super.onCreate(savedInstanceState);
34 | requestWindowFeature(Window.FEATURE_NO_TITLE);
35 | setContentView(R.layout.simple_test);
36 | // adIV是广告部分的控件,这个需要产品侧开发人员自己处理了
37 | ImageView adIV = (ImageView) findViewById(R.id.adFrameImageView);
38 | adIV.setOnClickListener(new View.OnClickListener() {
39 |
40 | @Override
41 | public void onClick(View arg0) {
42 | // TODO Auto-generated method stub
43 | Toast.makeText(SimpleTestActivity.this, "点击了静帧广告",
44 | Toast.LENGTH_LONG).show();
45 | }
46 | });
47 | // 从layout里面得到播放器ID
48 | mVDVideoView = (VDVideoView) findViewById(R.id.vv1);
49 | // 手动这是播放窗口父类,横屏的时候,会用这个做为容器使用,如果不设置,那么默认直接跳转到DecorView
50 | mVDVideoView.setVDVideoViewContainer((ViewGroup) mVDVideoView
51 | .getParent());
52 |
53 | VDVideoListInfo infoList = new VDVideoListInfo();
54 | VDVideoInfo info = new VDVideoInfo();
55 | // 多流广告方式,就是在播放列表中配置广告流的方式
56 | // 单流方式:INSERTAD_TYPE_SINGLE,暂时不支持,如果设置了,会报exception
57 | infoList.mInsertADType = VDVideoListInfo.INSERTAD_TYPE_MULTI;
58 | // 如果是两个或者以上的广告流,因为没办法直接取到每条流的时间,所以需要手动设置,否则会报exception
59 | // BTW:ticker组件最大显示长度为两位,也就是99,如果超过99秒的广告时长设置,会一直显示99,直到当前播放时间小于99为止
60 | // infoList.mInsertADSecNum = 133;
61 | // 填充播放列表,第一个是广告,理论上,可以在任何位置
62 | info.mTitle = "这个是一个测试广告";
63 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=137535755&tags=videoapp_android";
64 | info.mIsInsertAD = true;
65 | infoList.addVideoInfo(info);
66 |
67 | info = new VDVideoInfo();
68 | info.mTitle = "这就是一个测试视频0";
69 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131396797&tags=videoapp_android";
70 | infoList.addVideoInfo(info);
71 |
72 | info = new VDVideoInfo();
73 | info.mTitle = "这就是一个测试视频1";
74 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
75 | infoList.addVideoInfo(info);
76 |
77 | info = new VDVideoInfo();
78 | info.mTitle = "这就是一个测试视频2";
79 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
80 | infoList.addVideoInfo(info);
81 |
82 | info = new VDVideoInfo();
83 | info.mTitle = "这就是一个测试视频3";
84 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
85 | infoList.addVideoInfo(info);
86 |
87 | // 广告回调接口
88 | // FrameAD表明是一个帧间广告(点击暂停等出现的那个图)
89 | mVDVideoView.setFrameADListener(this);
90 | // InsertAD表明是一个前贴片广告,(插入广告)
91 | mVDVideoView.setInsertADListener(this);
92 | // 播放列表回调接口
93 | mVDVideoView.setPlaylistListener(this);
94 |
95 | // 简单方式处理的视频列表
96 | VDVideoPlayListView listView = (VDVideoPlayListView) findViewById(R.id.play_list_view);
97 | if (listView != null) {
98 | listView.onVideoList(infoList);
99 | }
100 | // 初始化播放器以及播放列表
101 | mVDVideoView.open(SimpleTestActivity.this, infoList);
102 | // 开始播放,直接选择序号即可
103 | mVDVideoView.play(0);
104 |
105 | }
106 |
107 | @Override
108 | public boolean onKeyDown(int keyCode, KeyEvent event) {
109 | // TODO Auto-generated method stub
110 | if (!mVDVideoView.onVDKeyDown(keyCode, event)) {
111 | return super.onKeyDown(keyCode, event);
112 | }
113 | return true;
114 | }
115 |
116 | @Override
117 | protected void onResume() {
118 | // TODO Auto-generated method stub
119 | super.onResume();
120 | mVDVideoView.onResume();
121 | }
122 |
123 | @Override
124 | protected void onPause() {
125 | // TODO Auto-generated method stub
126 | super.onPause();
127 | mVDVideoView.onPause();
128 | }
129 |
130 | @Override
131 | protected void onStop() {
132 | // TODO Auto-generated method stub
133 | super.onStop();
134 | mVDVideoView.onStop();
135 | }
136 |
137 | @Override
138 | public void onConfigurationChanged(Configuration newConfig) {
139 | super.onConfigurationChanged(newConfig);
140 |
141 | if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
142 | mVDVideoView.setIsFullScreen(true);
143 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---横屏");
144 | } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
145 | mVDVideoView.setIsFullScreen(false);
146 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---竖屏");
147 | }
148 |
149 | }
150 |
151 | /**
152 | * 播放列表里面点击了某个视频,触发外部事件
153 | */
154 | @Override
155 | public void onPlaylistClick(VDVideoInfo info, int p) {
156 | // TODO Auto-generated method stub
157 | if (info == null) {
158 | LogS.e(TAG, "info is null");
159 | }
160 | mVDVideoView.play(p);
161 | }
162 |
163 | /**
164 | * 视频插入广告传回的接口,表明当前的广告被点击了『了解更多』
165 | */
166 | @Override
167 | public void onInsertADClick(VDVideoInfo info) {
168 | // TODO Auto-generated method stub
169 | Toast.makeText(this, "插入广告被点击了", Toast.LENGTH_LONG).show();
170 | }
171 |
172 | /**
173 | * 视频插入广告传回的接口,表明当前的广告被点击了『去掉广告』,按照其他视频逻辑,直接跳转会员页
174 | */
175 | @Override
176 | public void onInsertADStepOutClick(VDVideoInfo info) {
177 | // TODO Auto-generated method stub
178 | Toast.makeText(this, "去掉广告被点击了", Toast.LENGTH_LONG).show();
179 | }
180 |
181 | /**
182 | * 静帧广告换图,从这儿来
183 | */
184 | @Override
185 | public void onFrameADPrepared(VDVideoInfo info) {
186 | // TODO Auto-generated method stub
187 | Toast.makeText(this, "开始换图", Toast.LENGTH_LONG).show();
188 | }
189 | }
190 |
--------------------------------------------------------------------------------
/src/com/sina/playerdemo_v2/activity/SinaVideoActivity.java:
--------------------------------------------------------------------------------
1 | package com.sina.playerdemo_v2.activity;
2 |
3 | import java.io.File;
4 |
5 | import android.app.Activity;
6 | import android.content.res.Configuration;
7 | import android.os.Bundle;
8 | import android.view.KeyEvent;
9 | import android.view.ViewGroup;
10 | import android.view.Window;
11 | import android.widget.Toast;
12 |
13 | import com.sina.playerdemo_v2.R;
14 | import com.sina.sinavideo.coreplayer.util.LogS;
15 | import com.sina.sinavideo.sdk.VDVideoView;
16 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoFrameADListener;
17 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoInsertADListener;
18 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoPlaylistListener;
19 | import com.sina.sinavideo.sdk.data.VDVideoInfo;
20 | import com.sina.sinavideo.sdk.data.VDVideoListInfo;
21 | import com.sina.sinavideo.sdk.utils.VDLog;
22 | import com.sina.sinavideo.sdk.utils.VDUtility;
23 | import com.sina.sinavideo.sdk.utils.VDVideoFullModeController;
24 | import com.sina.sinavideo.sdk.widgets.playlist.VDVideoPlayListView;
25 |
26 | public class SinaVideoActivity extends Activity implements
27 | OnVDVideoInsertADListener, OnVDVideoFrameADListener,
28 | OnVDVideoPlaylistListener {
29 |
30 | private VDVideoView mVDVideoView = null;
31 | private final static String TAG = "Test1Activity";
32 |
33 | @Override
34 | protected void onCreate(Bundle savedInstanceState) {
35 | // TODO Auto-generated method stub
36 | super.onCreate(savedInstanceState);
37 |
38 | requestWindowFeature(Window.FEATURE_NO_TITLE);
39 | setContentView(R.layout.simple_test);
40 | // 从layout里面得到播放器ID
41 | mVDVideoView = (VDVideoView) findViewById(R.id.vv1);
42 | // 手动这是播放窗口父类,横屏的时候,会用这个做为容器使用,如果不设置,那么默认直接跳转到DecorView
43 | mVDVideoView.setVDVideoViewContainer((ViewGroup) mVDVideoView
44 | .getParent());
45 |
46 | VDVideoListInfo infoList = new VDVideoListInfo();
47 | VDVideoInfo info = new VDVideoInfo();
48 |
49 | info = new VDVideoInfo();
50 | info.mTitle = "这就是一个测试视频0";
51 | info.mVideoId = "2015052841";
52 | // String path = VDUtility.getSDCardDataPath(this);
53 | // path += "/137535755.mp4";
54 | // info.mPlayUrl = path;
55 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131396797&tags=videoapp_android";
56 | infoList.addVideoInfo(info);
57 |
58 | info = new VDVideoInfo();
59 | info.mTitle = "这就是一个测试视频1";
60 | info.mVideoId = "131386882";
61 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
62 | infoList.addVideoInfo(info);
63 |
64 | info = new VDVideoInfo();
65 | info.mTitle = "这就是一个测试视频2";
66 | info.mVideoId = "131386882";
67 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
68 | infoList.addVideoInfo(info);
69 |
70 | info = new VDVideoInfo();
71 | info.mTitle = "这就是一个测试视频3";
72 | info.mVideoId = "131386882";
73 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
74 | infoList.addVideoInfo(info);
75 |
76 | // 广告回调接口
77 | // FrameAD表明是一个帧间广告(点击暂停等出现的那个图)
78 | mVDVideoView.setFrameADListener(this);
79 | // InsertAD表明是一个前贴片广告,(插入广告)
80 | mVDVideoView.setInsertADListener(this);
81 | // 播放列表回调接口
82 | mVDVideoView.setPlaylistListener(this);
83 |
84 | // 设置播放列表类型
85 | VDVideoPlayListView listView = (VDVideoPlayListView) findViewById(R.id.play_list_view);
86 | if (listView != null) {
87 | listView.onVideoList(infoList);
88 | }
89 | // 初始化播放器以及播放列表
90 | mVDVideoView.open(SinaVideoActivity.this, infoList);
91 | // 开始播放,直接选择序号即可
92 | mVDVideoView.play(0);
93 |
94 | }
95 |
96 | @Override
97 | public boolean onKeyDown(int keyCode, KeyEvent event) {
98 | // TODO Auto-generated method stub
99 | if (!mVDVideoView.onVDKeyDown(keyCode, event)) {
100 | return super.onKeyDown(keyCode, event);
101 | }
102 | return true;
103 | }
104 |
105 | @Override
106 | protected void onDestroy() {
107 | // TODO Auto-generated method stub
108 | mVDVideoView.release(false);
109 | super.onDestroy();
110 | }
111 |
112 | @Override
113 | protected void onResume() {
114 | // TODO Auto-generated method stub
115 | super.onResume();
116 | int index = mVDVideoView.getListInfo().mIndex;
117 | long position = mVDVideoView.getListInfo().getCurrInfo().mVideoPosition;
118 | mVDVideoView.play(index, position);
119 | }
120 |
121 | @Override
122 | protected void onPause() {
123 | // TODO Auto-generated method stub
124 | super.onPause();
125 | mVDVideoView.onPause();
126 | }
127 |
128 | @Override
129 | protected void onStop() {
130 | // TODO Auto-generated method stub
131 | super.onStop();
132 | mVDVideoView.onStop();
133 | }
134 |
135 | @Override
136 | public void onConfigurationChanged(Configuration newConfig) {
137 | super.onConfigurationChanged(newConfig);
138 |
139 | if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
140 | mVDVideoView.setIsFullScreen(true);
141 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---横屏");
142 | } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
143 | mVDVideoView.setIsFullScreen(false);
144 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---竖屏");
145 | }
146 |
147 | }
148 |
149 | @Override
150 | public void onPlaylistClick(VDVideoInfo info, int p) {
151 | // TODO Auto-generated method stub
152 | if (info == null) {
153 | LogS.e(TAG, "info is null");
154 | }
155 | mVDVideoView.play(p);
156 | }
157 |
158 | @Override
159 | public void onFrameADPrepared(VDVideoInfo info) {
160 | // TODO Auto-generated method stub
161 | Toast.makeText(this, "在这儿换图", Toast.LENGTH_LONG).show();
162 | }
163 |
164 | @Override
165 | public void onInsertADClick(VDVideoInfo info) {
166 | // TODO Auto-generated method stub
167 | Toast.makeText(this, "插入广告被点击了", Toast.LENGTH_LONG).show();
168 | }
169 |
170 | @Override
171 | public void onInsertADStepOutClick(VDVideoInfo info) {
172 | // TODO Auto-generated method stub
173 | Toast.makeText(this, "去掉广告被点击了", Toast.LENGTH_LONG).show();
174 | }
175 |
176 | }
177 |
--------------------------------------------------------------------------------
/src/com/sina/playerdemo_v2/activity/Test2Activity.java:
--------------------------------------------------------------------------------
1 | package com.sina.playerdemo_v2.activity;
2 |
3 | import com.sina.sinavideo.sdk.utils.VDGravitySensorManager;
4 |
5 | import android.app.Activity;
6 | import android.os.Bundle;
7 |
8 | public class Test2Activity extends Activity {
9 |
10 | @Override
11 | protected void onCreate(Bundle savedInstanceState) {
12 | // TODO Auto-generated method stub
13 | super.onCreate(savedInstanceState);
14 |
15 | VDGravitySensorManager manager = new VDGravitySensorManager();
16 | manager.register(this);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/com/sina/playerdemo_v2/activity/TestAutoSaveActivity.java:
--------------------------------------------------------------------------------
1 | package com.sina.playerdemo_v2.activity;
2 |
3 | import android.app.Activity;
4 | import android.content.SharedPreferences;
5 | import android.content.res.Configuration;
6 | import android.os.Bundle;
7 | import android.os.Handler;
8 | import android.view.KeyEvent;
9 | import android.view.ViewGroup;
10 | import android.view.Window;
11 | import android.widget.Toast;
12 |
13 | import com.sina.playerdemo_v2.R;
14 | import com.sina.sinavideo.coreplayer.util.LogS;
15 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDPlayerTypeSwitchListener;
16 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoPreparedListener;
17 | import com.sina.sinavideo.sdk.VDVideoView;
18 | import com.sina.sinavideo.sdk.VDVideoViewController;
19 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoCompletionListener;
20 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoFrameADListener;
21 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoInsertADListener;
22 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoPlaylistListener;
23 | import com.sina.sinavideo.sdk.data.VDVideoInfo;
24 | import com.sina.sinavideo.sdk.data.VDVideoListInfo;
25 | import com.sina.sinavideo.sdk.utils.VDVideoFullModeController;
26 | import com.sina.sinavideo.sdk.widgets.playlist.VDVideoPlayListView;
27 |
28 | /**
29 | * 最简单的例子,用在工程中,需要自己更改存储等信息
30 | *
31 | * @author alexsun
32 | *
33 | */
34 | public class TestAutoSaveActivity extends Activity implements OnVDVideoInsertADListener, OnVDVideoFrameADListener,
35 | OnVDVideoPlaylistListener, OnVDVideoPreparedListener, OnVDVideoCompletionListener, OnVDPlayerTypeSwitchListener {
36 |
37 | private VDVideoView mVDVideoView = null;
38 | private final static String TAG = "Test1Activity";
39 |
40 | private final static int DELAY_SEC = 1000;
41 | private final static String SP_NAME = "auto_saved_position";
42 | private SharedPreferences mSP = null;
43 | private SharedPreferences.Editor mSPEditor = null;
44 |
45 | private Handler mHandler = new Handler();
46 | private Runnable mRunnable = new Runnable() {
47 |
48 | public void run() {
49 | // 当前进度存盘
50 | VDVideoViewController controller = VDVideoViewController.getInstance(TestAutoSaveActivity.this);
51 | if (controller == null) {
52 | // 注意: VDVideoView 和 VDVideoViewController 可能已经销毁
53 | return;
54 | }
55 | if (!controller.mVDPlayerInfo.isPlaying()) {
56 | return;
57 | }
58 | long position = controller.getCurrentPosition();
59 | mSPEditor.putLong(SP_NAME, position);
60 | mSPEditor.commit();
61 | mHandler.postDelayed(mRunnable, DELAY_SEC);
62 | }
63 | };
64 |
65 | @Override
66 | protected void onCreate(Bundle savedInstanceState) {
67 | // TODO Auto-generated method stub
68 | super.onCreate(savedInstanceState);
69 |
70 | mSP = getSharedPreferences(SP_NAME, MODE_PRIVATE);
71 | mSPEditor = mSP.edit();
72 | long position = mSP.getLong(SP_NAME, 0);
73 |
74 | requestWindowFeature(Window.FEATURE_NO_TITLE);
75 | setContentView(R.layout.simple_test);
76 | // 从layout里面得到播放器ID
77 | mVDVideoView = (VDVideoView) findViewById(R.id.vv1);
78 | // 手动这是播放窗口父类,横屏的时候,会用这个做为容器使用,如果不设置,那么默认直接跳转到DecorView
79 | mVDVideoView.setVDVideoViewContainer((ViewGroup) mVDVideoView.getParent());
80 |
81 | VDVideoListInfo infoList = new VDVideoListInfo();
82 | VDVideoInfo info = new VDVideoInfo();
83 |
84 | info = new VDVideoInfo();
85 | info.mTitle = "这就是一个测试视频0";
86 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131396797&tags=videoapp_android";
87 | infoList.addVideoInfo(info);
88 |
89 | info = new VDVideoInfo();
90 | info.mTitle = "这就是一个测试视频1";
91 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
92 | infoList.addVideoInfo(info);
93 |
94 | info = new VDVideoInfo();
95 | info.mTitle = "这就是一个测试视频2";
96 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
97 | infoList.addVideoInfo(info);
98 |
99 | info = new VDVideoInfo();
100 | info.mTitle = "这就是一个测试视频3";
101 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
102 | infoList.addVideoInfo(info);
103 |
104 | // 广告回调接口
105 | // FrameAD表明是一个帧间广告(点击暂停等出现的那个图)
106 | mVDVideoView.setFrameADListener(this);
107 | // InsertAD表明是一个前贴片广告,(插入广告)
108 | mVDVideoView.setInsertADListener(this);
109 | // 播放列表回调接口
110 | mVDVideoView.setPlaylistListener(this);
111 | mVDVideoView.setCompletionListener(this);
112 | mVDVideoView.setPreparedListener(this);
113 | mVDVideoView.setOnVDPlayerTypeSwitchListener(this);
114 |
115 | // 设置播放列表类型
116 | VDVideoPlayListView listView = (VDVideoPlayListView) findViewById(R.id.play_list_view);
117 | if (listView != null) {
118 | listView.onVideoList(infoList);
119 | }
120 | // 初始化播放器以及播放列表
121 | mVDVideoView.open(TestAutoSaveActivity.this, infoList);
122 | // 开始播放,直接选择序号即可
123 | mVDVideoView.play(0, position);
124 | }
125 |
126 | @Override
127 | public boolean onKeyDown(int keyCode, KeyEvent event) {
128 | // TODO Auto-generated method stub
129 | if (!mVDVideoView.onVDKeyDown(keyCode, event)) {
130 | return super.onKeyDown(keyCode, event);
131 | }
132 | return true;
133 | }
134 |
135 | @Override
136 | protected void onDestroy() {
137 | // TODO Auto-generated method stub
138 | mVDVideoView.release(false);
139 | super.onDestroy();
140 | }
141 |
142 | @Override
143 | protected void onResume() {
144 | // TODO Auto-generated method stub
145 | super.onResume();
146 | mVDVideoView.onResume();
147 | }
148 |
149 | @Override
150 | protected void onPause() {
151 | // TODO Auto-generated method stub
152 | super.onPause();
153 | mVDVideoView.onPause();
154 | }
155 |
156 | @Override
157 | protected void onStop() {
158 | // TODO Auto-generated method stub
159 | super.onStop();
160 | mVDVideoView.onStop();
161 | }
162 |
163 | @Override
164 | public void onConfigurationChanged(Configuration newConfig) {
165 | super.onConfigurationChanged(newConfig);
166 |
167 | if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
168 | mVDVideoView.setIsFullScreen(true);
169 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---横屏");
170 | } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
171 | mVDVideoView.setIsFullScreen(false);
172 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---竖屏");
173 | }
174 |
175 | }
176 |
177 | @Override
178 | public void onPlaylistClick(VDVideoInfo info, int p) {
179 | // TODO Auto-generated method stub
180 | if (info == null) {
181 | LogS.e(TAG, "info is null");
182 | }
183 | mVDVideoView.play(p);
184 | }
185 |
186 | @Override
187 | public void onFrameADPrepared(VDVideoInfo info) {
188 | // TODO Auto-generated method stub
189 | Toast.makeText(this, "在这儿换图", Toast.LENGTH_LONG).show();
190 | }
191 |
192 | @Override
193 | public void onInsertADClick(VDVideoInfo info) {
194 | // TODO Auto-generated method stub
195 | Toast.makeText(this, "插入广告被点击了", Toast.LENGTH_LONG).show();
196 | }
197 |
198 | @Override
199 | public void onInsertADStepOutClick(VDVideoInfo info) {
200 | // TODO Auto-generated method stub
201 | Toast.makeText(this, "去掉广告被点击了", Toast.LENGTH_LONG).show();
202 | }
203 |
204 | @Override
205 | public void onVDVideoCompletion(VDVideoInfo info, int status) {
206 | // TODO Auto-generated method stub
207 | mHandler.post(mRunnable);
208 | }
209 |
210 | @Override
211 | public void onVDVideoPrepared(VDVideoInfo info) {
212 | // TODO Auto-generated method stub
213 | mHandler.postDelayed(mRunnable, 0);
214 | }
215 |
216 | @Override
217 | public void OnVDVideoPlayerTypeSwitch(VDVideoInfo info, int p) {
218 | // TODO Auto-generated method stub
219 | mVDVideoView.stop();
220 | mVDVideoView.release(true);
221 | mVDVideoView.open(this, info);
222 | mVDVideoView.play(0);
223 | }
224 |
225 | }
226 |
--------------------------------------------------------------------------------
/src/com/sina/playerdemo_v2/activity/TestListActivity.java:
--------------------------------------------------------------------------------
1 | package com.sina.playerdemo_v2.activity;
2 |
3 | import java.util.ArrayList;
4 |
5 | import android.annotation.SuppressLint;
6 | import android.app.Activity;
7 | import android.content.res.Configuration;
8 | import android.os.Bundle;
9 | import android.view.KeyEvent;
10 | import android.view.LayoutInflater;
11 | import android.view.View;
12 | import android.view.Window;
13 | import android.view.View.OnClickListener;
14 | import android.view.ViewGroup;
15 | import android.widget.BaseAdapter;
16 | import android.widget.ImageView;
17 | import android.widget.ListView;
18 | import android.widget.TextView;
19 |
20 | import com.sina.playerdemo_v2.R;
21 | import com.sina.sinavideo.coreplayer.util.LogS;
22 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoFrameADListener;
23 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoInsertADListener;
24 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoPlaylistListener;
25 | import com.sina.sinavideo.sdk.VDVideoView;
26 | import com.sina.sinavideo.sdk.VDVideoViewController;
27 | import com.sina.sinavideo.sdk.data.VDVideoInfo;
28 | import com.sina.sinavideo.sdk.data.VDVideoListInfo;
29 | import com.sina.sinavideo.sdk.utils.VDVideoFullModeController;
30 | import com.sina.sinavideo.sdk.widgets.playlist.VDVideoPlayListContainer;
31 |
32 | /**
33 | * 列表样式
34 | *
35 | * @author liu_chonghui
36 | *
37 | */
38 | public class TestListActivity extends Activity implements
39 | OnVDVideoFrameADListener, OnVDVideoInsertADListener,
40 | OnVDVideoPlaylistListener {
41 | ListView mVideoList;
42 | VideoListAdapter mAdapter;
43 | ArrayList- contentList = new ArrayList
- ();
44 |
45 | View videoContainer;
46 | VDVideoView videoView;
47 | VDVideoPlayListContainer mVDVideoPlayListContainer;
48 |
49 | @SuppressLint("InflateParams")
50 | @Override
51 | public void onCreate(Bundle bundle) {
52 | super.onCreate(bundle);
53 | requestWindowFeature(Window.FEATURE_NO_TITLE);
54 | setContentView(R.layout.list_vision);
55 |
56 | prepareTestData();
57 |
58 | mVideoList = (ListView) findViewById(R.id.list);
59 | mAdapter = new VideoListAdapter();
60 | mAdapter.setItems(contentList);
61 | mVideoList.setAdapter(mAdapter);
62 | mAdapter.notifyDataSetChanged();
63 |
64 | videoContainer = LayoutInflater.from(this).inflate(
65 | R.layout.video_layout, null);
66 | videoView = (VDVideoView) videoContainer.findViewById(R.id.vv1);
67 | videoView.setVDVideoViewContainer((ViewGroup) videoView.getParent());
68 | mVDVideoPlayListContainer = (VDVideoPlayListContainer) videoContainer
69 | .findViewById(R.id.playlist1);
70 |
71 | registerListener();
72 | }
73 |
74 | private void registerListener() {
75 | if (VDVideoViewController.getInstance(this) != null) {
76 | VDVideoViewController.getInstance(this).getExtListener()
77 | .setFrameADListener(this);
78 | VDVideoViewController.getInstance(this).getExtListener()
79 | .setInsertADListener(this);
80 | VDVideoViewController.getInstance(this).getExtListener()
81 | .setPlaylistListener(this);
82 | }
83 | }
84 |
85 | protected Activity getActivity() {
86 | return this;
87 | }
88 |
89 | protected View getContainer() {
90 | return videoContainer;
91 | }
92 |
93 | private class VideoListAdapter extends BaseAdapter {
94 |
95 | private ArrayList
- mItems;
96 |
97 | public void setItems(ArrayList
- list) {
98 | mItems = list;
99 | }
100 |
101 | @Override
102 | public int getCount() {
103 | if (mItems != null) {
104 | return mItems.size();
105 | }
106 | return 0;
107 | }
108 |
109 | @Override
110 | public Object getItem(int pos) {
111 | return mItems.get(pos);
112 | }
113 |
114 | @Override
115 | public long getItemId(int pos) {
116 | return pos;
117 | }
118 |
119 | @SuppressLint("InflateParams")
120 | @Override
121 | public View getView(int position, View convertView, ViewGroup rootView) {
122 | final Item item = mItems.get(position);
123 | ViewHolder holder;
124 | if (convertView == null) {
125 | holder = new ViewHolder();
126 | convertView = LayoutInflater.from(getActivity()).inflate(
127 | R.layout.list_vision_item, null);
128 | holder.videoLayout = (ViewGroup) convertView
129 | .findViewById(R.id.video_layout);
130 | holder.logo = (ImageView) convertView
131 | .findViewById(R.id.iv_video_thumb);
132 | holder.play = (ImageView) convertView
133 | .findViewById(R.id.iv_video_playicon);
134 | holder.playTime = (TextView) convertView
135 | .findViewById(R.id.iv_video_playtime);
136 | holder.listener = new ClickListener();
137 | convertView.setTag(holder);
138 | } else {
139 | holder = (ViewHolder) convertView.getTag();
140 | }
141 |
142 | if (holder.play != null) {
143 | holder.listener.setData(holder.videoLayout, item.getTitle(),
144 | item.getUrl(), position);
145 | holder.play.setOnClickListener(holder.listener);
146 | }
147 | if (holder.logo != null) {
148 | holder.logo.setImageResource(R.drawable.focusads_default);
149 | // ImageLoader.getInstance().displayImage(item.getImg(),
150 | // holder.logo, videoThumbOptions,
151 | // new AnimateFirstDisplayListener());
152 | }
153 | if (holder.playTime != null) {
154 | holder.playTime.setText(String.valueOf(item.getNo()));
155 | }
156 |
157 | if (item.isVideoShow) {
158 | holder.logo.setVisibility(View.GONE);
159 | holder.play.setVisibility(View.GONE);
160 | holder.playTime.setVisibility(View.GONE);
161 | } else {
162 | holder.logo.setVisibility(View.VISIBLE);
163 | holder.play.setVisibility(View.VISIBLE);
164 | holder.playTime.setVisibility(View.VISIBLE);
165 | }
166 |
167 | return convertView;
168 | }
169 |
170 | class ClickListener implements OnClickListener {
171 | String title;
172 | String url;
173 | ViewGroup parent;
174 | int position;
175 |
176 | public void setData(ViewGroup parent, String title, String url,
177 | int position) {
178 | this.parent = parent;
179 | this.title = title;
180 | this.url = url;
181 | this.position = position;
182 | }
183 |
184 | @Override
185 | public void onClick(View view) {
186 | View container = getContainer();
187 | if (container == null || this.parent == null) {
188 | return;
189 | }
190 | if (container.getParent() != null) {
191 | ((ViewGroup) container.getParent()).removeAllViews();
192 | }
193 | this.parent.addView(container);
194 |
195 | VDVideoListInfo infoList = new VDVideoListInfo();
196 | VDVideoInfo info = new VDVideoInfo();
197 | info = new VDVideoInfo();
198 | info.mTitle = title;
199 | info.mPlayUrl = url;
200 | infoList.addVideoInfo(info);
201 | videoView.open(getActivity(), infoList);
202 | videoView.play(0);
203 |
204 | for (Item item : mItems) {
205 | item.isVideoShow = false;
206 | }
207 | if (position < mItems.size()) {
208 | mItems.get(position).isVideoShow = true;
209 | }
210 | mAdapter.setItems(mItems);
211 | mAdapter.notifyDataSetChanged();
212 | }
213 | }
214 |
215 | class ViewHolder {
216 | ViewGroup videoLayout;
217 | ImageView logo;
218 | ImageView play;
219 | TextView playTime;
220 | ClickListener listener;
221 | }
222 | }
223 |
224 | class Item {
225 | int no;
226 | String title;
227 | String img;
228 | String url;
229 | boolean isVideoShow;
230 |
231 | public Item(int no, String title, String img, String url) {
232 | this.no = no;
233 | this.title = title;
234 | this.img = img;
235 | this.url = url;
236 | }
237 |
238 | public int getNo() {
239 | return this.no;
240 | }
241 |
242 | public String getTitle() {
243 | return this.title;
244 | }
245 |
246 | public String getImg() {
247 | return this.img;
248 | }
249 |
250 | public String getUrl() {
251 | return this.url;
252 | }
253 |
254 | }
255 |
256 | protected void prepareTestData() {
257 | String TEST_THUMB_URL = "http://n.sinaimg.cn/transform/20150526/splR-avxeafs8127570.jpg";
258 | String TEST_THUMB_URL2 = "http://n.sinaimg.cn/default/20150525/xqHu-avxeafs8051553.jpg";
259 | String TEST_PLAY_URL = "http://v.iask.com/v_play_ipad.php?vid=138152839";
260 | String TEST_PLAY_URL2 = "http://v.iask.com/v_play_ipad.php?vid=138116139";
261 | String TEST_PLAY_TITLE = "闪电侠席卷圣洛城";
262 | String TEST_PLAY_TITLE2 = "DOTA2-TI5国际邀请赛";
263 | contentList.clear();
264 | contentList.add(new Item(1, TEST_PLAY_TITLE, TEST_THUMB_URL,
265 | TEST_PLAY_URL));
266 | contentList.add(new Item(2, TEST_PLAY_TITLE2, TEST_THUMB_URL2,
267 | TEST_PLAY_URL2));
268 | contentList.add(new Item(3, TEST_PLAY_TITLE, TEST_THUMB_URL,
269 | TEST_PLAY_URL));
270 | contentList.add(new Item(4, TEST_PLAY_TITLE2, TEST_THUMB_URL2,
271 | TEST_PLAY_URL2));
272 | contentList.add(new Item(5, TEST_PLAY_TITLE, TEST_THUMB_URL,
273 | TEST_PLAY_URL));
274 | contentList.add(new Item(6, TEST_PLAY_TITLE2, TEST_THUMB_URL2,
275 | TEST_PLAY_URL2));
276 | contentList.add(new Item(7, TEST_PLAY_TITLE, TEST_THUMB_URL,
277 | TEST_PLAY_URL));
278 | contentList.add(new Item(8, TEST_PLAY_TITLE2, TEST_THUMB_URL2,
279 | TEST_PLAY_URL2));
280 | contentList.add(new Item(9, TEST_PLAY_TITLE, TEST_THUMB_URL,
281 | TEST_PLAY_URL));
282 | contentList.add(new Item(10, TEST_PLAY_TITLE2, TEST_THUMB_URL2,
283 | TEST_PLAY_URL2));
284 | }
285 |
286 | @Override
287 | public void onPlaylistClick(VDVideoInfo info, int p) {
288 | videoView.play(p);
289 | }
290 |
291 | @Override
292 | public void onInsertADClick(VDVideoInfo info) {
293 | }
294 |
295 | @Override
296 | public void onInsertADStepOutClick(VDVideoInfo info) {
297 | }
298 |
299 | @Override
300 | public void onFrameADPrepared(VDVideoInfo info) {
301 | }
302 |
303 | public void onResume() {
304 | super.onResume();
305 | if (VDVideoViewController.getInstance(this) != null
306 | && VDVideoViewController.getInstance(this).getVideoInfoNum() > 0) {
307 | VDVideoViewController.getInstance(this).onResume();
308 | }
309 | }
310 |
311 | public void onPause() {
312 | super.onPause();
313 | if (VDVideoViewController.getInstance(this) != null) {
314 | VDVideoViewController.getInstance(this).onPause();
315 | }
316 | }
317 |
318 | @Override
319 | public void onStop() {
320 | super.onStop();
321 | if (VDVideoViewController.getInstance(this) != null) {
322 | VDVideoViewController.getInstance(this).onStop();
323 | }
324 | }
325 |
326 | @Override
327 | public void onConfigurationChanged(Configuration newConfig) {
328 | super.onConfigurationChanged(newConfig);
329 | if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
330 | if (videoView != null) {
331 | videoView.setIsFullScreen(true);
332 | LogS.e(VDVideoFullModeController.TAG,
333 | "onConfigurationChanged---横屏");
334 | }
335 | } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
336 | if (videoView != null) {
337 | videoView.setIsFullScreen(false);
338 | LogS.e(VDVideoFullModeController.TAG,
339 | "onConfigurationChanged---竖屏");
340 | }
341 | }
342 | }
343 |
344 | public boolean holdGoBack() {
345 | boolean isLandscape = !VDVideoFullModeController.getInstance()
346 | .getIsPortrait();
347 | if (isLandscape) {
348 | return true;
349 | }
350 | return false;
351 | }
352 |
353 | @Override
354 | public boolean onKeyDown(int keyCode, KeyEvent event) {
355 | if (keyCode == KeyEvent.KEYCODE_BACK) {
356 | if (holdGoBack()) {
357 | if (VDVideoViewController.getInstance(this) != null
358 | && !VDVideoViewController.getInstance(this).onKeyEvent(
359 | event)) {
360 | return false;
361 | }
362 | return true;
363 | }
364 | }
365 | return super.onKeyDown(keyCode, event);
366 | }
367 |
368 | public void onDestroy() {
369 | videoView.release(false);
370 | super.onDestroy();
371 | }
372 | }
373 |
--------------------------------------------------------------------------------
/src/com/sina/playerdemo_v2/activity/TestM3u8Activity.java:
--------------------------------------------------------------------------------
1 | package com.sina.playerdemo_v2.activity;
2 |
3 | import android.app.Activity;
4 | import android.content.res.Configuration;
5 | import android.os.Bundle;
6 | import android.view.KeyEvent;
7 | import android.view.View;
8 | import android.view.ViewGroup;
9 | import android.view.Window;
10 | import android.widget.ImageView;
11 | import android.widget.Toast;
12 |
13 | import com.sina.playerdemo_v2.R;
14 | import com.sina.sinavideo.coreplayer.util.LogS;
15 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoFrameADListener;
16 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoInsertADListener;
17 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoPlaylistListener;
18 | import com.sina.sinavideo.sdk.VDVideoView;
19 | import com.sina.sinavideo.sdk.data.VDVideoInfo;
20 | import com.sina.sinavideo.sdk.data.VDVideoListInfo;
21 | import com.sina.sinavideo.sdk.utils.VDVideoFullModeController;
22 | import com.sina.sinavideo.sdk.widgets.playlist.VDVideoPlayListView;
23 |
24 | /**
25 | * 测试伪直播中需要显示清晰度的功能 真直播:URL对应的直播文件中遵从m3u8协议,但无 ENDLIST 标签
26 | * 伪直播:URL对应的直播文件中遵从m3u8协议,但有 ENDLIST 标签
27 | * */
28 |
29 | public class TestM3u8Activity extends Activity implements OnVDVideoInsertADListener, OnVDVideoFrameADListener,
30 | OnVDVideoPlaylistListener {
31 |
32 | private VDVideoView mVDVideoView = null;
33 | private final static String TAG = "TestM3u8Activity";
34 |
35 | @Override
36 | protected void onCreate(Bundle savedInstanceState) {
37 | super.onCreate(savedInstanceState);
38 | requestWindowFeature(Window.FEATURE_NO_TITLE);
39 |
40 | setContentView(R.layout.m3u8_test);
41 |
42 | // adIV是广告部分的控件,这个需要产品侧开发人员自己处理了
43 | ImageView adIV = (ImageView) findViewById(R.id.adFrameImageView);
44 | adIV.setOnClickListener(new View.OnClickListener() {
45 |
46 | @Override
47 | public void onClick(View arg0) {
48 | // TODO Auto-generated method stub
49 | Toast.makeText(TestM3u8Activity.this, "点击了静帧广告", Toast.LENGTH_LONG).show();
50 | }
51 | });
52 | // 从layout里面得到播放器ID
53 | mVDVideoView = (VDVideoView) findViewById(R.id.vv1);
54 | // 手动这是播放窗口父类,横屏的时候,会用这个做为容器使用,如果不设置,那么默认直接跳转到DecorView
55 | mVDVideoView.setVDVideoViewContainer((ViewGroup) mVDVideoView.getParent());
56 |
57 | VDVideoListInfo infoList = new VDVideoListInfo();
58 |
59 | // 多流广告方式,就是在播放列表中配置广告流的方式
60 | // 单流方式:INSERTAD_TYPE_SINGLE,暂时不支持,如果设置了,会报exception
61 | infoList.mInsertADType = VDVideoListInfo.INSERTAD_TYPE_MULTI;
62 |
63 | // 如果是两个或者以上的广告流,因为没办法直接取到每条流的时间,所以需要手动设置,否则会报exception
64 | // BTW:ticker组件最大显示长度为两位,也就是99,如果超过99秒的广告时长设置,会一直显示99,直到当前播放时间小于99为止
65 | // infoList.mInsertADSecNum = 6;
66 | // 如果没有办法获取广告播放时间,那么设置这个选项后,由系统在播放时候分别获取时间来进行播放ß
67 | infoList.mIsSetInsertADTime = false;
68 |
69 | // 填充播放列表,第一个是广告,理论上,可以在任何位置
70 | VDVideoInfo info = null;
71 |
72 | /**
73 | * (伪直播:URL对应的直播文件中遵从m3u8协议,但有 ENDLIST 标签)
74 | * */
75 | info = new VDVideoInfo();
76 | info.mTitle = "篮球m3u8伪直播";
77 | info.mPlayUrl = "http://wtv.v.iask.com/player/ovs1_vod_rid_2015042723_br_3_pn_weitv_tn_0_sig_md5.m3u8";
78 | infoList.addVideoInfo(info);
79 |
80 | info = new VDVideoInfo();
81 | info.mTitle = "一个MP4测试视频1";
82 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
83 | infoList.addVideoInfo(info);
84 |
85 | info = new VDVideoInfo();
86 | info.mTitle = "一个MP4测试视频2";
87 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386883&tags=videoapp_android";
88 | infoList.addVideoInfo(info);
89 |
90 | info = new VDVideoInfo();
91 | info.mTitle = "这个是一个测试广告";
92 | info.mPlayUrl = "http://123.126.53.108:10009/1.mp4";
93 | info.mIsInsertAD = true;
94 | infoList.addVideoInfo(info);
95 |
96 | info = new VDVideoInfo();
97 | info.mTitle = "一个MP4测试视频3";
98 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386885&tags=videoapp_android";
99 | infoList.addVideoInfo(info);
100 |
101 | // 广告回调接口
102 | // FrameAD表明是一个帧间广告(点击暂停等出现的那个图)
103 | mVDVideoView.setFrameADListener(this);
104 | // InsertAD表明是一个前贴片广告,(插入广告)
105 | mVDVideoView.setInsertADListener(this);
106 | // 播放列表回调接口
107 | mVDVideoView.setPlaylistListener(this);
108 |
109 | // 设置播放列表类型
110 | VDVideoPlayListView listView = (VDVideoPlayListView) findViewById(R.id.play_list_view);
111 | if (listView != null) {
112 | listView.onVideoList(infoList);
113 | }
114 | // 初始化播放器以及播放列表
115 | mVDVideoView.open(TestM3u8Activity.this, infoList);
116 | // 开始播放,直接选择序号即可
117 | mVDVideoView.play(0);
118 |
119 | }
120 |
121 | @Override
122 | public boolean onKeyDown(int keyCode, KeyEvent event) {
123 | // TODO Auto-generated method stub
124 | if (!mVDVideoView.onVDKeyDown(keyCode, event)) {
125 | return super.onKeyDown(keyCode, event);
126 | }
127 | return true;
128 | }
129 |
130 | @Override
131 | protected void onResume() {
132 | // TODO Auto-generated method stub
133 | super.onResume();
134 | mVDVideoView.onResume();
135 | }
136 |
137 | @Override
138 | protected void onPause() {
139 | // TODO Auto-generated method stub
140 | super.onPause();
141 | mVDVideoView.onPause();
142 | }
143 |
144 | @Override
145 | protected void onStop() {
146 | // TODO Auto-generated method stub
147 | super.onStop();
148 | mVDVideoView.onStop();
149 | }
150 |
151 | @Override
152 | protected void onDestroy() {
153 | mVDVideoView.release(false);
154 | super.onDestroy();
155 | }
156 |
157 | @Override
158 | public void onConfigurationChanged(Configuration newConfig) {
159 | super.onConfigurationChanged(newConfig);
160 |
161 | if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
162 | mVDVideoView.setIsFullScreen(true);
163 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---横屏");
164 | } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
165 | mVDVideoView.setIsFullScreen(false);
166 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---竖屏");
167 | }
168 |
169 | }
170 |
171 | /**
172 | * 播放列表里面点击了某个视频,触发外部事件
173 | */
174 | @Override
175 | public void onPlaylistClick(VDVideoInfo info, int p) {
176 | // TODO Auto-generated method stub
177 | if (info == null) {
178 | LogS.e(TAG, "info is null");
179 | }
180 | mVDVideoView.play(p);
181 | // openVideo(info, p);
182 | }
183 |
184 | /**
185 | * 帧间动画传回的接口,在有帧间动画时候,然后按暂停按钮,会调用此方法,在里面写响应的逻辑,看匹配那个广告
186 | */
187 |
188 | /**
189 | * 视频插入广告传回的接口,表明当前的广告被点击了『了解更多』
190 | */
191 | @Override
192 | public void onInsertADClick(VDVideoInfo info) {
193 | // TODO Auto-generated method stub
194 | Toast.makeText(this, "插入广告被点击了", Toast.LENGTH_LONG).show();
195 | }
196 |
197 | /**
198 | * 视频插入广告传回的接口,表明当前的广告被点击了『去掉广告』,按照其他视频逻辑,直接跳转会员页
199 | */
200 | @Override
201 | public void onInsertADStepOutClick(VDVideoInfo info) {
202 | // TODO Auto-generated method stub
203 | Toast.makeText(this, "去掉广告被点击了", Toast.LENGTH_LONG).show();
204 | }
205 |
206 | /**
207 | * 静帧广告换图,从这儿来
208 | */
209 | @Override
210 | public void onFrameADPrepared(VDVideoInfo info) {
211 | // TODO Auto-generated method stub
212 | Toast.makeText(this, "开始换图", Toast.LENGTH_LONG).show();
213 | }
214 | }
215 |
--------------------------------------------------------------------------------
/src/com/sina/playerdemo_v2/activity/TestMultiADActivity.java:
--------------------------------------------------------------------------------
1 | package com.sina.playerdemo_v2.activity;
2 |
3 | import android.app.Activity;
4 | import android.content.res.Configuration;
5 | import android.os.Bundle;
6 | import android.view.KeyEvent;
7 | import android.view.View;
8 | import android.view.ViewGroup;
9 | import android.view.Window;
10 | import android.widget.ImageView;
11 | import android.widget.Toast;
12 |
13 | import com.sina.playerdemo_v2.R;
14 | import com.sina.sinavideo.coreplayer.util.LogS;
15 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoFrameADListener;
16 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoInsertADEndListener;
17 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoInsertADListener;
18 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoPlaylistListener;
19 | import com.sina.sinavideo.sdk.VDVideoView;
20 | import com.sina.sinavideo.sdk.data.VDVideoInfo;
21 | import com.sina.sinavideo.sdk.data.VDVideoListInfo;
22 | import com.sina.sinavideo.sdk.utils.VDVideoFullModeController;
23 | import com.sina.sinavideo.sdk.widgets.playlist.VDVideoPlayListView;
24 |
25 | public class TestMultiADActivity extends Activity implements
26 | OnVDVideoInsertADListener, OnVDVideoFrameADListener,
27 | OnVDVideoPlaylistListener, OnVDVideoInsertADEndListener {
28 |
29 | private VDVideoView mVDVideoView = null;
30 | private final static String TAG = "Test1Activity";
31 |
32 | @Override
33 | protected void onCreate(Bundle savedInstanceState) {
34 | super.onCreate(savedInstanceState);
35 | requestWindowFeature(Window.FEATURE_NO_TITLE);
36 | setContentView(R.layout.simple_test);
37 | // adIV是广告部分的控件,这个需要产品侧开发人员自己处理了
38 | ImageView adIV = (ImageView) findViewById(R.id.adFrameImageView);
39 | adIV.setOnClickListener(new View.OnClickListener() {
40 |
41 | @Override
42 | public void onClick(View arg0) {
43 | // TODO Auto-generated method stub
44 | Toast.makeText(TestMultiADActivity.this, "点击了静帧广告",
45 | Toast.LENGTH_LONG).show();
46 | }
47 | });
48 | // 从layout里面得到播放器ID
49 | mVDVideoView = (VDVideoView) findViewById(R.id.vv1);
50 | // 手动这是播放窗口父类,横屏的时候,会用这个做为容器使用,如果不设置,那么默认直接跳转到DecorView
51 | mVDVideoView.setVDVideoViewContainer((ViewGroup) mVDVideoView
52 | .getParent());
53 |
54 | VDVideoListInfo infoList = new VDVideoListInfo();
55 | VDVideoInfo info = new VDVideoInfo();
56 | // 多流广告方式,就是在播放列表中配置广告流的方式
57 | // 单流方式:INSERTAD_TYPE_SINGLE,暂时不支持,如果设置了,会报exception
58 | infoList.mInsertADType = VDVideoListInfo.INSERTAD_TYPE_MULTI;
59 | // 如果是两个或者以上的广告流,因为没办法直接取到每条流的时间,所以需要手动设置,否则会报exception
60 | // BTW:ticker组件最大显示长度为两位,也就是99,如果超过99秒的广告时长设置,会一直显示99,直到当前播放时间小于99为止
61 | // infoList.mInsertADSecNum = 6;
62 | // 如果没有办法获取广告播放时间,那么设置这个选项后,由系统在播放时候分别获取时间来进行播放ß
63 | infoList.mIsSetInsertADTime = false;
64 | // 填充播放列表,第一个是广告,理论上,可以在任何位置
65 | // info.mTitle = "这个是一个测试广告";
66 | // info.mPlayUrl =
67 | // "http://v.iask.com/v_play_ipad.php?vid=137535755&tags=videoapp_android";
68 | // info.mPlayUrl = "http://123.126.53.108:10009/2.mp4";
69 | // info.mIsInsertAD = true;
70 | // infoList.addVideoInfo(info);
71 |
72 | // 实验第二个广告视频
73 | info = new VDVideoInfo();
74 | info.mTitle = "这个是第二个测试广告";
75 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=137643076&tags=videoapp_android";
76 | // info.mPlayUrl =
77 | // "http://v.iask.com/v_play_ipad.php?vid=137858284&tags=videoapp_android";
78 | info.mIsInsertAD = true;
79 | infoList.addVideoInfo(info);
80 |
81 | info = new VDVideoInfo();
82 | info.mTitle = "这就是一个测试视频0";
83 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=137535755&tags=videoapp_android";
84 | infoList.addVideoInfo(info);
85 |
86 | info = new VDVideoInfo();
87 | info.mTitle = "这就是一个测试视频1";
88 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386883&tags=videoapp_android";
89 | infoList.addVideoInfo(info);
90 |
91 | // 实验第三个广告视频
92 | info = new VDVideoInfo();
93 | info.mTitle = "这个是第三个测试广告";
94 | info.mPlayUrl = "http://123.126.53.108:10009/1.mp4";
95 | info.mIsInsertAD = true;
96 | infoList.addVideoInfo(info);
97 |
98 | info = new VDVideoInfo();
99 | info.mTitle = "这就是一个测试视频2";
100 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386885&tags=videoapp_android";
101 | infoList.addVideoInfo(info);
102 | //
103 | // info = new VDVideoInfo();
104 | // info.mTitle = "这就是一个测试视频3";
105 | // info.mPlayUrl =
106 | // "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
107 | // infoList.addVideoInfo(info);
108 |
109 | // 广告回调接口
110 | // FrameAD表明是一个帧间广告(点击暂停等出现的那个图)
111 | mVDVideoView.setFrameADListener(this);
112 | // InsertAD表明是一个前贴片广告,(插入广告)
113 | mVDVideoView.setInsertADListener(this);
114 | // 播放列表回调接口
115 | mVDVideoView.setPlaylistListener(this);
116 | mVDVideoView.setInsertADEndListener(this);
117 |
118 | // 设置播放列表类型
119 | VDVideoPlayListView listView = (VDVideoPlayListView) findViewById(R.id.play_list_view);
120 | if (listView != null) {
121 | listView.onVideoList(infoList);
122 | }
123 | // 初始化播放器以及播放列表
124 | mVDVideoView.open(TestMultiADActivity.this, infoList);
125 | // 开始播放,直接选择序号即可
126 | mVDVideoView.play(0);
127 |
128 | }
129 |
130 | @Override
131 | public boolean onKeyDown(int keyCode, KeyEvent event) {
132 | // TODO Auto-generated method stub
133 | if (!mVDVideoView.onVDKeyDown(keyCode, event)) {
134 | return super.onKeyDown(keyCode, event);
135 | }
136 | return true;
137 | }
138 |
139 | @Override
140 | protected void onResume() {
141 | // TODO Auto-generated method stub
142 | super.onResume();
143 | mVDVideoView.onResume();
144 | }
145 |
146 | @Override
147 | protected void onPause() {
148 | // TODO Auto-generated method stub
149 | super.onPause();
150 | mVDVideoView.onPause();
151 | }
152 |
153 | @Override
154 | protected void onStop() {
155 | // TODO Auto-generated method stub
156 | super.onStop();
157 | mVDVideoView.onStop();
158 | }
159 |
160 | @Override
161 | protected void onDestroy() {
162 | mVDVideoView.release(false);
163 | super.onDestroy();
164 | }
165 |
166 | @Override
167 | public void onConfigurationChanged(Configuration newConfig) {
168 | super.onConfigurationChanged(newConfig);
169 |
170 | if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
171 | mVDVideoView.setIsFullScreen(true);
172 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---横屏");
173 | } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
174 | mVDVideoView.setIsFullScreen(false);
175 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---竖屏");
176 | }
177 |
178 | }
179 |
180 | /**
181 | * 播放列表里面点击了某个视频,触发外部事件
182 | */
183 | @Override
184 | public void onPlaylistClick(VDVideoInfo info, int p) {
185 | // TODO Auto-generated method stub
186 | if (info == null) {
187 | LogS.e(TAG, "info is null");
188 | }
189 | mVDVideoView.play(p);
190 | // openVideo(info, p);
191 | }
192 |
193 | /**
194 | * 帧间动画传回的接口,在有帧间动画时候,然后按暂停按钮,会调用此方法,在里面写响应的逻辑,看匹配那个广告
195 | */
196 |
197 | /**
198 | * 视频插入广告传回的接口,表明当前的广告被点击了『了解更多』
199 | */
200 | @Override
201 | public void onInsertADClick(VDVideoInfo info) {
202 | // TODO Auto-generated method stub
203 | Toast.makeText(this, "插入广告被点击了", Toast.LENGTH_LONG).show();
204 | }
205 |
206 | /**
207 | * 视频插入广告传回的接口,表明当前的广告被点击了『去掉广告』,按照其他视频逻辑,直接跳转会员页
208 | */
209 | @Override
210 | public void onInsertADStepOutClick(VDVideoInfo info) {
211 | // TODO Auto-generated method stub
212 | Toast.makeText(this, "去掉广告被点击了", Toast.LENGTH_LONG).show();
213 | }
214 |
215 | /**
216 | * 静帧广告换图,从这儿来
217 | */
218 | @Override
219 | public void onFrameADPrepared(VDVideoInfo info) {
220 | // TODO Auto-generated method stub
221 | Toast.makeText(this, "开始换图", Toast.LENGTH_SHORT).show();
222 | }
223 |
224 | @Override
225 | public void onInsertADEnd(VDVideoInfo info, int status) {
226 | // TODO Auto-generated method stub
227 | Toast.makeText(this, "贴片广告播放结束,status:" + status, Toast.LENGTH_LONG)
228 | .show();
229 | }
230 | }
231 |
--------------------------------------------------------------------------------
/src/com/sina/playerdemo_v2/activity/TestSimpleADActivity.java:
--------------------------------------------------------------------------------
1 | package com.sina.playerdemo_v2.activity;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import android.app.Activity;
7 | import android.content.res.Configuration;
8 | import android.os.Bundle;
9 | import android.view.KeyEvent;
10 | import android.view.View;
11 | import android.view.ViewGroup;
12 | import android.view.Window;
13 | import android.widget.ImageView;
14 | import android.widget.Toast;
15 |
16 | import com.sina.playerdemo_v2.R;
17 | import com.sina.sinavideo.coreplayer.util.LogS;
18 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoCompletionListener;
19 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoErrorListener;
20 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoFrameADListener;
21 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoInsertADEndListener;
22 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoInsertADListener;
23 | import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoPlaylistListener;
24 | import com.sina.sinavideo.sdk.VDVideoView;
25 | import com.sina.sinavideo.sdk.data.VDPlayerErrorInfo;
26 | import com.sina.sinavideo.sdk.data.VDVideoInfo;
27 | import com.sina.sinavideo.sdk.data.VDVideoListInfo;
28 | import com.sina.sinavideo.sdk.utils.VDVideoFullModeController;
29 | import com.sina.sinavideo.sdk.widgets.playlist.VDVideoPlayListView;
30 |
31 | public class TestSimpleADActivity extends Activity implements OnVDVideoInsertADListener, OnVDVideoFrameADListener,
32 | OnVDVideoPlaylistListener, OnVDVideoCompletionListener, OnVDVideoErrorListener, OnVDVideoInsertADEndListener {
33 |
34 | private VDVideoView mVDVideoView = null;
35 | private final static String TAG = "Test1Activity";
36 |
37 | @Override
38 | protected void onCreate(Bundle savedInstanceState) {
39 | super.onCreate(savedInstanceState);
40 | requestWindowFeature(Window.FEATURE_NO_TITLE);
41 | setContentView(R.layout.simple_test);
42 | // adIV是广告部分的控件,这个需要产品侧开发人员自己处理了
43 | ImageView adIV = (ImageView) findViewById(R.id.adFrameImageView);
44 | adIV.setOnClickListener(new View.OnClickListener() {
45 |
46 | @Override
47 | public void onClick(View arg0) {
48 | // TODO Auto-generated method stub
49 | Toast.makeText(TestSimpleADActivity.this, "点击了静帧广告", Toast.LENGTH_LONG).show();
50 | }
51 | });
52 | // 从layout里面得到播放器ID
53 | mVDVideoView = (VDVideoView) findViewById(R.id.vv1);
54 | // 手动这是播放窗口父类,横屏的时候,会用这个做为容器使用,如果不设置,那么默认直接跳转到DecorView
55 | mVDVideoView.setVDVideoViewContainer((ViewGroup) mVDVideoView.getParent());
56 |
57 | VDVideoListInfo infoList = new VDVideoListInfo();
58 | VDVideoInfo info = new VDVideoInfo();
59 | // 多流广告方式,就是在播放列表中配置广告流的方式
60 | // 单流方式:INSERTAD_TYPE_SINGLE,暂时不支持,如果设置了,会报exception
61 | infoList.mInsertADType = VDVideoListInfo.INSERTAD_TYPE_MULTI;
62 | // 如果是两个或者以上的广告流,因为没办法直接取到每条流的时间,所以需要手动设置,否则会报exception
63 | // BTW:ticker组件最大显示长度为两位,也就是99,如果超过99秒的广告时长设置,会一直显示99,直到当前播放时间小于99为止
64 | // infoList.mInsertADSecNum = 133;
65 | // 填充播放列表,第一个是广告,理论上,可以在任何位置
66 | infoList.mIsSetInsertADTime = false;
67 | info.mTitle = "这个是一个测试广告";
68 |
69 | info.mPlayUrl = "http://d0.sina.com.cn/flv/201411/20/20141120308654.mp4";
70 | info.mIsInsertAD = true;
71 | infoList.addVideoInfo(info);
72 |
73 | info = new VDVideoInfo();
74 | info.mTitle = "这就是一个测试视频0";
75 | info.mVideoId = "10000001";
76 | info.mPlayUrl = "http://abv.v.iask.com/player/ovs1_vod_rid_2015051757_br_4_pn_weitv_tn_0_sig_md5.m3u8";
77 | infoList.addVideoInfo(info);
78 |
79 | info = new VDVideoInfo();
80 | info.mTitle = "这就是一个测试视频1";
81 | info.mVideoId = "10000002";
82 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
83 | infoList.addVideoInfo(info);
84 |
85 | info = new VDVideoInfo();
86 | info.mTitle = "这就是一个测试视频2";
87 | info.mVideoId = "10000003";
88 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
89 | infoList.addVideoInfo(info);
90 |
91 | info = new VDVideoInfo();
92 | info.mTitle = "这就是一个测试视频3";
93 | info.mVideoId = "10000004";
94 | info.mPlayUrl = "http://v.iask.com/v_play_ipad.php?vid=131386882&tags=videoapp_android";
95 | infoList.addVideoInfo(info);
96 |
97 | // 广告回调接口
98 | // FrameAD表明是一个帧间广告(点击暂停等出现的那个图)
99 | mVDVideoView.setFrameADListener(this);
100 | // InsertAD表明是一个前贴片广告,(插入广告)
101 | mVDVideoView.setInsertADListener(this);
102 | // 播放列表回调接口
103 | mVDVideoView.setPlaylistListener(this);
104 | mVDVideoView.setCompletionListener(this);
105 | mVDVideoView.setErrorListener(this);
106 | mVDVideoView.setInsertADEndListener(this);
107 |
108 | // 设置播放列表类型
109 | VDVideoPlayListView listView = (VDVideoPlayListView) findViewById(R.id.play_list_view);
110 | if (listView != null) {
111 | listView.onVideoList(infoList);
112 | }
113 | // 初始化播放器以及播放列表
114 | mVDVideoView.open(TestSimpleADActivity.this, infoList);
115 | // 开始播放,直接选择序号即可
116 | mVDVideoView.play(0);
117 |
118 | }
119 |
120 | @Override
121 | public boolean onKeyDown(int keyCode, KeyEvent event) {
122 | // TODO Auto-generated method stub
123 | if (!mVDVideoView.onVDKeyDown(keyCode, event)) {
124 | return super.onKeyDown(keyCode, event);
125 | }
126 | return true;
127 | }
128 |
129 | @Override
130 | protected void onResume() {
131 | // TODO Auto-generated method stub
132 | super.onResume();
133 | mVDVideoView.onResume();
134 | }
135 |
136 | @Override
137 | protected void onPause() {
138 | // TODO Auto-generated method stub
139 | super.onPause();
140 | mVDVideoView.onPause();
141 | }
142 |
143 | @Override
144 | protected void onStop() {
145 | // TODO Auto-generated method stub
146 | super.onStop();
147 | mVDVideoView.onStop();
148 | }
149 |
150 | @Override
151 | protected void onStart() {
152 | // TODO Auto-generated method stub
153 | super.onStart();
154 | mVDVideoView.onStart();
155 | }
156 |
157 | @Override
158 | protected void onDestroy() {
159 | mVDVideoView.release(false);
160 | super.onDestroy();
161 | }
162 |
163 | @Override
164 | public void onConfigurationChanged(Configuration newConfig) {
165 | super.onConfigurationChanged(newConfig);
166 |
167 | if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
168 | mVDVideoView.setIsFullScreen(true);
169 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---横屏");
170 | } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
171 | mVDVideoView.setIsFullScreen(false);
172 | LogS.e(VDVideoFullModeController.TAG, "onConfigurationChanged---竖屏");
173 | }
174 |
175 | }
176 |
177 | /**
178 | * 播放列表里面点击了某个视频,触发外部事件
179 | */
180 | @Override
181 | public void onPlaylistClick(VDVideoInfo info, int p) {
182 | // TODO Auto-generated method stub
183 | if (info == null) {
184 | LogS.e(TAG, "info is null");
185 | }
186 | List list = new ArrayList();
187 | VDVideoInfo adInfo = new VDVideoInfo();
188 | adInfo.mTitle = "这个是一个测试广告";
189 | adInfo.mPlayUrl = "http://123.126.53.108:10009/2.mp4";
190 | adInfo.mIsInsertAD = true;
191 | list.add(adInfo);
192 |
193 | mVDVideoView.refreshInsertADList(list, info);
194 | mVDVideoView.play(p);
195 | }
196 |
197 | /**
198 | * 帧间动画传回的接口,在有帧间动画时候,然后按暂停按钮,会调用此方法,在里面写响应的逻辑,看匹配那个广告
199 | */
200 |
201 | /**
202 | * 视频插入广告传回的接口,表明当前的广告被点击了『了解更多』
203 | */
204 | @Override
205 | public void onInsertADClick(VDVideoInfo info) {
206 | // TODO Auto-generated method stub
207 | Toast.makeText(this, "插入广告被点击了", Toast.LENGTH_LONG).show();
208 | }
209 |
210 | /**
211 | * 视频插入广告传回的接口,表明当前的广告被点击了『去掉广告』,按照其他视频逻辑,直接跳转会员页
212 | */
213 | @Override
214 | public void onInsertADStepOutClick(VDVideoInfo info) {
215 | // TODO Auto-generated method stub
216 | Toast.makeText(this, "去掉广告被点击了", Toast.LENGTH_LONG).show();
217 | }
218 |
219 | /**
220 | * 静帧广告换图,从这儿来
221 | */
222 | @Override
223 | public void onFrameADPrepared(VDVideoInfo info) {
224 | // TODO Auto-generated method stub
225 | Toast.makeText(this, "开始换图", Toast.LENGTH_LONG).show();
226 | }
227 |
228 | @Override
229 | public void onVDVideoError(VDVideoInfo info, int errWhat, int errExtra) {
230 | // TODO Auto-generated method stub
231 | switch (errWhat) {
232 | default :
233 | case VDPlayerErrorInfo.MEDIA_ERROR_WHAT_UNKNOWN :
234 | Toast.makeText(this, "未知错误", Toast.LENGTH_LONG).show();
235 | break;
236 | case VDPlayerErrorInfo.MEDIA_ERROR_WHAT_M3U8_PARSER :
237 | if (errExtra == VDPlayerErrorInfo.MEDIA_ERROR_EXTRA_M3U8_NO_CONTENT) {
238 | Toast.makeText(this, "m3u8内容为空", Toast.LENGTH_LONG).show();
239 | } else if (errExtra == VDPlayerErrorInfo.MEDIA_ERROR_EXTRA_M3U8_PARSE) {
240 | Toast.makeText(this, "m3u8解析错误", Toast.LENGTH_LONG).show();
241 | }
242 | break;
243 | case VDPlayerErrorInfo.MEDIA_ERROR_WHAT_SERVER_DIED :
244 | if (errExtra == VDPlayerErrorInfo.MEDIA_ERROR_EXTRA_PLAYER_IO) {
245 | Toast.makeText(this, "IO错误", Toast.LENGTH_LONG).show();
246 | } else if (errExtra == VDPlayerErrorInfo.MEDIA_ERROR_EXTRA_PLAYER_DECODER_FAIL) {
247 | Toast.makeText(this, "解码错误", Toast.LENGTH_LONG).show();
248 | } else if (errExtra == VDPlayerErrorInfo.MEDIA_ERROR_EXTRA_PLAYER_UNSUPPORTED) {
249 | Toast.makeText(this, "解码器不支持此格式", Toast.LENGTH_LONG).show();
250 | } else if (errExtra == VDPlayerErrorInfo.MEDIA_ERROR_EXTRA_PLAYER_MALFORMED) {
251 | Toast.makeText(this, "编码不是标准格式,无法解析", Toast.LENGTH_LONG).show();
252 | } else if (errExtra == VDPlayerErrorInfo.MEDIA_ERROR_EXTRA_PLAYER_TIMED_OUT) {
253 | Toast.makeText(this, "超时", Toast.LENGTH_LONG).show();
254 | }
255 | break;
256 | case VDPlayerErrorInfo.MEDIA_ERROR_WHAT_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK :
257 | break;
258 | }
259 |
260 | }
261 |
262 | @Override
263 | public void onVDVideoCompletion(VDVideoInfo info, int status) {
264 | // TODO Auto-generated method stub
265 | if (info.mIsInsertAD) {
266 | Toast.makeText(this, "广告播放完了", Toast.LENGTH_LONG).show();
267 | } else {
268 | Toast.makeText(this, "正片播放完了", Toast.LENGTH_LONG).show();
269 | }
270 | }
271 |
272 | @Override
273 | public void onInsertADEnd(VDVideoInfo info, int status) {
274 | // TODO Auto-generated method stub
275 | Toast.makeText(this, "贴片广告播放结束,status:" + status, Toast.LENGTH_LONG).show();
276 | }
277 |
278 | }
279 |
--------------------------------------------------------------------------------
/src/com/sina/playerdemo_v2/activity/TestWebviewActivity.java:
--------------------------------------------------------------------------------
1 |
2 | package com.sina.playerdemo_v2.activity;
3 |
4 | import com.sina.playerdemo_v2.R;
5 |
6 | import android.app.Activity;
7 | import android.os.Bundle;
8 | import android.webkit.WebView;
9 |
10 | /**
11 | * WEBView嵌入视频功能,暂时不能用
12 | *
13 | * @author sunxiao
14 | */
15 | public class TestWebviewActivity extends Activity {
16 |
17 | @Override
18 | protected void onCreate(Bundle savedInstanceState) {
19 | // TODO Auto-generated method stub
20 | super.onCreate(savedInstanceState);
21 |
22 | setContentView(R.layout.test_webview);
23 |
24 | WebView wv1 = (WebView) findViewById(R.id.webview1);
25 |
26 | wv1.getSettings().setJavaScriptEnabled(true);
27 | wv1.loadUrl("file:///android_res/raw/test_webview.html");
28 | }
29 | }
30 |
--------------------------------------------------------------------------------