我正在研究一个mp4容器解析器,但是我疯狂地试图识别流的音频编解码器.我使用了QtAtomViewer和AtomicParsley,但是当我找到原子时:
trak-> mdia-> minf-> stbl-> STSD
即使mp4文件有mp3流,我也总是"mp4a".
我应该找一个".mp3"fourcc吗?
我附加了两个不同的mp4结构:带有AAC音频流的mp4容器
Atom trak @ 716882 of size: 2960, ends @ 719842
Atom tkhd @ 716890 of size: 92, ends @ 716982
Atom mdia @ 716982 of size: 2860, ends @ 719842
Atom mdhd @ 716990 of size: 32, ends @ 717022
Atom hdlr @ 717022 of size: 33, ends @ 717055
Atom minf @ 717055 of size: 2787, ends @ 719842
Atom dinf @ 717063 of size: 36, ends @ 717099
Atom …Run Code Online (Sandbox Code Playgroud) 默认情况下,Android不支持许多媒体文件格式(如.mkv等文件).但是像MXPlayer和MoboPlayer这样的玩家可以让你播放这些文件.这些应用程序如何工作?是否有任何编程教程或文章解释它是如何完成的?
我正在寻找有关访问者成功传输1 Mbps 640x360 H.264编码视频所需的最低要求的更多信息.我知道用户需要最新的Flash 9版本.我正在寻找他们的计算机的最低要求.
我们希望为我们的视频切换到此编解码器,但不要为计算机速度较慢的人破坏我们的网站.问题是:速度有多慢?我们会疏远1%,5%,50%吗?我真的不知道.
我发现的最佳信息是微软网站上关于720p播放的要求:http://www.microsoft.com/windows/windowsmedia/content_provider/film/ChoosingPC.aspx
这里的区别在于真正的"高清"720p(!280x720)介于5-10 Mbps之间.我们的流量分辨率只有一半,只有1 Mbps.
任何进一步的信息将不胜感激.
我对这个问题感到非常难过.
我有一个大型的H.264 mp4视频文件库,我需要在iOS上播放.最初,我只针对iPad,但要求已经改变,现在我需要包括iPhone.但我注意到我的iPod Touch与我的iPad具有完全相同的操作系统版本和内置ID,将无法播放我在iPad上成功使用的相同文件.我已经与一位同事拥有相同版本和版本的iPhone和iPad确认了这一点.我在iPad模拟器中也看到过完全相同的行为,但直到现在我才认为它是模拟器的怪癖.现在我不太确定.
mp4使用以下设置进行编码:
AVC Coding 640x360, Millions
AAC, Stereo (L R), 44.100 kHz
29.97 fps
693.35kb/s
Run Code Online (Sandbox Code Playgroud)
我已经尝试从多个服务器甚至本地加载媒体,它似乎没有什么区别.
如果我将这些文件从QuickTime导出为m4v文件,它们可以在所有设备和模拟器上正常运行,所以我的直觉告诉我这是一个我缺少的编码器设置.
为了消除所有其他可能的因素,我尝试直接从Mobile Safari地址栏调用视频文件.我已经确认在以下匹配版本中发生了这种情况:
设备:
模拟器:
我已经浏览了iOS更新日志,寻找任何可能解释为什么视频解压缩器应该在一个版本而不是另一个版本上工作的东西,我找不到任何跳出来的东西.
任何人都有任何想法可以支持这个以及如何解决它?
我正在设计一款可以在iPhone和Android上录制短音频文件的应用程序,可以在两个平台上播放,也可以在任何其他智能手机上播放.
现在我正在使用*.caf和iLBC编解码器,因为我知道iPhone不编码mp3.
在这种情况下我应该使用文件格式/编解码器吗?
在Python中,使用与平台相关的换行符写入UTF-8编码文件的最佳方法是什么?理想情况下,该解决方案在Python 2中进行大量打印的程序中非常透明地工作.(有关Python 3的信息也很受欢迎!)
事实上,写入UTF-8文件的标准方式似乎是codecs.open('name.txt','w').但是,文档表明了这一点
(...)在读写时不会自动转换'\n'.
因为该文件实际上是以二进制模式打开的.那么,如何使用适当的平台相关换行符写入UTF-8文件?
注意:"t"模式似乎实际上是在Windows XP上使用Python 2.6完成工作(codecs.open('name.txt','wt')),但这是否有记录并保证可以正常工作?
我一直在尝试将.mov文件转换为.mp4文件一段时间,我认为这是正确的代码.
ffmpeg -i P1010989.MOV -vcodec copy -acodec copy out.mp4
Run Code Online (Sandbox Code Playgroud)
但这是我的输出
FFmpeg version 0.6.5, Copyright (c) 2000-2010 the FFmpeg developers
built on Jan 29 2012 23:55:02 with gcc 4.1.2 20080704 (Red Hat 4.1.2-51)
configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --incdir=/usr/include --disable-avisynth --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --enable-avfilter --enable-avfilter-lavf --enable-libdirac --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared --enable-swscale --enable-vdpau --enable-version3 --enable-x11grab
libavutil 50.15. 1 / 50.15. 1
libavcodec 52.72. 2 / …Run Code Online (Sandbox Code Playgroud) 如何使用ffmpeg将视频从H.264(高4:4:4配置文件)转换为H.264(主配置文件)?
我不能用这个命令做到这一点:ffmpeg -i 1/25359.mp4 -profile:v main out.mp4.
那会返回一个错误:
...
That'd return an error:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1/25359.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.40.101
Duration: 00:00:06.08, start: 0.000000, bitrate: 1059 kb/s
Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 351x297, 1057 kb/s, 12.50 fps, 12.50 tbr, 12800 tbn, 25 tbc (default)
Metadata:
handler_name : VideoHandler
No pixel format specified, yuv444p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility …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) 我想确切地知道我可以传递哪些字符串codec,VideoEncoder.isConfigSupported({ codec, width, height })但到目前为止我还没有找到明确的答案:
vp8是一个有效的编解码器字符串由于目前只有基于 chromium 的浏览器支持此功能,因此我决定查找 chromium 源代码,并发现列出了更多编解码器字符串的位置:
TEST.run层触发的,而不是从那里触发的,在这个 python 文件中,上面提到了更多的编解码器字符串:avc1.42001E,,vp8vp09.00.10.08video, h264, vp8, hevc, vp9 …