我在播放存储在原始资源中的mp3文件时遇到了问题:当文件首次开始播放时,它可能会生成四分之一秒的声音,然后重新启动.(我知道这基本上是这里描述的问题的重复,但是那里提供的解决方案对我来说没有用.)我已经尝试了几个方面并且在这个问题上取得了一些进展,但它并没有完全修复.
这是我设置播放文件的方式:
mPlayer.reset();
try {
AssetFileDescriptor afd = getResources().openRawResourceFd(mAudioId);
if (afd == null) {
Toast.makeText(mOwner, "Could not load sound.",
Toast.LENGTH_LONG).show();
return;
}
mPlayer.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
afd.close();
mPlayer.prepare();
} catch (Exception e) {
Log.d(LOG_TAG, "Could not load sound.", e);
Toast.makeText(mOwner, "Could not load sound.", Toast.LENGTH_LONG)
.show();
}
Run Code Online (Sandbox Code Playgroud)
如果我退出活动(调用mPlayer.release())并返回它(创建一个新的MediaPlayer),口吃通常(但不总是)消失 - 只要我加载相同的声音文件.我尝试了几件没有任何区别的事情:
MediaPlayer.create(getContext(), mAudioId),并跳到调用setDataSource(...)和prepare().然后我注意到LogCat总是在播放开始时显示这一行:
DEBUG/AudioSink(37): bufferCount (4) is too small and increased to 12
Run Code Online (Sandbox Code Playgroud)
它让我想知道口吃是否是由于明显的重新缓解.这导致我尝试别的东西:
prepare(),拨打电话mPlayer.start()并立即拨打电话 …我是Android编程的新手并且发现自己陷入困境我一直在研究各种方法从手机到手机直播视频直播,似乎主要是功能性的,当然除了最重要的部分:播放流.它似乎是从一部手机发送流,但第二部手机无法播放流.
这是播放方的代码
public class VideoPlayback extends Activity implements Callback {
MediaPlayer mp;
private SurfaceView mPreview;
private SurfaceHolder holder;
private TextView mTextview;
public static final int SERVERPORT = 6775;
public static String SERVERIP="192.168.1.126";
Socket clientSocket;
private Handler handler = new Handler();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mPreview = (SurfaceView) findViewById(R.id.surfaceView1);
mTextview = (TextView) findViewById(R.id.textView1);
holder = mPreview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mTextview.setText("Attempting to connect");
mp = new MediaPlayer();
Thread t = …Run Code Online (Sandbox Code Playgroud) android file-descriptor video-streaming media-player live-streaming
常规应用程序开发人员有什么机会(我的意思是,你不是一个百万美元的内容制作公司或分销渠道提供商,而是一个普通的小型应用程序开发公司)来保护应用程序的视频/音频内容不被保存/分散式.我提到了"常规开发者",因为我在Android核心代码中已经看到索尼在DRM包中添加了一些代码部分.让我们假设我们与谷歌谈论将其包含在核心代码中并不是那么强大.
是否有任何真正安全的方法来保护Android上的视频/音频(作为应用程序的一部分).
假设(如果我错了,请纠正我):
我已经研究过这个主题了很多,搜索了很多,希望在这里完成所有相关的问题,我已经和一个DRM提供商(这是一个很小的公司或自由开发者很难联系,或至少获得一些真实的相关信息,技术文档和细节).
我将DRM视为一种方法,但"默默无闻"似乎并不是一种非常好的方法.此外,我还没有为常规开发人员找到任何信息或真正的解决方案/ API.
公钥加密是另一个想法,但在哪里真正安全地存储私钥?此外,我假设在这种情况下,需要重写整个媒体框架和播放器,以便将安全视频流传递给播放器.还是我弄错了?
我希望得到该领域其他经验丰富的开发人员的一些意见,因为很难在任何地方找到有关Android媒体内容保护的信息.
更新:
在我的问题的上下文中,我发现了这个问题并且它的更新很有趣:流式传输到Android MediaPlayer