mediarecoder启动失败-19使用libstreaming android与sony z series

时间:2015-07-20 04:19:10

标签: android h.264 rtsp live-streaming

我在sony z和wowza流媒体服务器上使用 libstreaming android 使用mediarecoder启动实时流式传输时出现错误。

  

07-20 10:49:37.832:E / MediaRecorder(6752):开始失败:-19   ConfNotSupportedException

当我改变视频的帧速率时(15 30),抛出此错误。如果我设置fps = 15或fps = 30,则不会抛出此错误。这个错误只在sony z设备上,在一些不同的设备上是三星,Htc,Nexus都没有。

我下载了Wowza Gocoder应用程序以测试此错误是否仅适用于sony z。而且,我可以将fps从15改为60而没有任何错误。所以,我想 libstreaming 库存在问题。

我的配置代码:

// Configures the SessionBuilder
mSession = SessionBuilder.getInstance()
        .setContext(getApplicationContext())
        .setAudioEncoder(SessionBuilder.AUDIO_AAC)
        .setAudioQuality(new AudioQuality(8000, 16000))
        .setVideoEncoder(SessionBuilder.VIDEO_H264)
        .setSurfaceView(mSurfaceView).setPreviewOrientation(0)
        .setCallback(this).build();

// Configures the RTSP client
mClient = new RtspClient();
mClient.setSession(mSession);
mClient.setCallback(this);

// Use this to force streaming with the MediaRecorder API
mSession.getVideoTrack().setStreamingMethod(
        MediaStream.MODE_MEDIARECORDER_API);

以下代码开始流:

    protected void encodeWithMediaRecorder() throws IOException, ConfNotSupportedException {

        Log.d(TAG,"Video encoded using the MediaRecorder API");

        // We need a local socket to forward data output by the camera to the packetizer
        createSockets();

        // Reopens the camera if needed
        destroyCamera();
        createCamera();

        // The camera must be unlocked before the MediaRecorder can use it
        unlockCamera();

        try {
            mMediaRecorder = new MediaRecorder();
            mMediaRecorder.setCamera(mCamera);
            mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
            mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            mMediaRecorder.setVideoEncoder(mVideoEncoder);
            mMediaRecorder.setPreviewDisplay(mSurfaceView.getHolder().getSurface());
            mMediaRecorder.setVideoSize(mRequestedQuality.resX,mRequestedQuality.resY);
            mMediaRecorder.setVideoFrameRate(mRequestedQuality.framerate);

            // The bandwidth actually consumed is often above what was requested 
            mMediaRecorder.setVideoEncodingBitRate((int)(mRequestedQuality.bitrate*0.8));

            // We write the output of the camera in a local socket instead of a file !          
            // This one little trick makes streaming feasible quiet simply: data from the camera
            // can then be manipulated at the other end of the socket
            FileDescriptor fd = null;
            if (sPipeApi == PIPE_API_PFD) {
                fd = mParcelWrite.getFileDescriptor();
            } else  {
                fd = mSender.getFileDescriptor();
            }
            mMediaRecorder.setOutputFile(fd);

            mMediaRecorder.prepare();
            mMediaRecorder.start();

        } catch (Exception e) {
            throw new ConfNotSupportedException(e.getMessage());
        }

有人有想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

评论

mMediaRecorder.setVideoFrameRate(mRequestedQuality.framerate);

解决了我的问题。