我正在开发一个使用 Exoplayer 库(认为它是视频流的最佳可用库)流式传输 MPEG-2 TS 视频的应用程序。
当我尝试在具有 android 版本 5.1 的设备中播放视频时,它工作得非常好,但 4.2.2 不会发生同样的情况
我不知道这是否是 exoplayer 的问题,或者我错过了一些使 exoplayer 与旧版本一起工作的东西。
我只发布我的一些课程以供参考。
package hci.com.iptv.Activity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Surface;
import android.view.View;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.DefaultRenderersFactory;
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.LoadControl;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.audio.AudioRendererEventListener;
import com.google.android.exoplayer2.decoder.DecoderCounters;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.extractor.ExtractorsFactory;
import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
import com.google.android.exoplayer2.ui.PlaybackControlView;
import com.google.android.exoplayer2.ui.SimpleExoPlayerView;
import com.google.android.exoplayer2.upstream.DefaultAllocator;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.util.Util;
import com.google.android.exoplayer2.video.VideoRendererEventListener;
import hci.com.iptv.Player.EncryptedTsUdpDataSourceFactory;
import hci.com.iptv.R;
import hci.com.iptv.Utils.PreferenceManager;
import static hci.com.iptv.Activity.ConfigScreenActivity.IP_ADDRESS;
import static hci.com.iptv.Activity.ConfigScreenActivity.PORT_NUMBER;
public class StreamReaderActivity extends Activity {
private static final String TAG = "HCI.MainActivity";
SimpleExoPlayerView playerView;
SimpleExoPlayer player;
Resources resources;
String savedIpAddress;
int savedPortNumber;
Object lock = new Object();
/**
* Main point of entry
* Get IP address details
* Launch the IPTV stream service. When binding is complete it will complete on the
* mConnection object.
*
* @param savedInstanceState - saved Instance State
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "In onCreate");
Log.i(TAG, "Starting IPTV Player: " + getString(R.string.build));
setContentView(R.layout.activity_stream_reader);
resources = getResources();
// Video View Setup
playerView = (SimpleExoPlayerView) findViewById(R.id.surface);
PreferenceManager.setApplicationContext(getApplicationContext());
savedIpAddress = PreferenceManager.getStringPreference(IP_ADDRESS);
savedPortNumber = PreferenceManager.getIntPreference(PORT_NUMBER);
}
public void initializePlayer(){
hideSystemUi();
DefaultAllocator da = new DefaultAllocator(true, 500*188);
LoadControl loadControl = new DefaultLoadControl(da);
DefaultRenderersFactory rf = new DefaultRenderersFactory(this.getApplicationContext(), null, DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON);
player = ExoPlayerFactory.newSimpleInstance(
rf,
new DefaultTrackSelector(),
new DefaultLoadControl()
);
playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL);
playerView.setPlayer(player);
player.setPlayWhenReady(true);
player.setVideoDebugListener(new VideoRendererEventListener() {
@Override
public void onVideoEnabled(DecoderCounters counters) {
Log.i(TAG, "Video Enabled: " + counters.toString());
}
@Override
public void onVideoDecoderInitialized(String decoderName, long initializedTimestampMs, long initializationDurationMs) {
Log.i(TAG, "Video Decoder Initialized: " + decoderName);
}
@Override
public void onVideoInputFormatChanged(Format format) {
Log.i(TAG, "Video Input Format: " + format.sampleMimeType);
}
@Override
public void onDroppedFrames(int count, long elapsedMs) {
Log.i(TAG, "Dropped Frames: "+ count + "--"+ elapsedMs);
player.seekTo(0);
//player.prepare(buildTcpMediaSource("tcp://"+savedIpAddress+":"+savedPortNumber), true, true);
}
@Override
public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
Log.i(TAG, "Video Size Changed: wxh " + width + "x" + height);
}
@Override
public void onRenderedFirstFrame(Surface surface) {
}
@Override
public void onVideoDisabled(DecoderCounters counters) {
Log.i(TAG, "Video Disabled");
}
});
player.setAudioDebugListener(new AudioRendererEventListener() {
@Override
public void onAudioEnabled(DecoderCounters counters) {
Log.i(TAG, "Audio Enabled: "+counters.toString());
}
@Override
public void onAudioSessionId(int audioSessionId) {
Log.i(TAG, "New Audio Session: "+ audioSessionId);
}
@Override
public void onAudioDecoderInitialized(String decoderName, long initializedTimestampMs, long initializationDurationMs) {
Log.i(TAG, "Audio Decoder Initializied: "+ decoderName);
}
@Override
public void onAudioInputFormatChanged(Format format) {
Log.i(TAG, "Audio Input Format Changed: " + format.containerMimeType );
}
@Override
public void onAudioTrackUnderrun(int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) {
Log.i(TAG, "Audio Track Underrun: " + bufferSize + " -- "+ bufferSizeMs +"/"+elapsedSinceLastFeedMs);
player.seekTo(0);
}
@Override
public void onAudioDisabled(DecoderCounters counters) {
Log.i(TAG, "Audio Disabled: " + counters.toString());
}
});
player.prepare(buildTcpMediaSource("tcp://"+savedIpAddress+":"+savedPortNumber), true, false);
}
@Override
public void onStart(){
super.onStart();
if(Util.SDK_INT > 23){
initializePlayer();
}
}
@Override
public void onResume(){
super.onResume();
hideSystemUi();
if((Util.SDK_INT <= 23 || player == null)){
initializePlayer();
}
}
private void releasePlayer() {
if (player != null) {
player.release();
player = null;
}
}
@Override
public void onPause() {
super.onPause();
if (Util.SDK_INT <= 23){
releasePlayer();
}
}
private MediaSource buildTcpMediaSource(String sUri){
Uri uri = Uri.parse(sUri);
DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
EncryptedTsUdpDataSourceFactory factory = new EncryptedTsUdpDataSourceFactory(bandwidthMeter);
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
return new ExtractorMediaSource(uri, factory, extractorsFactory, null, null);
}
@SuppressLint("InlinedApi")
private void hideSystemUi() {
playerView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}
}
这是布局文件
<?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-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="hci.com.iptv.Activity.StreamReaderActivity">
<TextView
android:id="@+id/buildnumber"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/build"/>
<com.google.android.exoplayer2.ui.SimpleExoPlayerView
android:id="@+id/surface"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/buildnumber"/>
</RelativeLayout>
和清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hci.com.iptv">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppFullScreenTheme"
android:hardwareAccelerated="true">
<!--<service
android:name=".Amlogic.VideoService">
<intent-filter>
<action android:name="amlogic.action.media.video.service"/>
</intent-filter>
</service>-->
<activity
android:name=".Activity.StreamReaderActivity"
android:screenOrientation="landscape" />
<activity
android:name=".Activity.SplashActivity"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Activity.ConfigScreenActivity"
android:screenOrientation="landscape" />
</application>
</manifest>
我需要对视频进行加密,但那是一个单独的加密代码。我认为这不会有任何区别,因为视频在 5.1 版的设备中可以正常播放
这些是我运行任何视频时的日志。
10-30 05:54:14.614 14669-14669/hci.com.iptv D/dalvikvm: DexOpt: unable to opt direct call 0x5230 at 0x16 in Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;.clearRenderedFirstFrame
10-30 05:54:14.624 14669-14669/hci.com.iptv I/dalvikvm: Failed resolving Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$OnFrameRenderedListenerV23; interface 154 'Landroid/media/MediaCodec$OnFrameRenderedListener;'
10-30 05:54:14.624 14669-14669/hci.com.iptv W/dalvikvm: Link of class 'Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$OnFrameRenderedListenerV23;' failed
10-30 05:54:14.624 14669-14669/hci.com.iptv D/dalvikvm: DexOpt: unable to opt direct call 0x5230 at 0x44 in Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;.configureCodec
10-30 05:54:14.644 14669-14669/hci.com.iptv E/dalvikvm: Could not find class 'android.media.AudioAttributes$Builder', referenced from method com.google.android.exoplayer2.audio.AudioTrack.createAudioTrackV21
10-30 05:54:14.644 14669-14669/hci.com.iptv W/dalvikvm: VFY: unable to resolve new-instance 140 (Landroid/media/AudioAttributes$Builder;) in Lcom/google/android/exoplayer2/audio/AudioTrack;
10-30 05:54:14.644 14669-14669/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x22 at 0x0005
10-30 05:54:14.644 14669-14669/hci.com.iptv W/dalvikvm: VFY: unable to find class referenced in signature (Landroid/media/AudioAttributes;)
10-30 05:54:14.644 14669-14669/hci.com.iptv E/dalvikvm: Could not find class 'android.media.AudioFormat$Builder', referenced from method com.google.android.exoplayer2.audio.AudioTrack.createAudioTrackV21
10-30 05:54:14.644 14669-14669/hci.com.iptv W/dalvikvm: VFY: unable to resolve new-instance 142 (Landroid/media/AudioFormat$Builder;) in Lcom/google/android/exoplayer2/audio/AudioTrack;
10-30 05:54:14.644 14669-14669/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x22 at 0x001d
10-30 05:54:14.654 14669-14669/hci.com.iptv I/dalvikvm: Could not find method android.media.AudioTrack.setVolume, referenced from method com.google.android.exoplayer2.audio.AudioTrack.setVolumeInternalV21
10-30 05:54:14.654 14669-14669/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 787: Landroid/media/AudioTrack;.setVolume (F)I
10-30 05:54:14.654 14669-14669/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x0000
10-30 05:54:14.654 14669-14669/hci.com.iptv I/dalvikvm: Could not find method android.media.AudioTrack.write, referenced from method com.google.android.exoplayer2.audio.AudioTrack.writeNonBlockingV21
10-30 05:54:14.654 14669-14669/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 789: Landroid/media/AudioTrack;.write (Ljava/nio/ByteBuffer;II)I
10-30 05:54:14.654 14669-14669/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x0001
10-30 05:54:14.654 14669-14669/hci.com.iptv I/dalvikvm: Could not find method android.media.AudioTrack.write, referenced from method com.google.android.exoplayer2.audio.AudioTrack.writeNonBlockingWithAvSyncV21
10-30 05:54:14.654 14669-14669/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 789: Landroid/media/AudioTrack;.write (Ljava/nio/ByteBuffer;II)I
10-30 05:54:14.654 14669-14669/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x0042
10-30 05:54:14.674 14669-14669/hci.com.iptv D/dalvikvm: DexOpt: unable to opt direct call 0x02e8 at 0x07 in Lcom/google/android/exoplayer2/audio/AudioTrack;.createAudioTrackV21
10-30 05:54:14.674 14669-14669/hci.com.iptv D/dalvikvm: DexOpt: unable to opt direct call 0x02f0 at 0x1f in Lcom/google/android/exoplayer2/audio/AudioTrack;.createAudioTrackV21
10-30 05:54:14.674 14669-14669/hci.com.iptv D/dalvikvm: DexOpt: unable to opt direct call 0x0306 at 0x42 in Lcom/google/android/exoplayer2/audio/AudioTrack;.createAudioTrackV21
10-30 05:54:14.674 14669-14669/hci.com.iptv E/dalvikvm: Could not find class 'android.media.AudioAttributes$Builder', referenced from method com.google.android.exoplayer2.audio.AudioAttributes.getAudioAttributesV21
10-30 05:54:14.674 14669-14669/hci.com.iptv W/dalvikvm: VFY: unable to resolve new-instance 140 (Landroid/media/AudioAttributes$Builder;) in Lcom/google/android/exoplayer2/audio/AudioAttributes;
10-30 05:54:14.674 14669-14669/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x22 at 0x0004
10-30 05:54:14.674 14669-14669/hci.com.iptv W/dalvikvm: VFY: unable to find class referenced in signature (Landroid/media/AudioAttributes;)
10-30 05:54:14.674 14669-14669/hci.com.iptv D/dalvikvm: DexOpt: unable to opt direct call 0x02e8 at 0x06 in Lcom/google/android/exoplayer2/audio/AudioAttributes;.getAudioAttributesV21
10-30 05:54:14.684 14669-14669/hci.com.iptv I/DefaultRenderersFactory: Loaded FfmpegAudioRenderer.
10-30 05:54:14.694 14669-14669/hci.com.iptv I/ExoPlayerImpl: Init ExoPlayerLib/2.4.3 [h27ref, HCIGEN4, TV, 17]
10-30 05:54:14.754 14669-15366/hci.com.iptv I/dalvikvm: Could not find method android.os.Trace.beginSection, referenced from method com.google.android.exoplayer2.util.TraceUtil.beginSectionV18
10-30 05:54:14.754 14669-15366/hci.com.iptv W/dalvikvm: VFY: unable to resolve static method 1258: Landroid/os/Trace;.beginSection (Ljava/lang/String;)V
10-30 05:54:14.754 14669-15366/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x71 at 0x0000
10-30 05:54:14.754 14669-15366/hci.com.iptv I/dalvikvm: Could not find method android.os.Trace.endSection, referenced from method com.google.android.exoplayer2.util.TraceUtil.endSectionV18
10-30 05:54:14.754 14669-15366/hci.com.iptv W/dalvikvm: VFY: unable to resolve static method 1259: Landroid/os/Trace;.endSection ()V
10-30 05:54:14.754 14669-15366/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x71 at 0x0000
10-30 05:54:14.774 14669-15366/hci.com.iptv I/DataSource: Creating Multicast Connection
10-30 05:54:15.094 14669-14669/hci.com.iptv I/dalvikvm: Could not find method android.media.AudioManager.generateAudioSessionId, referenced from method com.google.android.exoplayer2.C.generateAudioSessionIdV21
10-30 05:54:15.094 14669-14669/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 759: Landroid/media/AudioManager;.generateAudioSessionId ()I
10-30 05:54:15.094 14669-14669/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x0008
10-30 05:54:24.794 14669-15366/hci.com.iptv I/DataSource: Creating Multicast Connection
10-30 05:54:35.794 14669-15366/hci.com.iptv I/DataSource: Creating Multicast Connection
10-30 05:54:39.264 14669-14676/hci.com.iptv I/dalvikvm: Total arena pages for JIT: 11
10-30 05:54:39.264 14669-14676/hci.com.iptv I/dalvikvm: Total arena pages for JIT: 12
10-30 05:54:39.264 14669-14676/hci.com.iptv I/dalvikvm: Total arena pages for JIT: 13
10-30 05:54:39.264 14669-14676/hci.com.iptv I/dalvikvm: Total arena pages for JIT: 14
10-30 05:54:39.264 14669-14676/hci.com.iptv I/dalvikvm: Total arena pages for JIT: 15
10-30 05:54:39.264 14669-14676/hci.com.iptv I/dalvikvm: Total arena pages for JIT: 16
10-30 05:54:39.264 14669-14676/hci.com.iptv I/dalvikvm: Total arena pages for JIT: 17
10-30 05:54:39.484 14669-15365/hci.com.iptv I/dalvikvm: Could not find method android.media.MediaCodecInfo$VideoCapabilities.isSizeSupported, referenced from method com.google.android.exoplayer2.mediacodec.MediaCodecInfo.areSizeAndRateSupportedV21
10-30 05:54:39.484 14669-15365/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 823: Landroid/media/MediaCodecInfo$VideoCapabilities;.isSizeSupported (II)Z
10-30 05:54:39.484 14669-15365/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x000c
10-30 05:54:39.484 14669-15365/hci.com.iptv I/dalvikvm: Could not find method android.media.MediaCodecInfo$VideoCapabilities.areSizeAndRateSupported, referenced from method com.google.android.exoplayer2.mediacodec.MediaCodecInfo.areSizeAndRateSupportedV21
10-30 05:54:39.484 14669-15365/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 820: Landroid/media/MediaCodecInfo$VideoCapabilities;.areSizeAndRateSupported (IID)Z
10-30 05:54:39.484 14669-15365/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x0011
10-30 05:54:39.484 14669-15365/hci.com.iptv I/dalvikvm: Could not find method android.media.MediaCodecInfo$CodecCapabilities.isFeatureSupported, referenced from method com.google.android.exoplayer2.mediacodec.MediaCodecInfo.isAdaptiveV19
10-30 05:54:39.484 14669-15365/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 819: Landroid/media/MediaCodecInfo$CodecCapabilities;.isFeatureSupported (Ljava/lang/String;)Z
10-30 05:54:39.484 14669-15365/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
10-30 05:54:39.484 14669-15365/hci.com.iptv I/dalvikvm: Could not find method android.media.MediaCodecInfo$CodecCapabilities.isFeatureSupported, referenced from method com.google.android.exoplayer2.mediacodec.MediaCodecInfo.isSecureV21
10-30 05:54:39.484 14669-15365/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 819: Landroid/media/MediaCodecInfo$CodecCapabilities;.isFeatureSupported (Ljava/lang/String;)Z
10-30 05:54:39.484 14669-15365/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
10-30 05:54:39.484 14669-15365/hci.com.iptv I/dalvikvm: Could not find method android.media.MediaCodecInfo$CodecCapabilities.isFeatureSupported, referenced from method com.google.android.exoplayer2.mediacodec.MediaCodecInfo.isTunnelingV21
10-30 05:54:39.484 14669-15365/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 819: Landroid/media/MediaCodecInfo$CodecCapabilities;.isFeatureSupported (Ljava/lang/String;)Z
10-30 05:54:39.484 14669-15365/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
10-30 05:54:39.484 14669-15365/hci.com.iptv I/dalvikvm: Could not find method android.media.MediaCodecInfo$CodecCapabilities.getVideoCapabilities, referenced from method com.google.android.exoplayer2.mediacodec.MediaCodecInfo.alignVideoSizeV21
10-30 05:54:39.484 14669-15365/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 818: Landroid/media/MediaCodecInfo$CodecCapabilities;.getVideoCapabilities ()Landroid/media/MediaCodecInfo$VideoCapabilities;
10-30 05:54:39.484 14669-15365/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x000d
10-30 05:54:39.484 14669-15365/hci.com.iptv I/dalvikvm: Could not find method android.media.MediaCodecInfo$CodecCapabilities.getAudioCapabilities, referenced from method com.google.android.exoplayer2.mediacodec.MediaCodecInfo.isAudioChannelCountSupportedV21
10-30 05:54:39.484 14669-15365/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 817: Landroid/media/MediaCodecInfo$CodecCapabilities;.getAudioCapabilities ()Landroid/media/MediaCodecInfo$AudioCapabilities;
10-30 05:54:39.484 14669-15365/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x000d
10-30 05:54:39.484 14669-15365/hci.com.iptv I/dalvikvm: Could not find method android.media.MediaCodecInfo$CodecCapabilities.getAudioCapabilities, referenced from method com.google.android.exoplayer2.mediacodec.MediaCodecInfo.isAudioSampleRateSupportedV21
10-30 05:54:39.484 14669-15365/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 817: Landroid/media/MediaCodecInfo$CodecCapabilities;.getAudioCapabilities ()Landroid/media/MediaCodecInfo$AudioCapabilities;
10-30 05:54:39.484 14669-15365/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x000d
10-30 05:54:39.484 14669-15365/hci.com.iptv I/dalvikvm: Could not find method android.media.MediaCodecInfo$CodecCapabilities.getVideoCapabilities, referenced from method com.google.android.exoplayer2.mediacodec.MediaCodecInfo.isVideoSizeAndRateSupportedV21
10-30 05:54:39.484 14669-15365/hci.com.iptv W/dalvikvm: VFY: unable to resolve virtual method 818: Landroid/media/MediaCodecInfo$CodecCapabilities;.getVideoCapabilities ()Landroid/media/MediaCodecInfo$VideoCapabilities;
10-30 05:54:39.484 14669-15365/hci.com.iptv D/dalvikvm: VFY: replacing opcode 0x6e at 0x000d
非常感谢任何输入。