安卓手机录屏录音应用 为什么录音去掉不行 有没有其他办法可以去掉

如何用 Android 手机完美录屏?收下这份「录屏 + 直播」全面指南
好几年前,手机的性能还不像现在这样「过剩」。录屏一般只是用来办公,或者极少部分玩家用于游戏视频的保存「Android 4.0 以下的手机边录屏边玩游戏那叫一个酸爽」,录屏分辨率和码率连差强人意都说不上。
随着近三年来手游的迅速普及加上已经不是瓶颈的手机性能,越来越多的手机游戏用户也开始从分享图片文字转变为分享自己各种「超神时刻」的精彩小视频,又或者使用自己的手机直播 XX 荣耀,阴 X 师,球球大 XX 等手游,靠着这些游戏成为知名大主播的人也不在少数。
某荣耀主播 手机录屏的大问题
虽然现在有无数人正在使用手机直播,但是手机录屏和直播有一个很奇怪的问题。不像模拟信号时代的烧录和电脑录屏一般都是包含音频原始输出的,手机上,无论是 Android 还是 iOS 都不支持获取系统原始输出的音频,也就是我们常说的「内录」(通过麦克风捕捉声音叫外录)。
对此苹果给出的说法是防止一些恶意 App 通过内录来窃取通话录音,而 Google 的解释则是为了保护唱片协会的利益。不管怎么样,内录不是一个可有可无的功能,它能实实在在影响到录屏和直播最终效果。
看看有多少手游主播用外录直播玩游戏时声音忽大忽小(放技能的时候手会盖住麦克风);为了能录到游戏音效,即使是在宿舍或者车上直播也不能带耳机,声音,游戏音效和背景噪音混在一起,还是收音机音质。
最重要的是,想要加点背景音乐还要用音响播放,那效果简直了……再说即使不直播,你也不想回看自己超神时刻的时候伴随着汽车鸣笛、咳嗽、狗叫、沙沙沙的背景噪声吧。
为了解决内录录屏和直播的问题,今天我就给大家推荐两款好用的支持内录的录屏 App 和一个直播 App。顺便给大家送上两个小教程,解决两个大家用手机录屏和直播时常见的难题。
Android 7.0 以下录屏:SCR Screen Recorder Pro
SCR Screen Recorder Pro 可以说是 Android 7.0 之前唯一支持内录的录屏应用了。
视频设置上,除了常用的分辨率和帧率调节,它还支持码率「决定同样分辨率下的画面丰富程度,越大越好」,方向和影片速度调节。为了提高录屏性能,它还支持自定义编码器(H264 和 MPEG-4),自定义通过 CPU,GPU 还是软件特有的 GPU+ 来处理屏幕图像。至于显示前置摄像头画面和触摸操作等功能大家都有,就不详细说了。咋们直接上重点!
SCR Screen Recorder Pro 支持内置音源 + 麦克风同时作为音频来源,最高支持内录 48kHz 的立体声并且支持麦克风增益,给你最好的音质。「理所当然的,内录功能需要 root,没有 root 的同学可以散了」,最难得的是,它在录制内置音源和麦克风的同时你自己也能听到正在录制的声音,看完下面的 App 推荐你就知道为什么说它非常难得了。
虽然 SCR Screen Recorder Pro 支持内录让它鹤立鸡群,但是同时也树大招风。传说它的做法遭到了 Google 的封杀,从 Google Play 上永久下架,到底因为什么原因我们无从得知,不过从 1.0.5 版本添加了 Android 6.0 支持之后,官方就停止了对它的支持,在 Android 7.0+ 的设备上打开 SCR Screen Recorder Pro 会显示「该软件不支持您的系统版本」。
对于用着 Android 6.0 以下系统的同学来讲,SCR Screen Recorder Pro 绝对是一个完美的录屏解决方案。
PS:SCR Screen Recorder Pro 在网上有很多被加料的所谓修改 / 破解版,想要下载的同学可以从 它的官网 上的 slow mirror 下载原版。
Android 7.0 以上录屏:屏幕录像+
SCR Screen Recorder Pro 被封杀了,内录录屏的需求依然在。既然不能上 Google Play 那就干脆不上了。这不酷安的开发者 Tornaco 就给我们带来了 Android 7.0 以上可用的开源内录录屏 App —— 屏幕录像+。
屏幕录像+ 是它的普通录屏 App 兄弟「屏幕录像」的高级版,作为录屏 App 常见的设置它一个不落。除此之外通过 root、Xposed(即将支持)、Magisk(需要在酷安评论区自行下载) 三种模式安装一个音频框架,安装完毕之后即可在录屏时将系统的媒体通道转移到录制通道上实现内录。也是因为这个原理,某些机型可能在录屏的时候听不到声音「实际已经录下来了」。
屏幕录像+ 官方说明只能在 AOSP 系的 ROM 上使用(谷歌官方、魔趣、SudaMod 等),各位国产 ROM 的同学建议做好准备再来尝试。
顺便说一下,Google Play 上有个同类的 APP —— RecMe(这个怎么没被封杀……),不过试用之后发现它的内录同样是在录屏时听不到声音的,然后界面上屏幕录像+ 更胜一筹,所以没有推荐 RecMe。这个 App 倒没有说明哪些 ROM 可以使用,用着国产 ROM 的同学可以自己去 Google Play 下载试用一下。
附录教程一:录制禁止录制的屏幕内容
有一些 App 上的特定内容是不允许我们截图和录制的,比如 XXXXHUB、XXXED、各种银行客户端还有各种阅后即焚的图片和消息(支付宝、TG、某 Q 闪照等)。除了又土又笨效果还很差的治颈椎拍屏幕大法难道就没有一个优雅又简单的方法了吗?答案是有的,那就是一个 Xposed 插件 —— disableflagsecure(启用截图)。
如果你还不知道什么是 Xposed,可以看看我之前的文章 &
一般 App 禁止截图的方法都是使用 Android 系统 API 来将某个界面的截图权限关掉,disableflagsecure 能在系统层面使这个 API 无效。它并没有提供用户界面,下载安装然后在 Xposed 管理器启用重启即可生效,接下来就是为所欲为的时间啦。
PS:它可以让你突破软件限制,但是有些社交 App 会将截图提示发给对方,这个它就无能为力了,由此模块产生的各种纠纷和法律问题也要自己负责的哦。
附录教程二:手游完美直播教程
上面推荐的 App 都是用来录屏的,那么手游直播怎么办呢?当然,以哔哩哔哩直播为例,你可以粗暴的直接打开哔哩哔哩客户端关掉麦克风开始直播,让观众看默剧。也可以直接用麦克风让观众享受 FM 收音音质。注意观众感受,追求完美的你肯定不会这么干的,这个时候就需要用到俺提供的方法了。
完美版:借助电脑直播 需要工具:路由器,一台 Win10 电脑,哔哩哔哩直播姬(以哔哩哔哩直播为例)。
首先保证手机和电脑连到了同一个 Wifi,然后:
打开 Windows 设置。
点击「系统」。
点击「投影到这台电脑」。
在选项界面,第一个选项选择「所有位置都可用」,当然「在安全的网络中随处可用」也是个不错的选择。
在手机上选择无线投射,不同的 ROM 选项位置也不一样。原生及原生改动的 ROM 是在设置——显示——投射里面(记得勾选右上角选项里面的「开启无线显示」);MIUI 是在设置——更多连接方式——无线显示里面;华为 EMUI 是在设置——进阶设置——多重屏幕里面(繁体中文系统,简体中文可能不一样)。
在无线投射里面选择你的电脑连接,电脑上会出现一个几乎毫无延迟地显示手机画面的窗口。之后用哔哩哔哩直播姬登录你的哔哩哔哩账号直播即可。
这种方法可以说是最完美了,哔哩哔哩直播姬可以支持窗口直播,这样直播的时候可以在屏幕上再开个小窗口看弹幕和礼物,放背景音乐也可以直接用电脑放,和直播电脑游戏没啥区别,这就不用考虑内录的问题,这也是现在大部分主播的做法。
缺点是要有台电脑,而且路由器需要好一点的(因为同时需要串流和推流,最好是千兆路由以上)。
便携版:手机也能完美直播
有的同学可能还没有电脑或者用不了电脑(学习要紧哦),有的派友可能需要在各种室外场合上开游戏或者带背景音乐的个人直播,这种情况下只能录制麦克风吗?不!接下来这个方法只需要手机就可以轻松内录录屏直播。
要做到这点我们需要借助 Screen Stream Mirroring 这款 App,它提供了各种串流的方法,从本地的浏览器,媒体播放器,chromecast 等,到网络的 twitch,youtube 直播,facebook直播等都可以串流。最重要的还是它支持内录,支持内录(重要的事情说两遍)!下面还是以哔哩哔哩直播为例,介绍下如何用它来直播手游。
安装 Screen Stream Mirroring,打开偏好设置——音频偏好设置,按照提示安装 Internal Audio Plugin。
打开 Internal Audio Plugin,点击唯一一个按钮启用它。(需要 ROOT 权限)
重启手机,在音频偏好的设置里面可以选择「内部」或者「混音(麦克风和内部音频)[需要ROOT]」。
打开你的哔哩哔哩直播间,在右上角获取 rtmp 直播地址和串流密钥 key。
在 Screen Stream Mirroring 的偏好设置——串流偏好设置里面填写你的直播网址和串流密钥,顺便还可以设置下倒计时。
在抽屉的网络直播里面选择其他服务器,点击开始镜像传输,就又可以为所欲为啦。
PS:由于它和 RecMe 是同一间公司出品的,所以一样有在某些机型上自己听不到声音的尿性(还是不影响正常直播声音,就自己听不到……)
从人类发明了可以显示内容的设备的那一刻开始,获取各种显示设备输出的内容然后保存或者重放就一直是永恒不变的刚需。在磁带时代,人们通过通过烧录的方式保存不想错过的直播电视节目。在模拟信号时代,可以通过添加中继视频录制卡来拦截保存 S 端子,VGA 等端口的输出。
数字信号和互联网的繁荣发展大大简化了过去获取显示内容的步骤,只需要软件层面即可保存屏幕上所显示的一切。80 年代的通信专家肯定想不到,21世纪的普通人就可以在一台只有 5.5 寸的轻薄移动设备上实时传输 1080p 分辨率的画面。
今天推荐了几款 App 和写了两个小教程,希望能帮到喜欢录制和分享游戏小视频的派友,还有正在或即将用手机直播的派友。
如果你对这篇文章有任何疑问建议,又或者有关于录屏同直播方面的问题(手机电脑都可以),欢迎关注我的少数派和酷安「id:fairyex」后在评论区留言,私信我也是 OK 的哦。
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
帮你善用数字产品提升效率的神奇网站
让你的优质内容变成现金价值的内容社区
今日搜狐热点Android录音实现——使用AtudioRecord
最近在做android中录音录屏的功能,以前也是从未接触多媒体这块,然后从不会到一点点的摸索,参考大神们的代码,到现在算是入门了,今天就总结一下android中的录音部分,后面总结录屏。
在android中实现录音共有三种方式:
通过意图捕获音频。这是android中最简单的一种方式,就是通过一个意图利用已有的、提供录制功能的应用程序。android中都会再带一个录音程序,我们可以通过意图来调用这个录音程序,从而实现录音功能。MediaRecorder类实现录音。MediaRecorder类是android中用来捕获音频和视频的多媒体类,通过这种方式录制音频也是比较简单的。通过设置音频源,输出格式,设置音频编解码器进行编解码,最后将音频输出到文件中。AudioRecord录制原始音频。这种方式相对于前两种比较麻烦,需要我们自己处理的事情较多,因此也是最灵活的。AudioRecord允许访问原始音频流,这种音频流是不能直接进行播放的,需要使用AudioTrack来进行播放原始音频。如果要使用这种方式来将音频保存到文件中,并可像MP3文件一样直接打开的话,就需要对原始音频进行编解码,然后用混合器(Muxer)进行输出到文件中。
我所用到的是第三种方式来实现录音的,因为我需要将音频添加到视频中去,因此得选用第三中最灵活的方式。
使用AudioRecord录制音频并不难,但是要将原始音频进行编码并输出到一个可播放的文件中就有点麻烦。先说说实现这个功能的大概思路:我们需要两个任务,一个任务用来进行采集音频数据,在采集音频数据的同时将音频数据不断的发送给编码的任务,将这些数据按照指定格式进行编码,然后输出到文件中。
使用AudioRecord捕获原始音频流。采集工作很简单,我们只需要构造一个AudioRecord对象,然后传入各种不同配置的参数即可。
1.音频源:我们可以使用麦克风作为采集音频的数据源。
2.采样率:一秒钟对声音数据的采样次数,采样率越高,音质越好。
3.音频通道:单声道,双声道等,
4.音频格式:一般选用PCM格式,即原始的音频样本。
5.缓冲区大小:音频数据写入缓冲区的总数,可以通过AudioRecord.getMinBufferSize获取最小的缓冲区。(将音频采集到缓冲区中然后再从缓冲区中读取)。
package com.creativeboy.audioandvideocapture.
import android.media.AudioF
import android.media.AudioR
import android.media.MediaC
import android.media.MediaCodecI
import android.media.MediaF
import android.media.MediaM
import android.media.MediaR
import android.os.E
import android.util.L
import java.io.BufferedOutputS
import java.io.DataOutputS
import java.io.F
import java.io.FileNotFoundE
import java.io.FileOutputS
import java.io.IOE
import java.nio.ByteB
import java.util.concurrent.atomic.AtomicB
* Created by heshaokang on .
public class AudioRecorder {
private static final String TAG = &AudioRecorder&;
private static final int SAMPLE_RATE = 44100; //采样率(CD音质)
private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO; //音频通道(单声道)
private static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT; //音频格式
private static final int AUDIO_SOURCE = MediaRecorder.AudioSource.MIC;
//音频源(麦克风)
private static boolean is_recording =
public static File recordF
private AudioEncoder audioE
private static AudioR
private RecorderTask recorderTask = new RecorderTask();
private AudioRecorder(File file){
recordFile =
public static AudioRecorder getInstance(File file) {
return new AudioRecorder(file);
public void setAudioEncoder(AudioEncoder audioEncoder) {
this.audioEncoder = audioE
public void startAudioRecording() {
new Thread(recorderTask).start();
public void stopAudioRecording() {
is_recording =
class RecorderTask implements Runnable {
int bufferReadResult = 0;
public int samples_per_frame = 2048;
public void run() {
long audioPresentationTimeNs; //音频时间戳 pts
//获取最小缓冲区大小
int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE,CHANNEL_CONFIG,AUDIO_FORMAT);
AudioRecord audioRecord = new AudioRecord(
AUDIO_SOURCE,
SAMPLE_RATE,
CHANNEL_CONFIG,
//音频通道
AUDIO_FORMAT,
//音频格式
bufferSizeInBytes //缓冲区
audioRecord.startRecording();
is_recording =
Log.v(TAG, &recordFile.getAbsolutepath---& + recordFile.getAbsolutePath());
while(is_recording) {
byte[] buffer = new byte[samples_per_frame];
audioPresentationTimeNs = System.nanoTime();
//从缓冲区中读取数据,存入到buffer字节数组数组中
bufferReadResult = audioRecord.read(buffer,0,samples_per_frame);
//判断是否读取成功
if(bufferReadResult == AudioRecord.ERROR_BAD_VALUE || bufferReadResult == AudioRecord.ERROR_INVALID_OPERATION)
Log.e(TAG, &Read error&);
if(audioRecord!=null) {
audioEncoder.offerAudioEncoder(buffer,audioPresentationTimeNs);
if(audioRecord!=null) {
audioRecord.setRecordPositionUpdateListener(null);
audioRecord.stop();
audioRecord.release();
audioRecord =
使用MediaCodec进行音频编码.
MediaCodec是android的一个编解码类。将获取到的原始音频流先进行特定的解码,然后进行数据处理,再编码为指定的格式。具体可参考这篇博客:https://blog.csdn.net/mouse_1894/article/details/
MediaMuxer 这是一个混合器,用来将编码好的音频数据输出到文件。
package com.creativeboy.audioandvideocapture.
import android.media.MediaC
import android.media.MediaCodecI
import android.media.MediaF
import android.media.MediaM
import android.util.L
import java.io.IOE
import java.nio.ByteB
import java.util.concurrent.ExecutorS
import java.util.concurrent.E
* Created by heshaokang on .
对音频数据进行编码
public class AudioEncoder {
private static final String TAG = &AudioEncoder&;
private MediaCodec mAudioC
//音频编解码器
private MediaFormat mAudioF
private static final String AUDIO_MIME_TYPE = &audio/mp4a-latm&; //音频类型
private static final int SAMPLE_RATE = 44100; //采样率(CD音质)
private TrackIndex mAudioTrackIndex = new TrackIndex();
private MediaMuxer mMediaM
private boolean mMuxerStart = //混合器启动的标志
private MediaCodec.BufferInfo mAudioBufferI
private static long audioBytesReceived = 0;
//接收到的音频数据 用来设置录音起始时间的
private long audioStartT
private String recordF
private boolean eosReceived =
//终止录音的标志
private ExecutorService encodingService = Executors.newSingleThreadExecutor(); //序列化线程任务
//枚举值 一个用来标志编码 一个标志编码完成
enum EncoderTaskType {ENCODE_FRAME,FINALIZE_ENCODER};
public AudioEncoder() {
recordFile = AudioRecorder.recordFile.getAbsolutePath();
prepareEncoder();
class TrackIndex {
int index = 0;
public void prepareEncoder() {
eosReceived =
audioBytesReceived = 0;
mAudioBufferInfo = new MediaCodec.BufferInfo();
mAudioFormat = new MediaFormat();
mAudioFormat.setString(MediaFormat.KEY_MIME, AUDIO_MIME_TYPE);
mAudioFormat.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC);
mAudioFormat.setInteger(MediaFormat.KEY_SAMPLE_RATE,SAMPLE_RATE);
mAudioFormat.setInteger(MediaFormat.KEY_BIT_RATE, 128000);
mAudioFormat.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1);
mAudioFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE,16384);
mAudioCodec = MediaCodec.createEncoderByType(AUDIO_MIME_TYPE);
mAudioCodec.configure(mAudioFormat,null,null,MediaCodec.CONFIGURE_FLAG_ENCODE);
mAudioCodec.start();
mMediaMuxer = new MediaMuxer(recordFile,MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
} catch (IOException e) {
e.printStackTrace();
//此方法 由AudioRecorder任务调用 开启编码任务
public void offerAudioEncoder(byte[] input,long presentationTimeStampNs) {
if(!encodingService.isShutdown()) {
Log.d(TAG,&encodingService--submit&);
encodingService.submit(new AudioEncodeTask(this,input,presentationTimeStampNs));
//发送音频数据和时间进行编码
public void _offerAudioEncoder(byte[] input,long pts) {
if(audioBytesReceived==0) {
audioStartTime =
audioBytesReceived+=input.
drainEncoder(mAudioCodec,mAudioBufferInfo,mAudioTrackIndex,false);
ByteBuffer[] inputBuffers = mAudioCodec.getInputBuffers();
int inputBufferIndex = mAudioCodec.dequeueInputBuffer(-1);
Log.d(TAG,&inputBufferIndex--&+inputBufferIndex);
if(inputBufferIndex&=0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(input);
//录音时长
long presentationTimeUs = (pts - audioStartTime)/1000;
Log.d(&hsk&,&presentationTimeUs--&+presentationTimeUs);
if(eosReceived) {
mAudioCodec.queueInputBuffer(inputBufferIndex, 0, input.length, presentationTimeUs, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
closeEncoder(mAudioCodec, mAudioBufferInfo, mAudioTrackIndex);
closeMuxer();
encodingService.shutdown();
mAudioCodec.queueInputBuffer(inputBufferIndex,0,input.length,presentationTimeUs,0);
}catch (Throwable t) {
Log.e(TAG, &_offerAudioEncoder exception&);
public void drainEncoder(MediaCodec encoder,MediaCodec.BufferInfo bufferInfo,TrackIndex trackIndex ,boolean endOfStream) {
final int TIMEOUT_USEC = 100;
ByteBuffer[] encoderOutputBuffers = encoder.getOutputBuffers();
while(true) {
int encoderIndex = encoder.dequeueOutputBuffer(bufferInfo,TIMEOUT_USEC);
Log.d(&hsk&,&encoderIndex---&+encoderIndex);
if(encoderIndex==MediaCodec.INFO_TRY_AGAIN_LATER) {
//没有可进行混合的输出流数据 但还没有结束录音 此时退出循环
Log.d(TAG,&info_try_again_later&);
if(!endOfStream)
Log.d(TAG, &no output available, spinning to await EOS&);
}else if(encoderIndex== MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
//只会在第一次接收数据前 调用一次
if(mMuxerStart)
throw new RuntimeException(&format 在muxer启动后发生了改变&);
MediaFormat newFormat = encoder.getOutputFormat();
trackIndex.index = mMediaMuxer.addTrack(newFormat);
mMediaMuxer.start();
mMuxerStart =
}else if(encoderIndex&0) {
Log.w(TAG,&encoderIndex 非法&+encoderIndex);
ByteBuffer encodeData = encoderOutputBuffers[encoderIndex];
if (encodeData==null) {
throw new RuntimeException(&编码数据为空&);
if(bufferInfo.size!=0) {
if(!mMuxerStart) {
throw new RuntimeException(&混合器未开启&);
encodeData.position(bufferInfo.offset);
encodeData.limit(bufferInfo.offset + bufferInfo.size);
mMediaMuxer.writeSampleData(trackIndex.index,encodeData,bufferInfo);
encoder.releaseOutputBuffer(encoderIndex,false);
//退出循环
if((bufferInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM)!=0) {
* 关闭编码
* @param encoder
* @param bufferInfo
public void closeEncoder(MediaCodec encoder,MediaCodec.BufferInfo bufferInfo,TrackIndex trackIndex) {
drainEncoder(encoder,bufferInfo,trackIndex,true);
encoder.stop();
encoder.release();
* 关闭混合器
public void closeMuxer() {
mMediaMuxer.stop();
mMediaMuxer.release();
mMediaMuxer =
mMuxerStart =
//发送终止编码信息
public void stop() {
if(!encodingService.isShutdown()) {
encodingService.submit(new AudioEncodeTask(this,EncoderTaskType.FINALIZE_ENCODER));
//终止编码
public void _stop() {
eosReceived =
Log.d(TAG,&停止编码&);
* 音频编码任务
class AudioEncodeTask implements Runnable {
private static final String TAG = &AudioEncoderTask&;
private boolean is_initialized =
private AudioE
private byte[] audio_
private EncoderTaskT
//进行编码任务时 调用此构造方法
public AudioEncodeTask(AudioEncoder encoder,byte[] audio_data,long pts) {
this.encoder =
this.audio_data = audio_
this.pts =
is_initialized =
this.type = EncoderTaskType.ENCODE_FRAME;
//这里是有数据的
Log.d(TAG,&AudioData--&+audio_data);
Log.d(TAG,&pts--&+pts);
//当要停止编码任务时 调用此构造方法
public AudioEncodeTask(AudioEncoder encoder,EncoderTaskType type) {
this.type =
if(type==EncoderTaskType.FINALIZE_ENCODER) {
this.encoder =
is_initialized =
Log.d(TAG,&完成...&);
private void encodeFrame() {
Log.d(TAG,&audio_data---encoder--&+audio_data+& &+encoder);
if(audio_data!=null && encoder!=null) {
encoder._offerAudioEncoder(audio_data,pts);
audio_data =
//终止编码
private void finalizeEncoder() {
encoder._stop();
public void run() {
Log.d(TAG,&is_initialized--&+is_initialized);
if(is_initialized) {
switch(type) {
case ENCODE_FRAME:
//进行编码
encodeFrame();
case FINALIZE_ENCODER:
//完成编码
finalizeEncoder();
is_initialized =
//打印错误日志
Log.e(TAG,&AudioEncoderTask is not initiallized&);
具体代码下载:https://github.com/hsk256/RecordAudioAndVideo更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
按住视频可进行拖动
&正在加载...
收藏成功,可进入查看所有收藏列表
把视频贴到Blog或BBS
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
方式1:用手机看
用爱奇艺APP或微信扫一扫,在手机上继续观看
当前播放时间:
方式2:一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接//71.am/udn
下载安装包到本机:&&
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:&&
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
正在检测客户端...
您尚未安装客户端,正在为您下载...安装完成后点击按钮即可下载
30秒后自动关闭
安卓手机大 PK:「录屏」到底哪家强?
请选择打赏金额:
播放量12.7万
播放量数据:快去看看谁在和你一起看视频吧~
更多数据:
Copyright (C) 2018
All Rights Reserved
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
正在为您下载爱奇艺客户端安装后即可快速下载海量视频
正在为您下载爱奇艺客户端安装后即可免费观看1080P视频
&li data-elem="tabtitle" data-seq="{{seq}}"&
&a href="javascript:void(0);"&
&span>{{start}}-{{end}}&/span&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"&
&a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《》剧集:
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制}

我要回帖

更多关于 录屏录音 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信