HTML5视频标记支持哪些编解码器?
它会因浏览器而异,还是会支持特定编解码器的规范?
我最初尝试过如何在Andoid exoplayer中播放原始NAL单元?但是我注意到我必须做一些低级别的事情.
我发现了这个简单的MediaCodec示例.正如您所看到的,它是一个在传递给它的表面上播放文件的线程.
注意这些线条
mExtractor = new MediaExtractor();
mExtractor.setDataSource(filePath);
Run Code Online (Sandbox Code Playgroud)
看起来我应该创建自己的MediaExtractor,而不是从文件中提取视频单元,它将使用我将提供的缓冲区中的h264 NAL单元.
然后我可以打电话mExtractor.setDataSource(MediaDataSource dataSource),看看MediaDataSource
它有 readAt(long position, byte[] buffer, int offset, int size)
这是它读取NAL单位的地方.但是,我应该如何通过它们?我没有关于需要读取的缓冲区结构的信息.
我应该通过byte[] buffer其中的NAL单位,如果是,以哪种格式?偏移量是多少?如果它是一个缓冲区,我不应该只删除读取的行,因此没有偏移或大小?
顺便说一下,h264 NAL单元是流媒体单元,它们来自RTP数据包,而不是文件.我将通过C++获取它们并将它们存储在缓冲区中,尝试传递给mediaExtractor.
更新:
我一直在阅读很多关于MediaCodec的内容,我想我更了解它.根据https://developer.android.com/reference/android/media/MediaCodec,一切都依赖于这种类型的东西:
MediaCodec codec = MediaCodec.createByCodecName(name);
MediaFormat mOutputFormat; // member variable
codec.setCallback(new MediaCodec.Callback() {
@Override
void onInputBufferAvailable(MediaCodec mc, int inputBufferId) {
ByteBuffer inputBuffer = codec.getInputBuffer(inputBufferId);
// fill inputBuffer with valid data
…
codec.queueInputBuffer(inputBufferId, …);
}
@Override
void onOutputBufferAvailable(MediaCodec mc, int …Run Code Online (Sandbox Code Playgroud) 主要玩家似乎是x264和xvid,两者都是GPL.这意味着我们无法将解码功能集成到回放应用程序中,而无需将整个事物作为GPL许可,因此我们也无法使用.
首选目标平台是Linux.任何非病毒开放许可证都没问题,我们非常乐意提供我们对库所做的任何更改的来源,而不是我们的整个应用程序.
有没有什么?或者我们现在应该在开发过程中使用GPL作为测试,并计划在发货之前用商业许可的编解码器替换它?
有没有办法向Android设备询问它支持的编码音频和视频编解码器?
我发现设备不支持http://developer.android.com/guide/appendix/media-formats.html中列出的某些编解码器, 并且似乎有设备支持其他未列出的编解码器.
我有一个压缩文件,其大小为728,不知何故,我知道这是一个音频文件,它持续1040毫秒
压缩文件结构很简单:
它由14个字节块组成,每个块以0x0C开头:
0C XX xx月xx xx月xx xx月xx xx月xx xx月xx xx月xx 0C xx月xx xx月xx xx月xx xx月xx xx月xx xx月xx XX 0C xx月xx xx月xx xx月xx xx月xx xx月xx xx月xx XX 0℃XX xx月xx xx月xx xx月xx xx月xx xx月xx xx月xx 0C xx月xx xx月xx xx月xx xx月xx xx月xx xx月xx XX 0C xx月xx xx月xx xx月xx xx月xx xx月xx xx月xx XX 0℃XX xx月xx xx月xx xx月xx xx月xx xx月xx xx月xx 0C XX xx xx xx xx xx xx xx xx xx xx xx xx
(xx)可以是任何十六进制数
您可以在此处下载压缩二进制文件:
http://dusijun.files.wordpress.com/2013/02/29-aud-bin.doc (请重命名为*.aud)
或doc格式的文本视图
http://dusijun.files.wordpress.com/2013/02/29-aud.doc
没有标题或元信息.块数取决于实际音频的长度.文件大小的音频持续时间约为1.42
例如
如果文件大小= …
我无法VideoWriter在Raspberry Pi(Raspbian Weezy)上实例化和打开用于录制视频的OpenCV .
我的项目是用C++编写的,但我编写了一个最小的Python程序来演示这个问题.
https://gist.github.com/chriscollins/11ff2f43852e1c93dae8
我的C++代码和上面的Python代码都在我的Windows机器上运行没有问题.有时候笔者不开,但是这是可以预料的-我没有安装所有列出的编解码器(编解码器的列表来自开放CV源),但相当多的人正常工作.然而,在Raspberry Pi上,C++代码和Python代码都失败了,VideoWriter永远不会被打开.在上面的Python代码中,writer.isOpened()当在Raspberry Pi上运行时,为每个编解码器返回false.
我已将chown目标目录编辑为我正在运行Python脚本的用户,并将chmod其设置为ded,777因此我不相信它是权限问题.我认为它可能与我如何安装OpenCV或其某些依赖项有关,但我不确定如何纠正它.
我使用的安装过程如下:
更新通过固件/包rpi-update,apt-get update和apt-get upgrade.
通过以下方式安装以下依赖项apt-get:
libjpeg8
libjpeg8-dev
libjpeg8-dbg
libjpeg-progs
ffmpeg
libavcodec-dev
libavcodec53
libavformat53
libavformat-dev
libgstreamer0.10-0-dbg
libgstreamer0.10-0
libgstreamer0.10-dev
libxine1-ffmpeg
libxine-dev
libxine1-bin
libunicap2
libunicap2-dev
swig
libv4l-0
libv4l-dev
python-numpy
libpython2.6
python-dev
python2.6-dev
libgtk2.0-dev
下载并解压缩http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zip来/root/opencv-2.4.9.
cd /root/opencv-2.4.9并运行cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_PERF_TESTS=OFF -DBUILD_opencv_gpu=OFF -DBUILD_opencv_ocl=OFF.可通过https://gist.github.com/chriscollins/d8060e03a6acd6d4336c获得cmake的输出
make并make …
fourcc = cv2.cv.CV_FOURCC(*'XVID')
Run Code Online (Sandbox Code Playgroud)
以上行用于avi视频.以同样的方式,我们在Ubuntu中使用哪种编解码器用于mp4视频?
我正在尝试使用 openCV VideoWriter 类从 numpy 数组生成视频。我正在使用以下代码:
import numpy as np
import cv2
size = 720*16//9, 720
duration = 2
fps = 25
out = cv2.VideoWriter('output.avi', cv2.VideoWriter_fourcc(*'X264'), fps, size)
for _ in range(fps * duration):
data = np.random.randint(0, 256, size, dtype='uint8')
out.write(data)
out.release()
Run Code Online (Sandbox Code Playgroud)
编解码器似乎已安装,因为 ffmpeg 可以转换为 x264 编解码器,并且安装了 libx264。代码运行时没有警告,但是生成的视频似乎不包含数据,因为在尝试使用 mpv 读取它们时我总是收到以下消息:
[ffmpeg/demuxer] avi:找不到流 0 的编解码器参数(视频:h264 (X264 / 0x34363258),无,1280x720):未指定的像素格式
导致此问题的原因可能是什么?
我正在研究一个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中的网络连接类型(无论是3G,边缘还是gprs).
我需要检查带宽率.我需要发起一个电话.为此,我需要检查带宽率.仅在特定带宽之上,我需要为呼叫提供可见选项(以发起呼叫).
我需要以编程方式找到连接速度(Mobile Data Link,EDGE的连接速度).