2013-07-26 42 views
1

我使用MediaRecorder記錄與在三星Galaxy Note 2.它初始化一個MPEG2TS容器視頻沒有任何錯誤,居然在文件中寫入數據(文件將增長到幾MB)。但是,該文件無法在任何媒體播放器中播放。的Android MediaRecorder產生不可再現MPEG2TS輸出

這裏是我的初始化MediaRecorder代碼:

CamcorderProfile profile = null; 
if(CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_720P)){ 
    profile = CamcorderProfile.get(CamcorderProfile.QUALITY_720P); 
}else if(CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_480P)){ 
    profile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P); 
}else{ profile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW); } 

myMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
myMediaRecorder.setOutputFormat(8); 
myMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
myMediaRecorder.setVideoFrameRate(profile.videoFrameRate); 
myMediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight); 
myMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate); 

String f = Environment.getExternalStorageDirectory().toString() + "/video.ts"; 
myMediaRecorder.setOutputFile(f); 
myMediaRecorder.setPreviewDisplay(previewHolder.getSurface()); 
myMediaRecorder.prepare(); 
myMediaRecorder.start(); 

上面的代碼工作得很好,當我設置輸出格式爲MP4( 「2」),而不是MPEG2-TS( 「8」),但當它設置爲8時,它會產生一個無法播放(但不是空的)視頻!

可能會發生什麼?

編輯:這裏的記錄設備上的sample video,如果任何人的興趣。

+0

你試圖打開的視頻文件與G點什麼一樣? –

+0

@DanielMošmondor是的,還有VLC和mplayer。 –

+0

gspot說什麼?無法識別?也許如果你上傳的地方,並使其可用於有人用更好的工具來看看...... –

回答

0

「任何媒體播放器」是一個錯誤的說法。我發現VLC無法播放MPEG2TS流,但ffplay能夠播放它們(ffplay video.ts)。要調試vlc,你可以增加詳細:

$ vlc -vvv video.ts 
... 
[0x7ffe34c01728] ts demux debug: eof ? 
[0x7ffe34c01728] ts demux warning: lost synchro 
[0x7ffe34c01728] ts demux debug: skipping 76 bytes of garbage 
[0x7ffe34c01728] ts demux debug: Force Seek Per Percent: Seeking failed at 10%. 
[0x7ffe34c01728] ts demux error: libdvbpsi (misc PSI): Bad CRC_32 table 0x0 !!! 
[0x7ffe34c01728] ts demux error: libdvbpsi (PAT decoder): invalid section (section_syntax_indicator == 0) 
[0x7ffe34c01728] ts demux error: libdvbpsi (PAT decoder): invalid section (section_syntax_indicator == 0) 
... 

對於那些想用這種格式流媒體誰,一定要降低它是用來檢測文件格式的初始探測緩衝區。 8K正常工作對我來說:

nc -l -p 1337 | ffplay -probesize 8192 - 

或者如果流不正確關閉:

socat TCP-LISTEN:1337,fork,reuseaddr SYSTEM:'killall ffplay; ffplay -probesize 8192 -' 
0

從Android的文檔說MPEG_2_TS需要API級別26

https://developer.android.com/reference/android/media/MediaRecorder.OutputFormat.html#MPEG_2_TS

可能爲什麼你的視頻不能播放。截至您問的時候,MPEG_2_TS不正式支持

+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/17482608) –

+0

我其實也是。鏈接提到MPEG_2_TS需要我說的API級別26。 –