我正在尝试用我的AutoHotkey应用程序播放24位音频文件.它只使用SoundPlay.Windows 7没有问题,但Windows XP用户无法播放24位文件.
该文件说:
所有Windows操作系统都应该能够播放.wav文件.但是,如果操作系统上未安装正确的编解码器或功能,则其他文件(.mp3,.avi等)可能无法播放.
文章中提到的可能的修复方法如何在Windows Media Player中播放24位WAV文件正在修复Windows Media Player的问题,但不适用于autohotkey:
分步指南
预期行为:Windows Media Player和AutoHotkey应用程序中的音频文件回放没有错误.实际行为:仅在Windows Media Player中播放没有错误的音频文件,并且不在Windows XP下的AutoHotkey应用程序中播放.
进一步的调查
正如AutoHotKey论坛中所提到的,SoundPlay在底层使用mciSendString,可以通过直接调用来获取有关错误性质的更多信息.
使用mciSendString替代DLL调用我得到错误消息320,它对应于MCIERR_WAVE_OUTPUTSINUSE
所有可以播放当前格式文件的波形设备都在使用中.等到其中一个设备空闲; 然后,再试一次.
如何在AutoHotkey应用程序中在Windows XP中播放24位音频文件?
基于SoundPlay的测试应用(下载)
#NoEnv
SetWorkingDir %A_ScriptDir%
FileSelectFile, f
SoundPlay, %f%
Msgbox, You should hear audio - except for 24bit wave files under Windows XP.
Run Code Online (Sandbox Code Playgroud)
基于MCI的测试应用程序(下载)
#NoEnv
SetWorkingDir %A_ScriptDir%
FileSelectFile, f …Run Code Online (Sandbox Code Playgroud) 在尝试修复简单的视频录制应用程序*时,我遇到了一些问题.我想我正确地遵循了一系列步骤.以下是对我提出问题的代码部分的简化.按下按钮后,此代码仅作为回调执行:
if ( mRecorder != null){
mRecorder.reset();
mRecorder.release();
}
mRecorder = new MediaRecorder();
if(mViewer.hasSurface){
mRecorder.setPreviewDisplay(mViewer.holder.getSurface());
Log.d(TAG,"Surface has been set");
}
try {
Log.d(TAG,"Sleeping for 4000 mili");
Thread.sleep(4000);
Log.d(TAG,"Waking up");
} catch (InterruptedException e) {
Log.e(TAG,"InterruptedException");
e.printStackTrace();
}
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setVideoFrameRate(12);
mRecorder.setVideoSize(176, 144);
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setMaxDuration(MAX_DURATION_TEST);
String targetFile = "/sdcard/webcamera/temp.mp4";
File localFile = new File(targetFile);
if(localFile.exists()){
Log.d(TAG,"Local file exists");
}else{
Log.d(TAG,"Local file does not exist");
}
mRecorder.setOutputFile(targetFile);
try {
mRecorder.prepare();
bPrepared = true;
Log.i(TAG,"prepared");
return;
} catch (IllegalStateException e) { …Run Code Online (Sandbox Code Playgroud) 我正在尝试从解码的mp4缓冲区获取PCM样本以进行进一步处理.我首先从用手机的相机应用程序记录的视频文件中提取音轨,当我收到'audio/mp4'mime键时,我确保选择了音轨:
MediaExtractor extractor = new MediaExtractor();
try {
extractor.setDataSource(fileUri.getPath());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int numTracks = extractor.getTrackCount();
for(int i =0; i<numTracks; ++i) {
MediaFormat format = extractor.getTrackFormat(i);
String mime = format.getString(MediaFormat.KEY_MIME);
//Log.d("mime =",mime);
if(mime.startsWith("audio/")) {
extractor.selectTrack(i);
decoder = MediaCodec.createDecoderByType(mime);
decoder.configure(format, null, null, 0);
//getSampleCryptoInfo(MediaCodec.CryptoInfo info)
break;
}
}
if (decoder == null) {
Log.e("DecodeActivity", "Can't find audio info!");
return;
}
decoder.start();
Run Code Online (Sandbox Code Playgroud)
之后,我遍历轨道,向编解码器提供编码访问单元流,并将解码后的访问单元拉入ByteBuffer(这是我从此处发布的视频呈现示例中回收的代码https://github.com/vecio/MediaCodecDemo):
ByteBuffer[] inputBuffers = decoder.getInputBuffers();
ByteBuffer[] outputBuffers = decoder.getOutputBuffers(); …Run Code Online (Sandbox Code Playgroud) 当我尝试运行图像资产没有正确加载时,我得到一个例外:
抛出以下断言解析图像编解码器:无法加载资产:/ images/p8.png`
几周前它正在运作,现在它停止了.我试图从不同的PC和Mac运行(使用模拟器),但仍然无法加载图像.而是正确加载字体.
这是我加载图像的方式,它们是在里面呈现的,GridView
下面是代码:
return new Expanded(
child: new GridView.count(
crossAxisCount: 2,
padding: const EdgeInsets.fromLTRB(16.0, 25.0, 16.0, 4.0),
children: <Widget>[
new MaterialButton(
onPressed: () {
Navigator.of(context).pushNamed('/biliardo');
},
child: new Column(
children: <Widget>[
new Image(
//parte importante, definire gli asset per trovarli più velocemnte
//si inseriscono nel pubspec.yaml
image: new AssetImage('/images/p8.png'),
height: 100.0,
width: 100.0,
),
new Text(
"BILIARDO",
style: new TextStyle(
color: (darkTheme) ? Colors.blue : Colors.black,
),
)
],
),
),
.....
);
Run Code Online (Sandbox Code Playgroud)
pubsec.yaml文件代码:
flutter:
uses-material-design: …Run Code Online (Sandbox Code Playgroud) 我想确切地知道我可以传递哪些字符串codec,VideoEncoder.isConfigSupported({ codec, width, height })但到目前为止我还没有找到明确的答案:
vp8是一个有效的编解码器字符串由于目前只有基于 chromium 的浏览器支持此功能,因此我决定查找 chromium 源代码,并发现列出了更多编解码器字符串的位置:
TEST.run层触发的,而不是从那里触发的,在这个 python 文件中,上面提到了更多的编解码器字符串:avc1.42001E,,vp8vp09.00.10.08video, h264, vp8, hevc, vp9 …有没有办法从Android上的一系列图像创建视频?也许是一种扩展MediaRecorder并能够将图像作为输入的方法.
我尝试真正创建视频并存储它(例如,作为mpeg4文件).
谢谢你的任何建议.
堆栈溢出有几个类似的问题,但我无法解决这个问题.
我想获得fourccFFMpeg可以解码的avi编解码器的列表.
我知道如何获取所有格式ffmpeg -formats和编解码器,ffmpeg -codecs但两个列表都没有给我一个可访问的列表fourccs.我也找不到文件.
我需要这个名单,让我的应用程序可以访问fourcc一个的avi文件,并确定是否使用ffmpeg或VfW(或DirectX)尝试解码的文件.
有一些ffmpeg命令能给我这个清单吗?
最近发布的OPUS Audio编解码器(libopus?)是否可以编译为在移动设备上运行(阅读iPhone/Android)?
我已经搜索并得出结论,te文档声明它在ARM设备上运行,但在尝试编译库之后,它总是在交叉编译时失败.
我错了或者这次没有支持这样的设备吗?
这是我的第一个问题,如果我错过了什么,请告诉我!
使用Android API 16的新Media Codec实现来尝试解码视频,以便我可以发送要作为纹理应用的帧(纹理部分已经完成).所以我已经提出了以下代码,并在堆栈中提供了一些帮助,但在runOutputBuffer()我outputBufIndex回来的时候-1(或者我-1在超时时提供的无限循环中)任何人都可以帮助解决这个问题,并且/或者提供任何关于去哪里的建议从那里?
感谢您的帮助,这是我的代码:
public MediaDecoder( BPRenderView bpview )
{
surface = bpview;
extractor = new MediaExtractor( );
extractor.setDataSource( filePath );
format = extractor.getTrackFormat( 0 );
mime = format.getString( MediaFormat.KEY_MIME );
createDecoder( );
runInputBuffer( );
}
public void createDecoder( )
{
codec = MediaCodec.createDecoderByType( "video/avc" );
// format =extractor.getTrackFormat( 0 );
Log.d( LOG_TAG, "Track Format: " + mime );
// format.setInteger( MediaFormat.KEY_BIT_RATE, 125000 );
// format.setInteger( MediaFormat.KEY_FRAME_RATE, 15 );
// …Run Code Online (Sandbox Code Playgroud) 我正在开发一个平滑的60 FPS 1080p(全高清)视频传输应用程序,它以x264编码,通过LAN将编码数据发送到接收设备,接收设备然后使用OpenH264的解码器对其进行解码.我设法让它工作,它工作正常并且稳定,但我发现它非常慢(大约20 FPS而不是所需的60 FPS).
我做了大量测试,发现问题在于OpenH264解码器.
解码器使用我的i5-2500 @ 3.9Ghz的完整核心(总CPU使用率为25%),这太高了.尽管解码器是单线程的,但我在Media Player Classic上测试了原始数据,并且它的播放(60 FPS)仅占CPU使用率的0.3%.(将渲染引擎切换为"旧视频渲染"时,CPU使用率增加到12.8-14.4% - 请参阅注释)
所以我的问题是:我可以做些什么来加速解码过程以及我做错了什么?我无法想象OpenH264会如此缓慢.
以下是与解码器相关的所有C++代码:
ISVCDecoder *decoder;
SBufferInfo bufferInfo;
SDecodingParam decodingParam;
uint8_t** yuvData;
void init(int width, int height) {
WelsCreateDecoder(&decoder);
decodingParam = { 0 };
decodingParam.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_AVC;
decoder->Initialize(&decodingParam);
bufferInfo = { 0 };
yuvData = new uint8_t*[3];
yuvData[0] = new uint8_t[width*height];
yuvData[1] = new uint8_t[width*height / 4];
yuvData[2] = new uint8_t[width*height / 4];
}
bool …Run Code Online (Sandbox Code Playgroud) codec ×10
android ×4
audio ×3
h.264 ×2
image ×2
video ×2
autohotkey ×1
avi ×1
c++ ×1
dart ×1
decoding ×1
ffmpeg ×1
flutter ×1
javascript ×1
mci ×1
media ×1
openh264 ×1
performance ×1
voip ×1
windows-xp ×1