Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 75 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@

project.properties
*.i

.hg/store/fncache
Expand Down Expand Up @@ -38,3 +38,77 @@ bin/AndroidManifest.xml
*.dex

*.jar

#From https://github.com/ReactiveX/RxAndroid/blob/master/.gitignore

# Compiled source #
###################
*.class

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log

# OS generated files #
######################
.DS_Store*
ehthumbs.db
Icon?
Thumbs.db

# Editor Files #
################
*~
*.swp

# Gradle Files #
################
.gradle
.gradletasknamecache
.m2

# Build output directies
target/
build/

# IntelliJ specific files/directories
out
.idea
*.ipr
*.iws
*.iml
atlassian-ide-plugin.xml

# AndroidStudio specific files/directories
local.properties

# Eclipse specific files/directories
.classpath
.project
.settings
.metadata
bin/

# NetBeans specific files/directories
.nbattrs
/.nb-gradle/profiles/private/
.nb-gradle-properties

# Android
local.properties

# jEnv
.java-version

2 changes: 1 addition & 1 deletion project.properties
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-20
target=android-19
android.library.reference.1=../sinavideo_playersdk
27 changes: 26 additions & 1 deletion res/layout/simple_test.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.sina.playerdemo_v2"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >

Expand All @@ -13,4 +13,29 @@
app:layerAttrs="@array/sv_videoview_layers2" >
</com.sina.sinavideo.sdk.VDVideoView>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/vv1"
android:orientation="vertical" >

<Button
android:id="@+id/rotation_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="旋转" />

<Button
android:id="@+id/capture_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="截屏" />

<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxHeight="240dip"/>
</LinearLayout>

</RelativeLayout>
95 changes: 94 additions & 1 deletion src/com/sina/playerdemo_v2/activity/SimpleTestActivity.java
Original file line number Diff line number Diff line change
@@ -1,32 +1,47 @@
package com.sina.playerdemo_v2.activity;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;
import android.widget.Toast;

import com.sina.playerdemo_v2.R;
import com.sina.sinavideo.coreplayer.ISinaVideoView;
import com.sina.sinavideo.coreplayer.splayer.GLSurfaceView;
import com.sina.sinavideo.coreplayer.splayer.TextureVideoView;
import com.sina.sinavideo.coreplayer.splayer.VideoView;
import com.sina.sinavideo.coreplayer.util.LogS;
import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoFrameADListener;
import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoInsertADListener;
import com.sina.sinavideo.sdk.VDVideoExtListeners.OnVDVideoPlaylistListener;
import com.sina.sinavideo.sdk.VDVideoView;
import com.sina.sinavideo.sdk.VDVideoViewController;
import com.sina.sinavideo.sdk.data.VDVideoInfo;
import com.sina.sinavideo.sdk.data.VDVideoListInfo;
import com.sina.sinavideo.sdk.utils.VDVideoFullModeController;
import com.sina.sinavideo.sdk.widgets.playlist.VDVideoPlayListView;

@SuppressLint("NewApi")
public class SimpleTestActivity extends Activity implements
OnVDVideoInsertADListener, OnVDVideoFrameADListener,
OnVDVideoPlaylistListener {
OnVDVideoPlaylistListener, OnClickListener {

private VDVideoView mVDVideoView = null;
private final static String TAG = "Test1Activity";
private ImageView imageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
Expand All @@ -35,6 +50,10 @@ protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.simple_test);
// adIV是广告部分的控件,这个需要产品侧开发人员自己处理了
ImageView adIV = (ImageView) findViewById(R.id.adFrameImageView);

findViewById(R.id.rotation_btn).setOnClickListener(this);
findViewById(R.id.capture_btn).setOnClickListener(this);
imageView = (ImageView) findViewById(R.id.image);
adIV.setOnClickListener(new View.OnClickListener() {

@Override
Expand Down Expand Up @@ -186,4 +205,78 @@ public void onFrameADPrepared(VDVideoInfo info) {
// TODO Auto-generated method stub
Toast.makeText(this, "开始换图", Toast.LENGTH_LONG).show();
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.rotation_btn:
ISinaVideoView videoView = VDVideoViewController.getInstance(this)
.getVideoView();
if (videoView instanceof TextureVideoView) {
((TextureVideoView) videoView).animate().rotationBy(90.0f)
.setDuration(500).start();
} else {
Toast.makeText(getApplicationContext(), "不支持旋转",
Toast.LENGTH_SHORT).show();
// ((VideoView)videoView).animate().rotationBy(90.0f).setDuration(500).start();
}
break;
case R.id.capture_btn:
saveCurrentFrame();
break;

default:
break;
}

}

private void saveCurrentFrame() {
ISinaVideoView videoView = VDVideoViewController.getInstance(this)
.getVideoView();
if (videoView instanceof TextureVideoView) {
final Bitmap currentFrameBitmap = ((TextureVideoView) videoView)
.getBitmap();
if (currentFrameBitmap == null){
Toast.makeText(getApplicationContext(), "截屏失败",
Toast.LENGTH_SHORT).show();
return;
}
final File currentFrameFile = new File(
getExternalFilesDir("frames"), "frame"
+ System.currentTimeMillis() + ".jpg");
writeBitmapToFile(currentFrameBitmap, currentFrameFile);

imageView.setImageBitmap(currentFrameBitmap);
Toast.makeText(
this,
"Frame saved as " + currentFrameFile.getAbsolutePath()
+ ".", Toast.LENGTH_SHORT).show();
} else {
final Bitmap currentFrameBitmap = ((VideoView) videoView)
.getDrawingCache();
if (currentFrameBitmap == null) {
Toast.makeText(getApplicationContext(), "不支持截屏",
Toast.LENGTH_SHORT).show();
return;
}
final File currentFrameFile = new File(
getExternalFilesDir("frames"), "frame"
+ System.currentTimeMillis() + ".jpg");
writeBitmapToFile(currentFrameBitmap, currentFrameFile);

imageView.setImageBitmap(currentFrameBitmap);
}

}

private void writeBitmapToFile(final Bitmap bitmap, final File file) {
try {
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.close();
} catch (final IOException e) {
Log.e(TAG, "Error writing bitmap to file.", e);
}
}
}