我想在我的应用程序上播放 YouTube 视频,但使用自定义媒体播放器控件,如下所示:

如果我将这些按钮放在播放器下方的单独布局上,它就可以工作,但我需要覆盖 YouTube 不支持的布局(除了ActionBar)。如何修改 Android 播放器以满足我的需求?是否可以使用不同的媒体播放器(带有VideoView)来播放 YouTube 视频/播放列表?或者可以ActionBar用来包含那些媒体控件,包括SeekBar?请建议。
youtube android youtube-api media-player android-youtube-api
我正在开发使用 YouTube android API 的应用程序。
\n\n为了播放视频,我使用了 YouTubePlayerFragment。
\n\n当我从 Activity 类扩展我的活动时,一切正常,但是当我切换到 AppCompatActivity 时,YouTubePlayerSupportFragment 视频无法启动,并且我在 logcat 中看到以下错误:
\n\n11-09 21:43:42.770 28199-28199/org.appspot.apprtc E/YouTubeAndroidPlayerAPI: Error creating YouTubePlayerView\n11-09 21:43:42.770 28199-28199/org.appspot.apprtc E/YouTubeAndroidPlayerAPI: com.google.android.youtube.player.internal.w$a: Exception thrown by invoked constructor in com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer\n11-09 21:43:42.770 28199-28199/org.appspot.apprtc E/YouTubeAndroidPlayerAPI: at com.google.android.youtube.player.internal.w.a(Unknown Source)\n11-09 21:43:42.770 28199-28199/org.appspot.apprtc E/YouTubeAndroidPlayerAPI: at com.google.android.youtube.player.internal.w.a(Unknown Source)\n11-09 21:43:42.770 28199-28199/org.appspot.apprtc E/YouTubeAndroidPlayerAPI: at com.google.android.youtube.player.internal.w.a(Unknown Source)\n11-09 21:43:42.770 28199-28199/org.appspot.apprtc E/YouTubeAndroidPlayerAPI: at com.google.android.youtube.player.internal.ac.a(Unknown Source)\n11-09 21:43:42.770 28199-28199/org.appspot.apprtc E/YouTubeAndroidPlayerAPI: at com.google.android.youtube.player.YouTubePlayerView.a(Unknown Source)\n11-09 21:43:42.770 28199-28199/org.appspot.apprtc E/YouTubeAndroidPlayerAPI: at com.google.android.youtube.player.YouTubePlayerView$1.a(Unknown Source)\n11-09 21:43:42.770 28199-28199/org.appspot.apprtc E/YouTubeAndroidPlayerAPI: at com.google.android.youtube.player.internal.r.g(Unknown Source)\n11-09 21:43:42.770 28199-28199/org.appspot.apprtc …Run Code Online (Sandbox Code Playgroud) 我对此感到非常沮丧,我按照所有步骤在我的 android 项目中为 youtube 添加了 google api,但我仍然遇到此错误:无法解析符号 Youtube
这是我的java类:
import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubeThumbnailLoader;
import com.google.api.services.youtube.YouTube;
import java.util.List;
public class VideoCatalogActivity extends Activity implements YouTubeThumbnailLoader, YouTubePlayer{
private static final String TAG = VideoCatalogActivity.class.getSimpleName();
private static Youtube youtube;
GridView videosGrid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)
这是我的应用程序 gradle 文件:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs') …Run Code Online (Sandbox Code Playgroud) 我正在开发一个显示 Youtube 视频的示例应用程序。它在 iOS 上运行完美,但在 Android 上,它不显示播放按钮,而是显示带有旋转图标的黑屏。
我正在使用react-native-youtubeGitHub 项目添加 YouTube 组件。
<YouTube
apiKey={'xxxxxxxxxxxx'}
videoId={xxxxxxxxx}
play={true}
fullscreen={false}
loop={false}
onReady={e => this.setState({ isReady: true })}
onChangeState={e => this.setState({ status: e.state })}
onChangeQuality={e => this.setState({ quality: e.quality })}
onError={e => this.setState({ error: e.error })}
style={[styles.articleImage, allTabFilterSelected ? {}
styles.articleImageFilterTab]}
/>
Run Code Online (Sandbox Code Playgroud)
在 iOS 上,我的应用程序运行良好,播放按钮有效。但在 Android 上它显示的是一个空的黑屏,如下所示:
请提出一些解决方案!提前致谢。
我有一个 YoutubePlayer 在我的 Motion Layout 中播放视频。我想实现这个youtube-like motion
https://developer.android.com/training/constraint-layout/motionlayout/examples#youtube-like_motion
这里的问题是,在上面提供的示例中,他们使用 ImageView 而不是 YoutubePlayer 界面来完成动画。但不幸的是,youtube 播放器界面似乎“覆盖”了点击侦听器,并且只允许点击而不是滑动。(这是我的推论)。
我想知道它是如何在 youtube 应用程序中实现的。如果有人可以回答我,请做。我需要这在我的应用程序。
我提出了一个问题,请检查一下。 https://issuetracker.google.com/issues/162155197
这是我尝试过的:
当设置touchRegionId为 youtube 播放器前面或后面的视图时,界面的点击被完全禁用。动画虽然有效。我看不到此选项的解决方案,因为我认为此行为是设计使然。
当设置limitBoundsTo为视图时,它会完成它的工作。它将OnSwipe动作区域限制为这样的视图边界。这完全符合我的需要,直到 YOUTUBE 播放器界面初始化。初始化后,OnSwipe不再检测到,界面只侦听点击,例如,您可以暂停视频。如果限制查看的限制大于 youtube 界面,我可以在视图的其余部分滑动。但是 youtube 界面不会收听滑动。也许界面不支持滑动?
我试过不设置上述任何一项。只是简单的 OnSwipe 与拖动方向。在初始化 youtube 之前,滑动无处不在。当它被初始化时,youtube 播放器界面使用的像素停止监听滑动,它们只监听点击。
考虑到2.和3.,我觉得这是接口本身的问题。不管你有什么建议,请告诉我。谢谢你。
这是我的运动布局:
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blackBackground"
android:nestedScrollingEnabled="false"
app:layoutDescription="@xml/activity_main_scene"
app:motionDebug="SHOW_ALL">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/player_background"
android:layout_width="match_parent"
android:layout_height="0dp"
android:focusable="false"
android:focusableInTouchMode="false"
android:touchscreenBlocksFocus="false"
android:clickable="false"
android:background="#000000"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/main_player"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/player_background"
app:layout_constraintLeft_toLeftOf="parent" …Run Code Online (Sandbox Code Playgroud) android android-animation android-layout android-youtube-api android-motionlayout
我正在制作RSS阅读器应用程序,我从URL获取RSS数据,RSS数据可以包含YouTube视频的链接.
以下是与youtube vide相关的链接示例:
div class="video-shortcode"><iframe title="YouTube video player" width="600"
height="350" src="http://www.youtube.com/embed/HXrcUyCVA6c"
frameborder="0" allowfullscreen></iframe></div>
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序时,没有视频,它全黑,我无法播放它.
我如何在WebView中播放视频?
编辑: 结果如下:

这是我的代码:
// set webview properties
WebSettings ws = desc.getSettings();
ws.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
ws.getPluginState();
ws.setPluginState(PluginState.ON);
ws.setJavaScriptEnabled(true);
ws.setUserAgent(0);
ws.setJavaScriptCanOpenWindowsAutomatically(true);
desc.setWebChromeClient(new WebChromeClient() {
});
desc.loadDataWithBaseURL("http://www.balkanandroid.com/", feed
.getItem(pos).getContent(), "text/html", "UTF-8", null);
Run Code Online (Sandbox Code Playgroud)
我的AndroidManifest.xml中有android:hardwareAccelerated ="true".
更新:
我刚刚在另一台设备上测试了我的应用程序,发现我确实在运行Android 4.4.2的Nexus 4上出现了错误,但没有在运行Android 4.0.4的Desire S上出现错误.他们都安装了当前的YouTube应用程序(5.3.32),这是使用API所必需的.
问题:为什么我会收到这些ServiceConnectionLeaked消息?(见下面的Logcat)
描述:
我正在使用YouTube Android Player API 1.0.0(https://developers.google.com/youtube/android/player/)使用以下适配器代码在ListView中加载视频缩略图:
private final Map<View, YouTubeThumbnailLoader> mThumbnailViewToLoaderMap;
public ListViewAdapter(Activity activity, int layoutId, List<Suggestion> suggestions) {
super(activity, layoutId, suggestions);
mThumbnailViewToLoaderMap = new HashMap<View, YouTubeThumbnailLoader>();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
String videoId = getYoutubeId();
// There are three cases here...
if (convertView == null) {
convertView = LayoutInflater.from(mActivity).inflate(R.layout.row_suggestion, parent, false);
holder = new ViewHolder();
holder.thumbnailView = (YouTubeThumbnailView) convertView.findViewById(R.id.youtubeThumbnail); …Run Code Online (Sandbox Code Playgroud) android listview thumbnails serviceconnection android-youtube-api
我目前面临两个主要问题,
我正在使用youtube播放器,当它全屏显示时,播放1-2秒并停止播放.
当我点击中间的"播放"按钮时,它会再次缓冲.即使灰色条填充到它的中心.
这些问题不是在纵向模式下发生的.
这是我的课,就像youtube api演示有点干扰
public class Video extends YouTubeFailureRecoveryActivity implements YouTubePlayer.OnFullscreenListener, Utils.OnGetUrlListener, View.OnClickListener {
static int AUTO_PLAY_DELAY = 1000;
static final int PORTRAIT_ORIENTATION = Build.VERSION.SDK_INT < 9
? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
: ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
private LinearLayout mRootLayout;
/**
* * Youtube ***
*/
YouTubePlayerView mPlayerView;
YouTubePlayer mPlayer;
boolean mIsFullscreen;
String urlID;
/**
* * My ***
*/
RelativeLayout mContainer;
ImageView mBtPlay;
boolean mIsNeedSetFlags;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Utils.getInstance().setActivity(this);
setContentView(R.layout.video_main);
mIsNeedSetFlags = true;
mRootLayout = (LinearLayout) findViewById(R.id.video_root_layout);
mContainer = …Run Code Online (Sandbox Code Playgroud) 我在全屏模式下播放视频时出现以下错误(仅限全屏).当它全屏显示时,我隐藏了布局中的所有其他组件,但它说android:id/statusBarBackground这是导致问题的视图.我该如何控制?
YouTube video playback stopped due to unauthorized overlay on top of player. The YouTubePlayerView is obscured by android.view.View{16771a9d V.ED.... ........ 0,0-1920,75 #102002f android:id/statusBarBackground}. The view is inside the YouTubePlayerView, with the distance in px between each edge of the obscuring view and the YouTubePlayerView being: left: 0, top: 0, right: 0, bottom: 1005..
Run Code Online (Sandbox Code Playgroud)
我的布局看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/videoListLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="@drawable/heading" >
<TextView
android:id="@+id/topDisplayArea"
android:layout_width="match_parent"
android:layout_height="match_parent" …Run Code Online (Sandbox Code Playgroud) 我在创建CHROMELESS时创建的youtube播放器视图就在这里.它正在加载和播放完美,但即使视频完成,缓冲圈也会连续播放.任何人都可以帮助我在不需要时删除缓冲进度并制作一个完美的YouTube播放器吗?
MainActivity.java
package com.rocky.youtubedemo;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerView;
public class MainActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {
private static final int RECOVERY_REQUEST = 1;
private static String YOUTUBE_API_KEY = "";
private YouTubePlayerView youTubeView;
private Context context;
private MyPlayerStateChangeListener playerStateChangeListener;
private MyPlaybackEventListener playbackEventListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
playerStateChangeListener = new MyPlayerStateChangeListener();
playbackEventListener = new MyPlaybackEventListener();
YOUTUBE_API_KEY = "PLACE_YOUR_API_KEY_HERE";
youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view);
youTubeView.initialize(YOUTUBE_API_KEY, …Run Code Online (Sandbox Code Playgroud) youtube android youtube-api android-youtube-api youtube-data-api
android ×10
youtube ×4
youtube-api ×4
listview ×1
media-player ×1
react-native ×1
thumbnails ×1