我正在开发一个应用程序,我解码视频并替换某些帧并使用MediaMuxer和重新编码MediaCodec.如果我不替换任何帧(除了1080p视频,我将在下面解释),该应用程序可以工作,但是当我这样做时,替换后的帧会像素化,视频会不稳定.
此外,当我尝试使用1920x1080视频的应用程序时,我得到一个奇怪的输出,其中视频没有显示任何内容,直到我滚动到视频的开头,然后视频开始显示(但具有之前提到的相同问题)编辑后的像素化.
以下是我配置编码器的方法:
Video_format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, interval);
Video_format.setInteger(MediaFormat.KEY_BIT_RATE, bitRate);
Video_format.setInteger(MediaFormat.KEY_FRAME_RATE, frameRate);
Video_format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 0);
int color_format=MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar;
Video_format.setInteger(MediaFormat.KEY_COLOR_FORMAT, color_format);
encoder.configure(Video_format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
Run Code Online (Sandbox Code Playgroud)
总而言之,我有两个问题:
1-修改帧后的像素化帧和不连贯的视频.
2-损坏的1920x1080视频,除非我滚动到开头.
编辑
这是一个未经编辑的1080p视频示例,当我在VLC上播放并在手机上播放不正确时会显示绿屏,除非我滚动开始,现在奇怪地在YouTube上正常工作,除了开始时的绿框
这是一个720p视频样本,在开始时也使用绿色框架进行编辑,并在编辑后清除像素化和滞后
这是我用来解码重新编码的代码:
do{
Bitmap b1;
if(edited_frames.containsKey(extractor.getSampleTime()))
b1=BitmapFactory.decodeFile(edited_frames.get(extractor.getSampleTime()));
else
b1=decode(extractor.getSampleTime(),Preview_width,Preview_Height);
if(b1==null) continue;
Bitmap b_scal=Bitmap.createScaledBitmap(b1, Preview_width, Preview_Height, false);
if(b_scal==null) continue;
encode(b_scal, encoder, muxer, videoTrackIndex);
lastTime=extractor.getSampleTime();
}while(extractor.advance());
Run Code Online (Sandbox Code Playgroud)
解码方法:
private Bitmap decode(final long time,final int width,final int height){
MediaFormat newFormat = codec.getOutputFormat();
Bitmap b = null;
final int TIMEOUT_USEC = 10000;
ByteBuffer[] …Run Code Online (Sandbox Code Playgroud) 我想为使用.Net的Android编写用于GCM(Google Cloud Messaging)的第三方服务器.官方文档给出了将其与servlet-api和gcm-server.jar(服务器端的Java帮助程序)一起使用的指南.
在C#中使用它有任何等价物吗?
我正在使用Android应用程序,我正在使用Suger ORM进行数据库操作.现在我有一个场景,我必须检查"SomeTable"是否不存在然后创建它并插入记录,如果表已经存在并且有一些记录我必须更新记录.我已编写此代码以检查表是否不存在然后创建记录并保存它.
Total_Budget_List = Total_Budget.listAll(Total_Budget.class);
if (Total_Budget_List.size() == 0)
{
for (int i=0;i<Total_Budget_List.size();i++)
{
totalbudget = new Total_Budget(Select_Members.get(i).getId()+"",CurrentDate,per_person_budget+"");
totalbudget.save();
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到的数据库中没有这样的表.现在我如何检查表是否存在并且该表中是否有任何记录.
我已经搜索并读取了^修饰符状态以忽略你放在[]中的任何内容scanf.例如:
int val;
scanf("%[^abc] %d, &val);
printf("val is %d", val);
Run Code Online (Sandbox Code Playgroud)
现在,如果我输入abc42,我认为abc将被忽略,42将被存储到val中.但是,这不会发生.
我也尝试scanf通过制作来抑制它:
scanf("%*[^abc] %d, &val);
Run Code Online (Sandbox Code Playgroud)
但这也行不通.所以我对^实际上做了什么很困惑.
在尝试StringBuilder从缓存中填充后,我尝试检查a 是否为null:
StringBuilder videoSitemap;
if (AppSettings.CachingEnabled)
{
videoSitemap = CacheHelper.Get<StringBuilder>("DynamicVideoSitemap");
}
if (videoSitemap == null)
{
videoSitemap = new StringBuilder();
....
}
Run Code Online (Sandbox Code Playgroud)
但是在尝试编译时遇到以下错误:
CS0165使用未分配的变量'videoSitemap'
我该怎么做,然后检查对象是否为空 - 如果我实例化它但不使用缓存,那么StringBuilder永远不会为null
android ×2
c# ×2
.net ×1
c ×1
mediacodec ×1
mediamuxer ×1
orm ×1
scanf ×1
sugarorm ×1
video ×1