作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试打开一个从自定义输入缓冲区读取而不是从媒体文件读取的 IContainer 对象。此自定义输入缓冲区的实现如下。
创建和打开容器的代码如下。
// Open up the container for READING
mInputCStore = new CStore();
IContainerFormat format = IContainerFormat.make();
if (format.setInputFormat("flv") < 0) {
throw new IllegalArgumentException("Failed to initialize the input format");
}
// Open up the container
mInputContainer = IContainer.make();
int retval = mInputContainer.open(mPlaybackContainerStore, IContainer.Type.READ, format);
if (retval < 0) {
// This little trick converts the non friendly integer return value into
// a slightly more friendly object to get a human-readable error name
IError error = IError.make(retval);
throw new IllegalArgumentException("could not open input container: " + mPlaybackContainerStore + "; Error: " + error.getDescription());
}
Exception in thread "main" java.lang.IllegalArgumentException: could not open input container: com.client.video.ContainerStore@61981853; Error: Operation not permitted
package test;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ByteChannel;
import java.util.concurrent.ConcurrentLinkedQueue;
public class CStore implements ByteChannel {
private ConcurrentLinkedQueue<DataChunk> mChunkQueue = null;
private int mQueueSize = 0;
// constructor
public CStore(String type) {
mQueueSize = 0;
mChunkQueue = new ConcurrentLinkedQueue<DataChunk>();
mChunkQueue.clear();
}
@Override
public void close() throws IOException {
return;
}
@Override
public boolean isOpen() {
return false;
}
@Override
public int write(ByteBuffer buffer) throws IOException {
DataChunk chunk = new DataChunk(buffer);
mChunkQueue.add(chunk);
mQueueSize += chunk.getLength();
return 0;
}
public int read(ByteBuffer buffer) throws IOException {
int result = 0;
DataChunk chunk = mChunkQueue.poll();
if (chunk != null) {
buffer = chunk.getBuffer();
if (buffer != null) {
result = 0;
} else {
result = 1;
}
}
return result;
}
}
最佳答案
我打开了一个 IContainer 来读取 InputStream 的自定义实现。为此,您必须手动设置通常在从文件读取时自动检测到的信息(即:输入格式、编解码器、编解码器详细信息)。
// Example input stream (raw audio encoded with mulaw).
InputStream input = new FileInputStream("/tmp/test.ul");
// Manually set the input format.
IContainerFormat inputFormat = IContainerFormat.make();
inputFormat.setInputFormat("mulaw");
// Open the container.
IContainer container = IContainer.make();
container.open(input, inputFormat);
// Initialize the decoder.
IStreamCoder coder = container.getStream(0).getStreamCoder();
coder.setSampleRate(8000);
coder.setChannels(1);
coder.open(null, null);
关于ffmpeg - 使用自定义 ByteChannel 读取时,IContainer.open() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24921649/
我的程序必须上传用户选择的文本文件。我写了这个函数: void UploadToDatabase() throws MalformedURLException, IOException {
我正在尝试打开一个从自定义输入缓冲区读取而不是从媒体文件读取的 IContainer 对象。此自定义输入缓冲区的实现如下。 创建和打开容器的代码如下。 // Open up the container
您好,下面的代码允许将字节 channel 升级到 SSL。 有谁知道如何恢复这个过程?我希望能够升级或降级 java nio 字节 channel ,或者在不关闭套接字的情况下更改 channel
我是一名优秀的程序员,十分优秀!