我有兴趣使用ExoPlayer进行YouTube视频播放.我从ExoPlayer示例中看到他们通过DASH URL播放YouTube视频.
我正在使用Android YouTube API搜索视频,但没有找到获取任何搜索结果的DASH URL的方法.有人知道将YouTube API(v3)与ExoPlayer集成的任何示例(不使用硬编码的视频网址),或者知道如何从YouTube API获取我需要的信息以将视频加载到ExoPlayer中?
我正在使用WebView显示嵌入式Youtube视频并且可以在Galaxcy S2(OS 2.3.5)上运行而在Nexus S(OS 2.3.4)上运行,我得到的只是白屏而没有任何视频显示.
这是我正在使用的代码片段和Manifest文件中的声明:
private WebView wv;
private void setWebView()
{
wv = (WebView) findViewById(R.id.webView);
wv.setWebChromeClient(new WebChromeClient());
wv.getSettings().setPluginState(WebSettings.PluginState.ON);
wv.setWebViewClient(new WebViewClient());
wv.getSettings();
wv.setBackgroundColor(0x00000000);
wv.setKeepScreenOn(true);
wv.setHorizontalScrollBarEnabled(false);
wv.setVerticalScrollBarEnabled(false);
wv.getSettings().setBuiltInZoomControls(true);
final String mimeType = "text/html";
final String encoding = "UTF-8";
String html = getHTML();
wv.loadDataWithBaseURL("", html, mimeType, encoding, "");
}
public String getHTML()
{
String html = "<html>"
+ "<head>"
+ "</head>"
+ "<body style=\"border: 0; padding: 0\">"
+ "<iframe "
+ "type=\"text/html\" "
+ "class=\"youtube-player\" "
+ "width= 100%\""
+ "\" …Run Code Online (Sandbox Code Playgroud) 我构建了一个应用程序,通过WebView播放YouTube iframe视频,并使用YouTube iframe api控制视频.
(我知道适用于Android的YouTube SDK可能更适合Android应用开发,但目前只有iframe api符合我们的需求)
我发现在Android 4.4 KitKat下运行时应用程序会随机崩溃.
这是Google Play控制台的完整崩溃日志:
Native crash at /system/lib/libc.so
in /system/lib/libc.so (tgkill+12), /system/lib/libc.so (pthread_kill+48)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'samsung/lt02ltespr/lt02ltespr:4.4.2/KOT49H/T217SVPUBNH4:user/release-keys'
Revision: '9'
pid: 10404, tid: 10660, name: rbbb.myapp >>> com.kkkkrbbb.myapp <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
r0 00000000 r1 000029a4 r2 00000006 r3 00000000
r4 00000006 r5 00000000 r6 000029a4 r7 0000010c
r8 630b10d0 r9 578211e8 …Run Code Online (Sandbox Code Playgroud) android android-webview android-youtube-api android-4.4-kitkat
我按照本教程https://developers.google.com/youtube/v3/code_samples/java#search_by_keyword
使用YouTubeData API根据关键字检索YouTube视频
本节给出了错误:
"Error:(117, 43) error: cannot find symbol variable auth"
youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, new HttpRequestInitializer() {
public void initialize(com.google.api.client.http.HttpRequest request) throws IOException {
}
})
.setApplicationName("youtube-cmdline-search-sample")
.build();
Run Code Online (Sandbox Code Playgroud)
我认为这个类没有被导入
import com.google.api.services.samples.youtube.cmdline.Auth;
Run Code Online (Sandbox Code Playgroud)
我在互联网上搜索了其他有此问题的人,但这个问题从来没有得到解答....有人可以帮助我吗?
我知道在LI上只能绑定声明为显式的服务.在我的应用程序中,我目前正在使用Youtube API,并且在使用LI的设备上运行时总会出现此错误
java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.google.android.youtube.api.service.START }
Run Code Online (Sandbox Code Playgroud)
如何解决问题,使Youtube API也能在L上运行?
我尝试了这个 YouTube 视频中解释的如何在 Android 应用程序上播放 YouTube 视频的项目:
https://www.youtube.com/watch?v=Up9BjrIuoXY
我尝试在使用 Android 9 和 Android 10 的设备上播放 YouTube 视频,并且视频播放正确,但在 Android 11 设备中,我在 YouTube 视频窗口中收到了以下消息:
“初始化 YouTube 播放器时出错”。
这是 MainActivity.java 的代码:
package com.example.youtube;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
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;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends YouTubeBaseActivity {
Button play_btn;
YouTubePlayerView youtubePlayerView;
YouTubePlayer.OnInitializedListener onInitializedListener;
private static final int RECOVERY_DIALOG_REQUEST = 1;
@Override
protected void …Run Code Online (Sandbox Code Playgroud) 例如,此视频无法使用Youtube播放器API播放:https://www.youtube.com/watch?v = OLK1efdt3n8(搜索响应中的其他视频效果正常)
我收到以下消息:
09-25 17:18:50.226 24280-24280/com.mypackagename W/YouTubeAndroidPlayerAPI? Cannot load modern controls UI. Upgrade to the latest version of the Android YouTube API.
09-25 17:19:05.911 24280-24280/com.mypackagename E/YoutubePlayerFragment? video error : INTERNAL_ERROR
Run Code Online (Sandbox Code Playgroud)
YouTubePlayer API版本:1.2.1(最新)
设备上的YouTube应用是最新的,可以播放此视频
视频参数: videoEmbeddable=true videoSyndicated=true
我在Android应用中使用YouTubeFragment,并在Android 4+设备上遭遇以下崩溃.
java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.
at com.google.android.youtube.player.a.at.i(Unknown Source)
at com.google.android.youtube.player.a.an.k(Unknown Source)
at com.google.android.youtube.player.a.an.a(Unknown Source)
at com.google.android.youtube.player.a.ao.<init>(Unknown Source)
at com.google.android.youtube.player.a.f.a(Unknown Source)
at com.google.android.youtube.player.q.a(Unknown Source)
at com.google.android.youtube.player.a.at.g(Unknown Source)
at com.google.android.youtube.player.a.ax.a(Unknown Source)
at com.google.android.youtube.player.a.aw.a(Unknown Source)
at com.google.android.youtube.player.a.av.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5450)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
该片段正在启动如下:
XYouTubeFragment yFragment = XYouTubeFragment.newInstance(ytVideoId);
activity.commitFragment(yFragment);
Run Code Online (Sandbox Code Playgroud)
并定义如下:
public class XYouTubeFragment extends YouTubePlayerSupportFragment {
public static XYouTubeFragment newInstance(String url) …Run Code Online (Sandbox Code Playgroud) 我的应用使用Youtube Android SDK提供youtube视图.没有问题显示视频但在打开youtube应用程序时崩溃与DeadObjectException.
我的代码如下
//init
FragmentTransaction fragmentTransaction = fm.beginTransaction();
YouTubePlayerSupportFragment fragment = new YouTubePlayerSupportFragment();
fragmentTransaction.replace(R.id.fragmentz, fragment);
fragmentTransaction.commit();
fragment.initialize(Constants.YOUTUBE_DEV_KEY, this);
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, final YouTubePlayer youTubePlayer, boolean wasRestored) {
if (!wasRestored) {
this.youTubePlayer = youTubePlayer;
this.youTubePlayer.setShowFullscreenButton(true);
try {
this.youTubePlayer.loadVideo(youtubeLink);
//other stuff
} catch (IllegalStateException e) {
Logger.e(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当1)直接通过意图移动到youtube应用程序或2)通过播放器视图上的youtube图标移动到youtube应用程序时崩溃
崩溃日志如下所示
java.lang.IllegalStateException: android.os.DeadObjectException
at com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer.u(SourceFile:506)
at com.google.android.apps.youtube.api.jar.a.a.t(SourceFile:467)
at com.google.android.youtube.player.internal.h.onTransact(SourceFile:392)
at android.os.Binder.transact(Binder.java:361)
at com.google.android.youtube.player.internal.d$a$a.r(Unknown Source)
at com.google.android.youtube.player.internal.s.h(Unknown Source)
at com.google.android.youtube.player.YouTubePlayerView.e(Unknown Source)
at com.google.android.youtube.player.YouTubePlayerSupportFragment.onSaveInstanceState(Unknown Source)
at android.support.v4.app.Fragment.performSaveInstanceState(Fragment.java:1647)
at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1610)
at …Run Code Online (Sandbox Code Playgroud) 我实现了一个Android应用程序,使用户可以直接从应用程序流式传输到YouTube频道.我创建了一个API密钥和一个OAuth 2.0客户端ID
但我得到以下com.google.android.gms.auth.GoogleAuthException: UNREGISTERED_ON_API_CONSOLE例外:当我尝试停止某个事件或者当我尝试获取在youtube频道上手动创建的事件时.
我使用以下代码创建一个youtube对象
String accountName = mContext.getString(R.string.google_account_name);
String apiKey = mContext.getString(R.string.google_api_key);
String clientID = mContext.getString(R.string.google_api_client_id);
String clientName = mContext.getString(R.string.google_api_client_name);
GoogleAccountCredential credential =
GoogleAccountCredential.usingOAuth2(mContext,
Arrays.asList(YouTubeScopes.YOUTUBE));
credential.setSelectedAccountName(accountName);
// String SCOPE = "audience:server:client_id:" + clientID + ":api_scope:" + YouTubeScopes.YOUTUBE;
// GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(mContext, SCOPE);
// credential.setSelectedAccountName(accountName);
youtube = new YouTube.Builder(transport, jsonFactory, credential)
.setApplicationName(clientName)
.setYouTubeRequestInitializer(new YouTubeRequestInitializer(apiKey))
/*.setGoogleClientRequestInitializer(new YouTubeRequestInitializer(apiKey))*/
.build();
Run Code Online (Sandbox Code Playgroud)
然后创建一个事件:
LiveBroadcastSnippet broadcastSnippet = new LiveBroadcastSnippet();
broadcastSnippet.setTitle(name);
broadcastSnippet.setScheduledStartTime(new DateTime(futureDate));
LiveBroadcastContentDetails contentDetails = new LiveBroadcastContentDetails();
MonitorStreamInfo monitorStream = new MonitorStreamInfo();
monitorStream.setEnableMonitorStream(false); …Run Code Online (Sandbox Code Playgroud)